Browse Source

rm *.bin and *.list

lyon1998 4 years ago
parent
commit
be294d7253

+ 2 - 0
port/qemu/.gitignore

@@ -1,2 +1,4 @@
 *txt
 *elf
+*bin
+*list

BIN
port/qemu/demos/printf_demo/main.bin


+ 37 - 13
port/qemu/demos/printf_demo/main.c

@@ -1,24 +1,48 @@
 #define USE_STDPERIPH_DRIVER
-#include "stm32_p103.h"
 #include "myprintk.h"
+#include "stm32_p103.h"
+
+void sleep() {
+    int i = 1000000;
+    while (i-- > 0)
+        ;
+}
 
-void sleep()
-{
-   int i=1000000;
-   while(i-->0);
+/* redirect printf to myprintf */
+#define printf myprintf
+
+static void prime_number_100_c() {
+    int num = 0;
+    num = 0;
+    /* run */
+    for (int i = 2; i < 100; i++) {
+        int is_prime = 1;
+        for (int j = 2; j < i; j++) {
+            if (i % j == 0) {
+                is_prime = 0;
+                break;
+            }
+        }
+        if (is_prime) {
+            num = num + i;
+        }
+    }
+    if (1060 != num) {
+        printf("[error]: prime_number_100\r\n");
+    }
 }
 
-int main(void)
-{
+int main(void) {
     uint8_t b;
-    int32_t num1=0x1234;
-    char *str1="Strings";
-    char ch1='Z';
+    int32_t num1 = 0x1234;
+    char* str1 = "Strings";
+    char ch1 = 'Z';
 
-    //first init myprintf device(usart2)
+    // first init myprintf device(usart2)
     myprintf_init();
-    while(1) {
-        myprintf("test num %d=0x%x str %s ch %c\n",num1,num1,str1,ch1);
+    prime_number_100_c();
+    while (1) {
+        myprintf("test num %d=0x%x str %s ch %c\n", num1, num1, str1, ch1);
         sleep();
     }
 }

+ 0 - 17325
port/qemu/demos/printf_demo/main.list

@@ -1,17325 +0,0 @@
-
-demos/printf_demo/main.elf:     file format elf32-littlearm
-
-
-Disassembly of section .text:
-
-00000000 <g_pfnVectors>:
-       0:	00 50 00 20 e5 59 00 00 29 5a 00 00 29 5a 00 00     .P. .Y..)Z..)Z..
-      10:	29 5a 00 00 29 5a 00 00 29 5a 00 00 00 00 00 00     )Z..)Z..)Z......
-	...
-      2c:	29 5a 00 00 29 5a 00 00 00 00 00 00 29 5a 00 00     )Z..)Z......)Z..
-      3c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      4c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      5c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      6c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      7c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      8c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      9c:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      ac:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      bc:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      cc:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-      dc:	29 5a 00 00 29 5a 00 00 29 5a 00 00 29 5a 00 00     )Z..)Z..)Z..)Z..
-	...
-     108:	5f f8 08 f1                                         _...
-
-0000010c <__get_PSP>:
- * Return the actual process stack pointer
- */
-uint32_t __get_PSP(void) __attribute__( ( naked ) );
-uint32_t __get_PSP(void)
-{
-  uint32_t result=0;
-     10c:	2400      	movs	r4, #0
-
-  __ASM volatile ("MRS %0, psp\n\t" 
-     10e:	f3ef 8309 	mrs	r3, PSP
-     112:	4618      	mov	r0, r3
-     114:	4770      	bx	lr
-     116:	461c      	mov	r4, r3
-                  "MOV r0, %0 \n\t"
-                  "BX  lr     \n\t"  : "=r" (result) );
-  return(result);
-     118:	4623      	mov	r3, r4
-}
-     11a:	4618      	mov	r0, r3
-
-0000011c <__set_PSP>:
- * Assign the value ProcessStackPointer to the MSP 
- * (process stack pointer) Cortex processor register
- */
-void __set_PSP(uint32_t topOfProcStack) __attribute__( ( naked ) );
-void __set_PSP(uint32_t topOfProcStack)
-{
-     11c:	4603      	mov	r3, r0
-  __ASM volatile ("MSR psp, %0\n\t"
-     11e:	f383 8809 	msr	PSP, r3
-     122:	4770      	bx	lr
-                  "BX  lr     \n\t" : : "r" (topOfProcStack) );
-}
-     124:	bf00      	nop
-
-00000126 <__get_MSP>:
- * Cortex processor register
- */
-uint32_t __get_MSP(void) __attribute__( ( naked ) );
-uint32_t __get_MSP(void)
-{
-  uint32_t result=0;
-     126:	2400      	movs	r4, #0
-
-  __ASM volatile ("MRS %0, msp\n\t" 
-     128:	f3ef 8308 	mrs	r3, MSP
-     12c:	4618      	mov	r0, r3
-     12e:	4770      	bx	lr
-     130:	461c      	mov	r4, r3
-                  "MOV r0, %0 \n\t"
-                  "BX  lr     \n\t"  : "=r" (result) );
-  return(result);
-     132:	4623      	mov	r3, r4
-}
-     134:	4618      	mov	r0, r3
-
-00000136 <__set_MSP>:
- * Assign the value mainStackPointer to the MSP 
- * (main stack pointer) Cortex processor register
- */
-void __set_MSP(uint32_t topOfMainStack) __attribute__( ( naked ) );
-void __set_MSP(uint32_t topOfMainStack)
-{
-     136:	4603      	mov	r3, r0
-  __ASM volatile ("MSR msp, %0\n\t"
-     138:	f383 8808 	msr	MSP, r3
-     13c:	4770      	bx	lr
-                  "BX  lr     \n\t" : : "r" (topOfMainStack) );
-}
-     13e:	bf00      	nop
-
-00000140 <__get_BASEPRI>:
- * @return BasePriority
- *
- * Return the content of the base priority register
- */
-uint32_t __get_BASEPRI(void)
-{
-     140:	b480      	push	{r7}
-     142:	b083      	sub	sp, #12
-     144:	af00      	add	r7, sp, #0
-  uint32_t result=0;
-     146:	2300      	movs	r3, #0
-     148:	607b      	str	r3, [r7, #4]
-  
-  __ASM volatile ("MRS %0, basepri_max" : "=r" (result) );
-     14a:	f3ef 8312 	mrs	r3, BASEPRI_MAX
-     14e:	607b      	str	r3, [r7, #4]
-  return(result);
-     150:	687b      	ldr	r3, [r7, #4]
-}
-     152:	4618      	mov	r0, r3
-     154:	370c      	adds	r7, #12
-     156:	46bd      	mov	sp, r7
-     158:	bc80      	pop	{r7}
-     15a:	4770      	bx	lr
-
-0000015c <__set_BASEPRI>:
- * @param  basePri  BasePriority
- *
- * Set the base priority register
- */
-void __set_BASEPRI(uint32_t value)
-{
-     15c:	b480      	push	{r7}
-     15e:	b083      	sub	sp, #12
-     160:	af00      	add	r7, sp, #0
-     162:	6078      	str	r0, [r7, #4]
-  __ASM volatile ("MSR basepri, %0" : : "r" (value) );
-     164:	687b      	ldr	r3, [r7, #4]
-     166:	f383 8811 	msr	BASEPRI, r3
-}
-     16a:	bf00      	nop
-     16c:	370c      	adds	r7, #12
-     16e:	46bd      	mov	sp, r7
-     170:	bc80      	pop	{r7}
-     172:	4770      	bx	lr
-
-00000174 <__get_PRIMASK>:
- * @return PriMask
- *
- * Return state of the priority mask bit from the priority mask register
- */
-uint32_t __get_PRIMASK(void)
-{
-     174:	b480      	push	{r7}
-     176:	b083      	sub	sp, #12
-     178:	af00      	add	r7, sp, #0
-  uint32_t result=0;
-     17a:	2300      	movs	r3, #0
-     17c:	607b      	str	r3, [r7, #4]
-
-  __ASM volatile ("MRS %0, primask" : "=r" (result) );
-     17e:	f3ef 8310 	mrs	r3, PRIMASK
-     182:	607b      	str	r3, [r7, #4]
-  return(result);
-     184:	687b      	ldr	r3, [r7, #4]
-}
-     186:	4618      	mov	r0, r3
-     188:	370c      	adds	r7, #12
-     18a:	46bd      	mov	sp, r7
-     18c:	bc80      	pop	{r7}
-     18e:	4770      	bx	lr
-
-00000190 <__set_PRIMASK>:
- * @param  priMask  PriMask
- *
- * Set the priority mask bit in the priority mask register
- */
-void __set_PRIMASK(uint32_t priMask)
-{
-     190:	b480      	push	{r7}
-     192:	b083      	sub	sp, #12
-     194:	af00      	add	r7, sp, #0
-     196:	6078      	str	r0, [r7, #4]
-  __ASM volatile ("MSR primask, %0" : : "r" (priMask) );
-     198:	687b      	ldr	r3, [r7, #4]
-     19a:	f383 8810 	msr	PRIMASK, r3
-}
-     19e:	bf00      	nop
-     1a0:	370c      	adds	r7, #12
-     1a2:	46bd      	mov	sp, r7
-     1a4:	bc80      	pop	{r7}
-     1a6:	4770      	bx	lr
-
-000001a8 <__get_FAULTMASK>:
- * @return FaultMask
- *
- * Return the content of the fault mask register
- */
-uint32_t __get_FAULTMASK(void)
-{
-     1a8:	b480      	push	{r7}
-     1aa:	b083      	sub	sp, #12
-     1ac:	af00      	add	r7, sp, #0
-  uint32_t result=0;
-     1ae:	2300      	movs	r3, #0
-     1b0:	607b      	str	r3, [r7, #4]
-  
-  __ASM volatile ("MRS %0, faultmask" : "=r" (result) );
-     1b2:	f3ef 8313 	mrs	r3, FAULTMASK
-     1b6:	607b      	str	r3, [r7, #4]
-  return(result);
-     1b8:	687b      	ldr	r3, [r7, #4]
-}
-     1ba:	4618      	mov	r0, r3
-     1bc:	370c      	adds	r7, #12
-     1be:	46bd      	mov	sp, r7
-     1c0:	bc80      	pop	{r7}
-     1c2:	4770      	bx	lr
-
-000001c4 <__set_FAULTMASK>:
- * @param  faultMask  faultMask value
- *
- * Set the fault mask register
- */
-void __set_FAULTMASK(uint32_t faultMask)
-{
-     1c4:	b480      	push	{r7}
-     1c6:	b083      	sub	sp, #12
-     1c8:	af00      	add	r7, sp, #0
-     1ca:	6078      	str	r0, [r7, #4]
-  __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
-     1cc:	687b      	ldr	r3, [r7, #4]
-     1ce:	f383 8813 	msr	FAULTMASK, r3
-}
-     1d2:	bf00      	nop
-     1d4:	370c      	adds	r7, #12
-     1d6:	46bd      	mov	sp, r7
-     1d8:	bc80      	pop	{r7}
-     1da:	4770      	bx	lr
-
-000001dc <__get_CONTROL>:
-*  @return Control value
- *
- * Return the content of the control register
- */
-uint32_t __get_CONTROL(void)
-{
-     1dc:	b480      	push	{r7}
-     1de:	b083      	sub	sp, #12
-     1e0:	af00      	add	r7, sp, #0
-  uint32_t result=0;
-     1e2:	2300      	movs	r3, #0
-     1e4:	607b      	str	r3, [r7, #4]
-
-  __ASM volatile ("MRS %0, control" : "=r" (result) );
-     1e6:	f3ef 8314 	mrs	r3, CONTROL
-     1ea:	607b      	str	r3, [r7, #4]
-  return(result);
-     1ec:	687b      	ldr	r3, [r7, #4]
-}
-     1ee:	4618      	mov	r0, r3
-     1f0:	370c      	adds	r7, #12
-     1f2:	46bd      	mov	sp, r7
-     1f4:	bc80      	pop	{r7}
-     1f6:	4770      	bx	lr
-
-000001f8 <__set_CONTROL>:
- * @param  control  Control value
- *
- * Set the control register
- */
-void __set_CONTROL(uint32_t control)
-{
-     1f8:	b480      	push	{r7}
-     1fa:	b083      	sub	sp, #12
-     1fc:	af00      	add	r7, sp, #0
-     1fe:	6078      	str	r0, [r7, #4]
-  __ASM volatile ("MSR control, %0" : : "r" (control) );
-     200:	687b      	ldr	r3, [r7, #4]
-     202:	f383 8814 	msr	CONTROL, r3
-}
-     206:	bf00      	nop
-     208:	370c      	adds	r7, #12
-     20a:	46bd      	mov	sp, r7
-     20c:	bc80      	pop	{r7}
-     20e:	4770      	bx	lr
-
-00000210 <__REV>:
- * @return        reversed value
- *
- * Reverse byte order in integer value
- */
-uint32_t __REV(uint32_t value)
-{
-     210:	b480      	push	{r7}
-     212:	b085      	sub	sp, #20
-     214:	af00      	add	r7, sp, #0
-     216:	6078      	str	r0, [r7, #4]
-  uint32_t result=0;
-     218:	2300      	movs	r3, #0
-     21a:	60fb      	str	r3, [r7, #12]
-  
-  __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
-     21c:	687b      	ldr	r3, [r7, #4]
-     21e:	ba1b      	rev	r3, r3
-     220:	60fb      	str	r3, [r7, #12]
-  return(result);
-     222:	68fb      	ldr	r3, [r7, #12]
-}
-     224:	4618      	mov	r0, r3
-     226:	3714      	adds	r7, #20
-     228:	46bd      	mov	sp, r7
-     22a:	bc80      	pop	{r7}
-     22c:	4770      	bx	lr
-
-0000022e <__REV16>:
- * @return        reversed value
- *
- * Reverse byte order in unsigned short value
- */
-uint32_t __REV16(uint16_t value)
-{
-     22e:	b480      	push	{r7}
-     230:	b085      	sub	sp, #20
-     232:	af00      	add	r7, sp, #0
-     234:	4603      	mov	r3, r0
-     236:	80fb      	strh	r3, [r7, #6]
-  uint32_t result=0;
-     238:	2300      	movs	r3, #0
-     23a:	60fb      	str	r3, [r7, #12]
-  
-  __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
-     23c:	88fb      	ldrh	r3, [r7, #6]
-     23e:	ba5b      	rev16	r3, r3
-     240:	60fb      	str	r3, [r7, #12]
-  return(result);
-     242:	68fb      	ldr	r3, [r7, #12]
-}
-     244:	4618      	mov	r0, r3
-     246:	3714      	adds	r7, #20
-     248:	46bd      	mov	sp, r7
-     24a:	bc80      	pop	{r7}
-     24c:	4770      	bx	lr
-
-0000024e <__REVSH>:
- * @return        reversed value
- *
- * Reverse byte order in signed short value with sign extension to integer
- */
-int32_t __REVSH(int16_t value)
-{
-     24e:	b480      	push	{r7}
-     250:	b085      	sub	sp, #20
-     252:	af00      	add	r7, sp, #0
-     254:	4603      	mov	r3, r0
-     256:	80fb      	strh	r3, [r7, #6]
-  uint32_t result=0;
-     258:	2300      	movs	r3, #0
-     25a:	60fb      	str	r3, [r7, #12]
-  
-  __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );
-     25c:	88fb      	ldrh	r3, [r7, #6]
-     25e:	badb      	revsh	r3, r3
-     260:	60fb      	str	r3, [r7, #12]
-  return(result);
-     262:	68fb      	ldr	r3, [r7, #12]
-}
-     264:	4618      	mov	r0, r3
-     266:	3714      	adds	r7, #20
-     268:	46bd      	mov	sp, r7
-     26a:	bc80      	pop	{r7}
-     26c:	4770      	bx	lr
-
-0000026e <__RBIT>:
- * @return        reversed value
- *
- * Reverse bit order of value
- */
-uint32_t __RBIT(uint32_t value)
-{
-     26e:	b480      	push	{r7}
-     270:	b085      	sub	sp, #20
-     272:	af00      	add	r7, sp, #0
-     274:	6078      	str	r0, [r7, #4]
-  uint32_t result=0;
-     276:	2300      	movs	r3, #0
-     278:	60fb      	str	r3, [r7, #12]
-  
-   __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
-     27a:	687b      	ldr	r3, [r7, #4]
-     27c:	fa93 f3a3 	rbit	r3, r3
-     280:	60fb      	str	r3, [r7, #12]
-   return(result);
-     282:	68fb      	ldr	r3, [r7, #12]
-}
-     284:	4618      	mov	r0, r3
-     286:	3714      	adds	r7, #20
-     288:	46bd      	mov	sp, r7
-     28a:	bc80      	pop	{r7}
-     28c:	4770      	bx	lr
-
-0000028e <__LDREXB>:
- * @return        value of (*address)
- *
- * Exclusive LDR command for 8 bit value
- */
-uint8_t __LDREXB(uint8_t *addr)
-{
-     28e:	b480      	push	{r7}
-     290:	b085      	sub	sp, #20
-     292:	af00      	add	r7, sp, #0
-     294:	6078      	str	r0, [r7, #4]
-    uint8_t result=0;
-     296:	2300      	movs	r3, #0
-     298:	73fb      	strb	r3, [r7, #15]
-  
-   __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );
-     29a:	687b      	ldr	r3, [r7, #4]
-     29c:	e8d3 3f4f 	ldrexb	r3, [r3]
-     2a0:	73fb      	strb	r3, [r7, #15]
-   return(result);
-     2a2:	7bfb      	ldrb	r3, [r7, #15]
-}
-     2a4:	4618      	mov	r0, r3
-     2a6:	3714      	adds	r7, #20
-     2a8:	46bd      	mov	sp, r7
-     2aa:	bc80      	pop	{r7}
-     2ac:	4770      	bx	lr
-
-000002ae <__LDREXH>:
- * @return        value of (*address)
- *
- * Exclusive LDR command for 16 bit values
- */
-uint16_t __LDREXH(uint16_t *addr)
-{
-     2ae:	b480      	push	{r7}
-     2b0:	b085      	sub	sp, #20
-     2b2:	af00      	add	r7, sp, #0
-     2b4:	6078      	str	r0, [r7, #4]
-    uint16_t result=0;
-     2b6:	2300      	movs	r3, #0
-     2b8:	81fb      	strh	r3, [r7, #14]
-  
-   __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );
-     2ba:	687b      	ldr	r3, [r7, #4]
-     2bc:	e8d3 3f5f 	ldrexh	r3, [r3]
-     2c0:	81fb      	strh	r3, [r7, #14]
-   return(result);
-     2c2:	89fb      	ldrh	r3, [r7, #14]
-}
-     2c4:	4618      	mov	r0, r3
-     2c6:	3714      	adds	r7, #20
-     2c8:	46bd      	mov	sp, r7
-     2ca:	bc80      	pop	{r7}
-     2cc:	4770      	bx	lr
-
-000002ce <__LDREXW>:
- * @return        value of (*address)
- *
- * Exclusive LDR command for 32 bit values
- */
-uint32_t __LDREXW(uint32_t *addr)
-{
-     2ce:	b480      	push	{r7}
-     2d0:	b085      	sub	sp, #20
-     2d2:	af00      	add	r7, sp, #0
-     2d4:	6078      	str	r0, [r7, #4]
-    uint32_t result=0;
-     2d6:	2300      	movs	r3, #0
-     2d8:	60fb      	str	r3, [r7, #12]
-  
-   __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );
-     2da:	687b      	ldr	r3, [r7, #4]
-     2dc:	e853 3f00 	ldrex	r3, [r3]
-     2e0:	60fb      	str	r3, [r7, #12]
-   return(result);
-     2e2:	68fb      	ldr	r3, [r7, #12]
-}
-     2e4:	4618      	mov	r0, r3
-     2e6:	3714      	adds	r7, #20
-     2e8:	46bd      	mov	sp, r7
-     2ea:	bc80      	pop	{r7}
-     2ec:	4770      	bx	lr
-
-000002ee <__STREXB>:
- * @return        successful / failed
- *
- * Exclusive STR command for 8 bit values
- */
-uint32_t __STREXB(uint8_t value, uint8_t *addr)
-{
-     2ee:	b480      	push	{r7}
-     2f0:	b085      	sub	sp, #20
-     2f2:	af00      	add	r7, sp, #0
-     2f4:	4603      	mov	r3, r0
-     2f6:	6039      	str	r1, [r7, #0]
-     2f8:	71fb      	strb	r3, [r7, #7]
-   uint32_t result=0;
-     2fa:	2300      	movs	r3, #0
-     2fc:	60fb      	str	r3, [r7, #12]
-  
-   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
-     2fe:	683a      	ldr	r2, [r7, #0]
-     300:	79f9      	ldrb	r1, [r7, #7]
-     302:	e8c2 1f43 	strexb	r3, r1, [r2]
-     306:	60fb      	str	r3, [r7, #12]
-   return(result);
-     308:	68fb      	ldr	r3, [r7, #12]
-}
-     30a:	4618      	mov	r0, r3
-     30c:	3714      	adds	r7, #20
-     30e:	46bd      	mov	sp, r7
-     310:	bc80      	pop	{r7}
-     312:	4770      	bx	lr
-
-00000314 <__STREXH>:
- * @return        successful / failed
- *
- * Exclusive STR command for 16 bit values
- */
-uint32_t __STREXH(uint16_t value, uint16_t *addr)
-{
-     314:	b480      	push	{r7}
-     316:	b085      	sub	sp, #20
-     318:	af00      	add	r7, sp, #0
-     31a:	4603      	mov	r3, r0
-     31c:	6039      	str	r1, [r7, #0]
-     31e:	80fb      	strh	r3, [r7, #6]
-   uint32_t result=0;
-     320:	2300      	movs	r3, #0
-     322:	60fb      	str	r3, [r7, #12]
-  
-   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
-     324:	683a      	ldr	r2, [r7, #0]
-     326:	88f9      	ldrh	r1, [r7, #6]
-     328:	e8c2 1f53 	strexh	r3, r1, [r2]
-     32c:	60fb      	str	r3, [r7, #12]
-   return(result);
-     32e:	68fb      	ldr	r3, [r7, #12]
-}
-     330:	4618      	mov	r0, r3
-     332:	3714      	adds	r7, #20
-     334:	46bd      	mov	sp, r7
-     336:	bc80      	pop	{r7}
-     338:	4770      	bx	lr
-
-0000033a <__STREXW>:
- * @return        successful / failed
- *
- * Exclusive STR command for 32 bit values
- */
-uint32_t __STREXW(uint32_t value, uint32_t *addr)
-{
-     33a:	b480      	push	{r7}
-     33c:	b085      	sub	sp, #20
-     33e:	af00      	add	r7, sp, #0
-     340:	6078      	str	r0, [r7, #4]
-     342:	6039      	str	r1, [r7, #0]
-   uint32_t result=0;
-     344:	2300      	movs	r3, #0
-     346:	60fb      	str	r3, [r7, #12]
-  
-   __ASM volatile ("strex %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
-     348:	683b      	ldr	r3, [r7, #0]
-     34a:	687a      	ldr	r2, [r7, #4]
-     34c:	e843 2300 	strex	r3, r2, [r3]
-     350:	60fb      	str	r3, [r7, #12]
-   return(result);
-     352:	68fb      	ldr	r3, [r7, #12]
-}
-     354:	4618      	mov	r0, r3
-     356:	3714      	adds	r7, #20
-     358:	46bd      	mov	sp, r7
-     35a:	bc80      	pop	{r7}
-     35c:	4770      	bx	lr
-	...
-
-00000360 <SystemInit>:
-  * @note   This function should be used only after reset.
-  * @param  None
-  * @retval None
-  */
-void SystemInit (void)
-{
-     360:	b580      	push	{r7, lr}
-     362:	af00      	add	r7, sp, #0
-  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
-  /* Set HSION bit */
-  RCC->CR |= (uint32_t)0x00000001;
-     364:	4b15      	ldr	r3, [pc, #84]	; (3bc <SystemInit+0x5c>)
-     366:	681b      	ldr	r3, [r3, #0]
-     368:	4a14      	ldr	r2, [pc, #80]	; (3bc <SystemInit+0x5c>)
-     36a:	f043 0301 	orr.w	r3, r3, #1
-     36e:	6013      	str	r3, [r2, #0]
-
-  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
-#ifndef STM32F10X_CL
-  RCC->CFGR &= (uint32_t)0xF8FF0000;
-     370:	4b12      	ldr	r3, [pc, #72]	; (3bc <SystemInit+0x5c>)
-     372:	685a      	ldr	r2, [r3, #4]
-     374:	4911      	ldr	r1, [pc, #68]	; (3bc <SystemInit+0x5c>)
-     376:	4b12      	ldr	r3, [pc, #72]	; (3c0 <SystemInit+0x60>)
-     378:	4013      	ands	r3, r2
-     37a:	604b      	str	r3, [r1, #4]
-#else
-  RCC->CFGR &= (uint32_t)0xF0FF0000;
-#endif /* STM32F10X_CL */   
-  
-  /* Reset HSEON, CSSON and PLLON bits */
-  RCC->CR &= (uint32_t)0xFEF6FFFF;
-     37c:	4b0f      	ldr	r3, [pc, #60]	; (3bc <SystemInit+0x5c>)
-     37e:	681b      	ldr	r3, [r3, #0]
-     380:	4a0e      	ldr	r2, [pc, #56]	; (3bc <SystemInit+0x5c>)
-     382:	f023 7384 	bic.w	r3, r3, #17301504	; 0x1080000
-     386:	f423 3380 	bic.w	r3, r3, #65536	; 0x10000
-     38a:	6013      	str	r3, [r2, #0]
-
-  /* Reset HSEBYP bit */
-  RCC->CR &= (uint32_t)0xFFFBFFFF;
-     38c:	4b0b      	ldr	r3, [pc, #44]	; (3bc <SystemInit+0x5c>)
-     38e:	681b      	ldr	r3, [r3, #0]
-     390:	4a0a      	ldr	r2, [pc, #40]	; (3bc <SystemInit+0x5c>)
-     392:	f423 2380 	bic.w	r3, r3, #262144	; 0x40000
-     396:	6013      	str	r3, [r2, #0]
-
-  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
-  RCC->CFGR &= (uint32_t)0xFF80FFFF;
-     398:	4b08      	ldr	r3, [pc, #32]	; (3bc <SystemInit+0x5c>)
-     39a:	685b      	ldr	r3, [r3, #4]
-     39c:	4a07      	ldr	r2, [pc, #28]	; (3bc <SystemInit+0x5c>)
-     39e:	f423 03fe 	bic.w	r3, r3, #8323072	; 0x7f0000
-     3a2:	6053      	str	r3, [r2, #4]
-
-  /* Reset CFGR2 register */
-  RCC->CFGR2 = 0x00000000;      
-#else
-  /* Disable all interrupts and clear pending bits  */
-  RCC->CIR = 0x009F0000;
-     3a4:	4b05      	ldr	r3, [pc, #20]	; (3bc <SystemInit+0x5c>)
-     3a6:	f44f 021f 	mov.w	r2, #10420224	; 0x9f0000
-     3aa:	609a      	str	r2, [r3, #8]
-  #endif /* DATA_IN_ExtSRAM */
-#endif 
-
-  /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
-  /* Configure the Flash Latency cycles and enable prefetch buffer */
-  SetSysClock();
-     3ac:	f000 f87e 	bl	4ac <SetSysClock>
-
-#ifdef VECT_TAB_SRAM
-  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
-#else
-  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
-     3b0:	4b04      	ldr	r3, [pc, #16]	; (3c4 <SystemInit+0x64>)
-     3b2:	f04f 6200 	mov.w	r2, #134217728	; 0x8000000
-     3b6:	609a      	str	r2, [r3, #8]
-#endif 
-}
-     3b8:	bf00      	nop
-     3ba:	bd80      	pop	{r7, pc}
-     3bc:	40021000 	.word	0x40021000
-     3c0:	f8ff0000 	.word	0xf8ff0000
-     3c4:	e000ed00 	.word	0xe000ed00
-
-000003c8 <SystemCoreClockUpdate>:
-  *           value for HSE crystal.
-  * @param  None
-  * @retval None
-  */
-void SystemCoreClockUpdate (void)
-{
-     3c8:	b480      	push	{r7}
-     3ca:	b085      	sub	sp, #20
-     3cc:	af00      	add	r7, sp, #0
-  uint32_t tmp = 0, pllmull = 0, pllsource = 0;
-     3ce:	2300      	movs	r3, #0
-     3d0:	60fb      	str	r3, [r7, #12]
-     3d2:	2300      	movs	r3, #0
-     3d4:	60bb      	str	r3, [r7, #8]
-     3d6:	2300      	movs	r3, #0
-     3d8:	607b      	str	r3, [r7, #4]
-#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
-  uint32_t prediv1factor = 0;
-#endif /* STM32F10X_LD_VL or STM32F10X_MD_VL or STM32F10X_HD_VL */
-    
-  /* Get SYSCLK source -------------------------------------------------------*/
-  tmp = RCC->CFGR & RCC_CFGR_SWS;
-     3da:	4b2f      	ldr	r3, [pc, #188]	; (498 <SystemCoreClockUpdate+0xd0>)
-     3dc:	685b      	ldr	r3, [r3, #4]
-     3de:	f003 030c 	and.w	r3, r3, #12
-     3e2:	60fb      	str	r3, [r7, #12]
-  
-  switch (tmp)
-     3e4:	68fb      	ldr	r3, [r7, #12]
-     3e6:	2b08      	cmp	r3, #8
-     3e8:	d011      	beq.n	40e <SystemCoreClockUpdate+0x46>
-     3ea:	68fb      	ldr	r3, [r7, #12]
-     3ec:	2b08      	cmp	r3, #8
-     3ee:	d83a      	bhi.n	466 <SystemCoreClockUpdate+0x9e>
-     3f0:	68fb      	ldr	r3, [r7, #12]
-     3f2:	2b00      	cmp	r3, #0
-     3f4:	d003      	beq.n	3fe <SystemCoreClockUpdate+0x36>
-     3f6:	68fb      	ldr	r3, [r7, #12]
-     3f8:	2b04      	cmp	r3, #4
-     3fa:	d004      	beq.n	406 <SystemCoreClockUpdate+0x3e>
-     3fc:	e033      	b.n	466 <SystemCoreClockUpdate+0x9e>
-  {
-    case 0x00:  /* HSI used as system clock */
-      SystemCoreClock = HSI_VALUE;
-     3fe:	4b27      	ldr	r3, [pc, #156]	; (49c <SystemCoreClockUpdate+0xd4>)
-     400:	4a27      	ldr	r2, [pc, #156]	; (4a0 <SystemCoreClockUpdate+0xd8>)
-     402:	601a      	str	r2, [r3, #0]
-      break;
-     404:	e033      	b.n	46e <SystemCoreClockUpdate+0xa6>
-    case 0x04:  /* HSE used as system clock */
-      SystemCoreClock = HSE_VALUE;
-     406:	4b25      	ldr	r3, [pc, #148]	; (49c <SystemCoreClockUpdate+0xd4>)
-     408:	4a25      	ldr	r2, [pc, #148]	; (4a0 <SystemCoreClockUpdate+0xd8>)
-     40a:	601a      	str	r2, [r3, #0]
-      break;
-     40c:	e02f      	b.n	46e <SystemCoreClockUpdate+0xa6>
-    case 0x08:  /* PLL used as system clock */
-
-      /* Get PLL clock source and multiplication factor ----------------------*/
-      pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
-     40e:	4b22      	ldr	r3, [pc, #136]	; (498 <SystemCoreClockUpdate+0xd0>)
-     410:	685b      	ldr	r3, [r3, #4]
-     412:	f403 1370 	and.w	r3, r3, #3932160	; 0x3c0000
-     416:	60bb      	str	r3, [r7, #8]
-      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
-     418:	4b1f      	ldr	r3, [pc, #124]	; (498 <SystemCoreClockUpdate+0xd0>)
-     41a:	685b      	ldr	r3, [r3, #4]
-     41c:	f403 3380 	and.w	r3, r3, #65536	; 0x10000
-     420:	607b      	str	r3, [r7, #4]
-      
-#ifndef STM32F10X_CL      
-      pllmull = ( pllmull >> 18) + 2;
-     422:	68bb      	ldr	r3, [r7, #8]
-     424:	0c9b      	lsrs	r3, r3, #18
-     426:	3302      	adds	r3, #2
-     428:	60bb      	str	r3, [r7, #8]
-      
-      if (pllsource == 0x00)
-     42a:	687b      	ldr	r3, [r7, #4]
-     42c:	2b00      	cmp	r3, #0
-     42e:	d106      	bne.n	43e <SystemCoreClockUpdate+0x76>
-      {
-        /* HSI oscillator clock divided by 2 selected as PLL clock entry */
-        SystemCoreClock = (HSI_VALUE >> 1) * pllmull;
-     430:	68bb      	ldr	r3, [r7, #8]
-     432:	4a1c      	ldr	r2, [pc, #112]	; (4a4 <SystemCoreClockUpdate+0xdc>)
-     434:	fb02 f303 	mul.w	r3, r2, r3
-     438:	4a18      	ldr	r2, [pc, #96]	; (49c <SystemCoreClockUpdate+0xd4>)
-     43a:	6013      	str	r3, [r2, #0]
-          pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8 ) + 2; 
-          SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                         
-        }
-      }
-#endif /* STM32F10X_CL */ 
-      break;
-     43c:	e017      	b.n	46e <SystemCoreClockUpdate+0xa6>
-        if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
-     43e:	4b16      	ldr	r3, [pc, #88]	; (498 <SystemCoreClockUpdate+0xd0>)
-     440:	685b      	ldr	r3, [r3, #4]
-     442:	f403 3300 	and.w	r3, r3, #131072	; 0x20000
-     446:	2b00      	cmp	r3, #0
-     448:	d006      	beq.n	458 <SystemCoreClockUpdate+0x90>
-          SystemCoreClock = (HSE_VALUE >> 1) * pllmull;
-     44a:	68bb      	ldr	r3, [r7, #8]
-     44c:	4a15      	ldr	r2, [pc, #84]	; (4a4 <SystemCoreClockUpdate+0xdc>)
-     44e:	fb02 f303 	mul.w	r3, r2, r3
-     452:	4a12      	ldr	r2, [pc, #72]	; (49c <SystemCoreClockUpdate+0xd4>)
-     454:	6013      	str	r3, [r2, #0]
-      break;
-     456:	e00a      	b.n	46e <SystemCoreClockUpdate+0xa6>
-          SystemCoreClock = HSE_VALUE * pllmull;
-     458:	68bb      	ldr	r3, [r7, #8]
-     45a:	4a11      	ldr	r2, [pc, #68]	; (4a0 <SystemCoreClockUpdate+0xd8>)
-     45c:	fb02 f303 	mul.w	r3, r2, r3
-     460:	4a0e      	ldr	r2, [pc, #56]	; (49c <SystemCoreClockUpdate+0xd4>)
-     462:	6013      	str	r3, [r2, #0]
-      break;
-     464:	e003      	b.n	46e <SystemCoreClockUpdate+0xa6>
-
-    default:
-      SystemCoreClock = HSI_VALUE;
-     466:	4b0d      	ldr	r3, [pc, #52]	; (49c <SystemCoreClockUpdate+0xd4>)
-     468:	4a0d      	ldr	r2, [pc, #52]	; (4a0 <SystemCoreClockUpdate+0xd8>)
-     46a:	601a      	str	r2, [r3, #0]
-      break;
-     46c:	bf00      	nop
-  }
-  
-  /* Compute HCLK clock frequency ----------------*/
-  /* Get HCLK prescaler */
-  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
-     46e:	4b0a      	ldr	r3, [pc, #40]	; (498 <SystemCoreClockUpdate+0xd0>)
-     470:	685b      	ldr	r3, [r3, #4]
-     472:	091b      	lsrs	r3, r3, #4
-     474:	f003 030f 	and.w	r3, r3, #15
-     478:	4a0b      	ldr	r2, [pc, #44]	; (4a8 <SystemCoreClockUpdate+0xe0>)
-     47a:	5cd3      	ldrb	r3, [r2, r3]
-     47c:	b2db      	uxtb	r3, r3
-     47e:	60fb      	str	r3, [r7, #12]
-  /* HCLK clock frequency */
-  SystemCoreClock >>= tmp;  
-     480:	4b06      	ldr	r3, [pc, #24]	; (49c <SystemCoreClockUpdate+0xd4>)
-     482:	681a      	ldr	r2, [r3, #0]
-     484:	68fb      	ldr	r3, [r7, #12]
-     486:	fa22 f303 	lsr.w	r3, r2, r3
-     48a:	4a04      	ldr	r2, [pc, #16]	; (49c <SystemCoreClockUpdate+0xd4>)
-     48c:	6013      	str	r3, [r2, #0]
-}
-     48e:	bf00      	nop
-     490:	3714      	adds	r7, #20
-     492:	46bd      	mov	sp, r7
-     494:	bc80      	pop	{r7}
-     496:	4770      	bx	lr
-     498:	40021000 	.word	0x40021000
-     49c:	20000000 	.word	0x20000000
-     4a0:	007a1200 	.word	0x007a1200
-     4a4:	003d0900 	.word	0x003d0900
-     4a8:	20000004 	.word	0x20000004
-
-000004ac <SetSysClock>:
-  * @brief  Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers.
-  * @param  None
-  * @retval None
-  */
-static void SetSysClock(void)
-{
-     4ac:	b580      	push	{r7, lr}
-     4ae:	af00      	add	r7, sp, #0
-#elif defined SYSCLK_FREQ_48MHz
-  SetSysClockTo48();
-#elif defined SYSCLK_FREQ_56MHz
-  SetSysClockTo56();  
-#elif defined SYSCLK_FREQ_72MHz
-  SetSysClockTo72();
-     4b0:	f000 f802 	bl	4b8 <SetSysClockTo72>
-#endif
- 
- /* If none of the define above is enabled, the HSI is used as System clock
-    source (default after reset) */ 
-}
-     4b4:	bf00      	nop
-     4b6:	bd80      	pop	{r7, pc}
-
-000004b8 <SetSysClockTo72>:
-  * @note   This function should be used only after reset.
-  * @param  None
-  * @retval None
-  */
-static void SetSysClockTo72(void)
-{
-     4b8:	b480      	push	{r7}
-     4ba:	b083      	sub	sp, #12
-     4bc:	af00      	add	r7, sp, #0
-  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
-     4be:	2300      	movs	r3, #0
-     4c0:	607b      	str	r3, [r7, #4]
-     4c2:	2300      	movs	r3, #0
-     4c4:	603b      	str	r3, [r7, #0]
-  
-  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/    
-  /* Enable HSE */    
-  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
-     4c6:	4b3a      	ldr	r3, [pc, #232]	; (5b0 <SetSysClockTo72+0xf8>)
-     4c8:	681b      	ldr	r3, [r3, #0]
-     4ca:	4a39      	ldr	r2, [pc, #228]	; (5b0 <SetSysClockTo72+0xf8>)
-     4cc:	f443 3380 	orr.w	r3, r3, #65536	; 0x10000
-     4d0:	6013      	str	r3, [r2, #0]
- 
-  /* Wait till HSE is ready and if Time out is reached exit */
-  do
-  {
-    HSEStatus = RCC->CR & RCC_CR_HSERDY;
-     4d2:	4b37      	ldr	r3, [pc, #220]	; (5b0 <SetSysClockTo72+0xf8>)
-     4d4:	681b      	ldr	r3, [r3, #0]
-     4d6:	f403 3300 	and.w	r3, r3, #131072	; 0x20000
-     4da:	603b      	str	r3, [r7, #0]
-    StartUpCounter++;  
-     4dc:	687b      	ldr	r3, [r7, #4]
-     4de:	3301      	adds	r3, #1
-     4e0:	607b      	str	r3, [r7, #4]
-  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
-     4e2:	683b      	ldr	r3, [r7, #0]
-     4e4:	2b00      	cmp	r3, #0
-     4e6:	d103      	bne.n	4f0 <SetSysClockTo72+0x38>
-     4e8:	687b      	ldr	r3, [r7, #4]
-     4ea:	f5b3 6fa0 	cmp.w	r3, #1280	; 0x500
-     4ee:	d1f0      	bne.n	4d2 <SetSysClockTo72+0x1a>
-
-  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
-     4f0:	4b2f      	ldr	r3, [pc, #188]	; (5b0 <SetSysClockTo72+0xf8>)
-     4f2:	681b      	ldr	r3, [r3, #0]
-     4f4:	f403 3300 	and.w	r3, r3, #131072	; 0x20000
-     4f8:	2b00      	cmp	r3, #0
-     4fa:	d002      	beq.n	502 <SetSysClockTo72+0x4a>
-  {
-    HSEStatus = (uint32_t)0x01;
-     4fc:	2301      	movs	r3, #1
-     4fe:	603b      	str	r3, [r7, #0]
-     500:	e001      	b.n	506 <SetSysClockTo72+0x4e>
-  }
-  else
-  {
-    HSEStatus = (uint32_t)0x00;
-     502:	2300      	movs	r3, #0
-     504:	603b      	str	r3, [r7, #0]
-  }  
-
-  if (HSEStatus == (uint32_t)0x01)
-     506:	683b      	ldr	r3, [r7, #0]
-     508:	2b01      	cmp	r3, #1
-     50a:	d14b      	bne.n	5a4 <SetSysClockTo72+0xec>
-  {
-    /* Enable Prefetch Buffer */
-    FLASH->ACR |= FLASH_ACR_PRFTBE;
-     50c:	4b29      	ldr	r3, [pc, #164]	; (5b4 <SetSysClockTo72+0xfc>)
-     50e:	681b      	ldr	r3, [r3, #0]
-     510:	4a28      	ldr	r2, [pc, #160]	; (5b4 <SetSysClockTo72+0xfc>)
-     512:	f043 0310 	orr.w	r3, r3, #16
-     516:	6013      	str	r3, [r2, #0]
-
-    /* Flash 2 wait state */
-    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
-     518:	4b26      	ldr	r3, [pc, #152]	; (5b4 <SetSysClockTo72+0xfc>)
-     51a:	681b      	ldr	r3, [r3, #0]
-     51c:	4a25      	ldr	r2, [pc, #148]	; (5b4 <SetSysClockTo72+0xfc>)
-     51e:	f023 0303 	bic.w	r3, r3, #3
-     522:	6013      	str	r3, [r2, #0]
-    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    
-     524:	4b23      	ldr	r3, [pc, #140]	; (5b4 <SetSysClockTo72+0xfc>)
-     526:	681b      	ldr	r3, [r3, #0]
-     528:	4a22      	ldr	r2, [pc, #136]	; (5b4 <SetSysClockTo72+0xfc>)
-     52a:	f043 0302 	orr.w	r3, r3, #2
-     52e:	6013      	str	r3, [r2, #0]
-
- 
-    /* HCLK = SYSCLK */
-    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
-     530:	4b1f      	ldr	r3, [pc, #124]	; (5b0 <SetSysClockTo72+0xf8>)
-     532:	4a1f      	ldr	r2, [pc, #124]	; (5b0 <SetSysClockTo72+0xf8>)
-     534:	685b      	ldr	r3, [r3, #4]
-     536:	6053      	str	r3, [r2, #4]
-      
-    /* PCLK2 = HCLK */
-    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
-     538:	4b1d      	ldr	r3, [pc, #116]	; (5b0 <SetSysClockTo72+0xf8>)
-     53a:	4a1d      	ldr	r2, [pc, #116]	; (5b0 <SetSysClockTo72+0xf8>)
-     53c:	685b      	ldr	r3, [r3, #4]
-     53e:	6053      	str	r3, [r2, #4]
-    
-    /* PCLK1 = HCLK */
-    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
-     540:	4b1b      	ldr	r3, [pc, #108]	; (5b0 <SetSysClockTo72+0xf8>)
-     542:	685b      	ldr	r3, [r3, #4]
-     544:	4a1a      	ldr	r2, [pc, #104]	; (5b0 <SetSysClockTo72+0xf8>)
-     546:	f443 6380 	orr.w	r3, r3, #1024	; 0x400
-     54a:	6053      	str	r3, [r2, #4]
-    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
-    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
-                            RCC_CFGR_PLLMULL9); 
-#else    
-    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
-    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
-     54c:	4b18      	ldr	r3, [pc, #96]	; (5b0 <SetSysClockTo72+0xf8>)
-     54e:	685b      	ldr	r3, [r3, #4]
-     550:	4a17      	ldr	r2, [pc, #92]	; (5b0 <SetSysClockTo72+0xf8>)
-     552:	f423 137c 	bic.w	r3, r3, #4128768	; 0x3f0000
-     556:	6053      	str	r3, [r2, #4]
-                                        RCC_CFGR_PLLMULL));
-    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
-     558:	4b15      	ldr	r3, [pc, #84]	; (5b0 <SetSysClockTo72+0xf8>)
-     55a:	685b      	ldr	r3, [r3, #4]
-     55c:	4a14      	ldr	r2, [pc, #80]	; (5b0 <SetSysClockTo72+0xf8>)
-     55e:	f443 13e8 	orr.w	r3, r3, #1900544	; 0x1d0000
-     562:	6053      	str	r3, [r2, #4]
-#endif /* STM32F10X_CL */
-
-    /* Enable PLL */
-    RCC->CR |= RCC_CR_PLLON;
-     564:	4b12      	ldr	r3, [pc, #72]	; (5b0 <SetSysClockTo72+0xf8>)
-     566:	681b      	ldr	r3, [r3, #0]
-     568:	4a11      	ldr	r2, [pc, #68]	; (5b0 <SetSysClockTo72+0xf8>)
-     56a:	f043 7380 	orr.w	r3, r3, #16777216	; 0x1000000
-     56e:	6013      	str	r3, [r2, #0]
-
-    /* Wait till PLL is ready */
-    while((RCC->CR & RCC_CR_PLLRDY) == 0)
-     570:	bf00      	nop
-     572:	4b0f      	ldr	r3, [pc, #60]	; (5b0 <SetSysClockTo72+0xf8>)
-     574:	681b      	ldr	r3, [r3, #0]
-     576:	f003 7300 	and.w	r3, r3, #33554432	; 0x2000000
-     57a:	2b00      	cmp	r3, #0
-     57c:	d0f9      	beq.n	572 <SetSysClockTo72+0xba>
-    {
-    }
-    
-    /* Select PLL as system clock source */
-    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
-     57e:	4b0c      	ldr	r3, [pc, #48]	; (5b0 <SetSysClockTo72+0xf8>)
-     580:	685b      	ldr	r3, [r3, #4]
-     582:	4a0b      	ldr	r2, [pc, #44]	; (5b0 <SetSysClockTo72+0xf8>)
-     584:	f023 0303 	bic.w	r3, r3, #3
-     588:	6053      	str	r3, [r2, #4]
-    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    
-     58a:	4b09      	ldr	r3, [pc, #36]	; (5b0 <SetSysClockTo72+0xf8>)
-     58c:	685b      	ldr	r3, [r3, #4]
-     58e:	4a08      	ldr	r2, [pc, #32]	; (5b0 <SetSysClockTo72+0xf8>)
-     590:	f043 0302 	orr.w	r3, r3, #2
-     594:	6053      	str	r3, [r2, #4]
-
-    /* Wait till PLL is used as system clock source */
-    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
-     596:	bf00      	nop
-     598:	4b05      	ldr	r3, [pc, #20]	; (5b0 <SetSysClockTo72+0xf8>)
-     59a:	685b      	ldr	r3, [r3, #4]
-     59c:	f003 030c 	and.w	r3, r3, #12
-     5a0:	2b08      	cmp	r3, #8
-     5a2:	d1f9      	bne.n	598 <SetSysClockTo72+0xe0>
-  }
-  else
-  { /* If HSE fails to start-up, the application will have wrong clock 
-         configuration. User can add here some code to deal with this error */
-  }
-}
-     5a4:	bf00      	nop
-     5a6:	370c      	adds	r7, #12
-     5a8:	46bd      	mov	sp, r7
-     5aa:	bc80      	pop	{r7}
-     5ac:	4770      	bx	lr
-     5ae:	bf00      	nop
-     5b0:	40021000 	.word	0x40021000
-     5b4:	40022000 	.word	0x40022000
-     5b8:	00005bad 	.word	0x00005bad
-     5bc:	20000000 	.word	0x20000000
-     5c0:	20000028 	.word	0x20000028
-     5c4:	20000028 	.word	0x20000028
-     5c8:	20000028 	.word	0x20000028
-
-000005cc <init_led>:
-#include "stm32f10x_exti.h"
-#include "stm32f10x_adc.h"
-#include "misc.h"
-
-void init_led(void)
-{
-     5cc:	b580      	push	{r7, lr}
-     5ce:	b082      	sub	sp, #8
-     5d0:	af00      	add	r7, sp, #0
-    GPIO_InitTypeDef GPIO_InitStructure;
-
-    /* Enable GPIO C clock. */
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
-     5d2:	2101      	movs	r1, #1
-     5d4:	2010      	movs	r0, #16
-     5d6:	f001 f897 	bl	1708 <RCC_APB2PeriphClockCmd>
-
-    /* Set the LED pin state such that the LED is off.  The LED is connected
-     * between power and the microcontroller pin, which makes it turn on when
-     * the pin is low.
-     */
-    GPIO_WriteBit(GPIOC,GPIO_Pin_12,Bit_SET);
-     5da:	2201      	movs	r2, #1
-     5dc:	f44f 5180 	mov.w	r1, #4096	; 0x1000
-     5e0:	4809      	ldr	r0, [pc, #36]	; (608 <init_led+0x3c>)
-     5e2:	f001 fb5e 	bl	1ca2 <GPIO_WriteBit>
-
-    /* Configure the LED pin as push-pull output. */
-    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;
-     5e6:	f44f 5380 	mov.w	r3, #4096	; 0x1000
-     5ea:	80bb      	strh	r3, [r7, #4]
-    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
-     5ec:	2310      	movs	r3, #16
-     5ee:	71fb      	strb	r3, [r7, #7]
-    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-     5f0:	2303      	movs	r3, #3
-     5f2:	71bb      	strb	r3, [r7, #6]
-    GPIO_Init(GPIOC, &GPIO_InitStructure);
-     5f4:	1d3b      	adds	r3, r7, #4
-     5f6:	4619      	mov	r1, r3
-     5f8:	4803      	ldr	r0, [pc, #12]	; (608 <init_led+0x3c>)
-     5fa:	f001 fa1d 	bl	1a38 <GPIO_Init>
-}
-     5fe:	bf00      	nop
-     600:	3708      	adds	r7, #8
-     602:	46bd      	mov	sp, r7
-     604:	bd80      	pop	{r7, pc}
-     606:	bf00      	nop
-     608:	40011000 	.word	0x40011000
-
-0000060c <init_button>:
-
-void init_button(void)
-{
-     60c:	b580      	push	{r7, lr}
-     60e:	b082      	sub	sp, #8
-     610:	af00      	add	r7, sp, #0
-    GPIO_InitTypeDef GPIO_InitStructure;
-
-    /* Enable GPIO A clock */
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-     612:	2101      	movs	r1, #1
-     614:	2004      	movs	r0, #4
-     616:	f001 f877 	bl	1708 <RCC_APB2PeriphClockCmd>
-
-    /* Configure the button pin as a floating input. */
-    GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
-     61a:	2301      	movs	r3, #1
-     61c:	80bb      	strh	r3, [r7, #4]
-    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
-     61e:	2304      	movs	r3, #4
-     620:	71fb      	strb	r3, [r7, #7]
-    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-     622:	2303      	movs	r3, #3
-     624:	71bb      	strb	r3, [r7, #6]
-    GPIO_Init(GPIOC, &GPIO_InitStructure);
-     626:	1d3b      	adds	r3, r7, #4
-     628:	4619      	mov	r1, r3
-     62a:	4803      	ldr	r0, [pc, #12]	; (638 <init_button+0x2c>)
-     62c:	f001 fa04 	bl	1a38 <GPIO_Init>
-}
-     630:	bf00      	nop
-     632:	3708      	adds	r7, #8
-     634:	46bd      	mov	sp, r7
-     636:	bd80      	pop	{r7, pc}
-     638:	40011000 	.word	0x40011000
-
-0000063c <enable_button_interrupts>:
-
-void enable_button_interrupts(void)
-{
-     63c:	b580      	push	{r7, lr}
-     63e:	b084      	sub	sp, #16
-     640:	af00      	add	r7, sp, #0
-    NVIC_InitTypeDef NVIC_InitStructure;
-
-    /* Enable the AFIO clock.  GPIO_EXTILineConfig sets registers in
-     * the AFIO.
-     */
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
-     642:	2101      	movs	r1, #1
-     644:	2001      	movs	r0, #1
-     646:	f001 f85f 	bl	1708 <RCC_APB2PeriphClockCmd>
-
-    /* Connect EXTI Line 0 to the button GPIO Pin */
-    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
-     64a:	2100      	movs	r1, #0
-     64c:	2000      	movs	r0, #0
-     64e:	f001 fc13 	bl	1e78 <GPIO_EXTILineConfig>
-
-    /* Configure the EXTI line to generate an interrupt when the button is
-     * pressed.  The button pin is high when pressed, so it needs to trigger
-     * when rising from low to high. */
-    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
-     652:	2301      	movs	r3, #1
-     654:	60bb      	str	r3, [r7, #8]
-    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
-     656:	2300      	movs	r3, #0
-     658:	733b      	strb	r3, [r7, #12]
-    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
-     65a:	2308      	movs	r3, #8
-     65c:	737b      	strb	r3, [r7, #13]
-    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
-     65e:	2301      	movs	r3, #1
-     660:	73bb      	strb	r3, [r7, #14]
-    EXTI_Init(&EXTI_InitStructure);
-     662:	f107 0308 	add.w	r3, r7, #8
-     666:	4618      	mov	r0, r3
-     668:	f002 f8dc 	bl	2824 <EXTI_Init>
-
-    /* Enable and set Button EXTI Interrupt to the lowest priority */
-    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
-     66c:	2306      	movs	r3, #6
-     66e:	713b      	strb	r3, [r7, #4]
-    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
-     670:	230f      	movs	r3, #15
-     672:	717b      	strb	r3, [r7, #5]
-    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
-     674:	230f      	movs	r3, #15
-     676:	71bb      	strb	r3, [r7, #6]
-    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-     678:	2301      	movs	r3, #1
-     67a:	71fb      	strb	r3, [r7, #7]
-    NVIC_Init(&NVIC_InitStructure);
-     67c:	1d3b      	adds	r3, r7, #4
-     67e:	4618      	mov	r0, r3
-     680:	f005 f87c 	bl	577c <NVIC_Init>
-}
-     684:	bf00      	nop
-     686:	3710      	adds	r7, #16
-     688:	46bd      	mov	sp, r7
-     68a:	bd80      	pop	{r7, pc}
-
-0000068c <init_rs232>:
-
-void init_rs232(void)
-{
-     68c:	b580      	push	{r7, lr}
-     68e:	b086      	sub	sp, #24
-     690:	af00      	add	r7, sp, #0
-    USART_InitTypeDef USART_InitStructure;
-    GPIO_InitTypeDef GPIO_InitStructure;
-
-    /* Enable peripheral clocks. */
-    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
-     692:	2101      	movs	r1, #1
-     694:	2005      	movs	r0, #5
-     696:	f001 f837 	bl	1708 <RCC_APB2PeriphClockCmd>
-    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
-     69a:	2101      	movs	r1, #1
-     69c:	f44f 3000 	mov.w	r0, #131072	; 0x20000
-     6a0:	f001 f850 	bl	1744 <RCC_APB1PeriphClockCmd>
-
-    /* Configure USART2 Rx pin as floating input. */
-    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
-     6a4:	2308      	movs	r3, #8
-     6a6:	80bb      	strh	r3, [r7, #4]
-    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
-     6a8:	2304      	movs	r3, #4
-     6aa:	71fb      	strb	r3, [r7, #7]
-    GPIO_Init(GPIOA, &GPIO_InitStructure);
-     6ac:	1d3b      	adds	r3, r7, #4
-     6ae:	4619      	mov	r1, r3
-     6b0:	4814      	ldr	r0, [pc, #80]	; (704 <init_rs232+0x78>)
-     6b2:	f001 f9c1 	bl	1a38 <GPIO_Init>
-
-    /* Configure USART2 Tx as alternate function push-pull. */
-    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
-     6b6:	2304      	movs	r3, #4
-     6b8:	80bb      	strh	r3, [r7, #4]
-    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-     6ba:	2303      	movs	r3, #3
-     6bc:	71bb      	strb	r3, [r7, #6]
-    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
-     6be:	2318      	movs	r3, #24
-     6c0:	71fb      	strb	r3, [r7, #7]
-    GPIO_Init(GPIOA, &GPIO_InitStructure);
-     6c2:	1d3b      	adds	r3, r7, #4
-     6c4:	4619      	mov	r1, r3
-     6c6:	480f      	ldr	r0, [pc, #60]	; (704 <init_rs232+0x78>)
-     6c8:	f001 f9b6 	bl	1a38 <GPIO_Init>
-
-    /* Configure the USART2 */
-    USART_InitStructure.USART_BaudRate = 9600;
-     6cc:	f44f 5316 	mov.w	r3, #9600	; 0x2580
-     6d0:	60bb      	str	r3, [r7, #8]
-    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
-     6d2:	2300      	movs	r3, #0
-     6d4:	81bb      	strh	r3, [r7, #12]
-    USART_InitStructure.USART_StopBits = USART_StopBits_1;
-     6d6:	2300      	movs	r3, #0
-     6d8:	81fb      	strh	r3, [r7, #14]
-    USART_InitStructure.USART_Parity = USART_Parity_No;
-     6da:	2300      	movs	r3, #0
-     6dc:	823b      	strh	r3, [r7, #16]
-    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
-     6de:	2300      	movs	r3, #0
-     6e0:	82bb      	strh	r3, [r7, #20]
-    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-     6e2:	230c      	movs	r3, #12
-     6e4:	827b      	strh	r3, [r7, #18]
-    USART_Init(USART2, &USART_InitStructure);
-     6e6:	f107 0308 	add.w	r3, r7, #8
-     6ea:	4619      	mov	r1, r3
-     6ec:	4806      	ldr	r0, [pc, #24]	; (708 <init_rs232+0x7c>)
-     6ee:	f001 fc6d 	bl	1fcc <USART_Init>
-    USART_Cmd(USART2, ENABLE);
-     6f2:	2101      	movs	r1, #1
-     6f4:	4804      	ldr	r0, [pc, #16]	; (708 <init_rs232+0x7c>)
-     6f6:	f001 fd7f 	bl	21f8 <USART_Cmd>
-}
-     6fa:	bf00      	nop
-     6fc:	3718      	adds	r7, #24
-     6fe:	46bd      	mov	sp, r7
-     700:	bd80      	pop	{r7, pc}
-     702:	bf00      	nop
-     704:	40010800 	.word	0x40010800
-     708:	40004400 	.word	0x40004400
-
-0000070c <enable_rs232_interrupts>:
-
-void enable_rs232_interrupts(void)
-{
-     70c:	b580      	push	{r7, lr}
-     70e:	b082      	sub	sp, #8
-     710:	af00      	add	r7, sp, #0
-    NVIC_InitTypeDef NVIC_InitStructure;
-
-    /* Enable transmit and receive interrupts for the USART2. */
-    USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
-     712:	2200      	movs	r2, #0
-     714:	f240 7127 	movw	r1, #1831	; 0x727
-     718:	480b      	ldr	r0, [pc, #44]	; (748 <enable_rs232_interrupts+0x3c>)
-     71a:	f001 fd8c 	bl	2236 <USART_ITConfig>
-    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
-     71e:	2201      	movs	r2, #1
-     720:	f240 5125 	movw	r1, #1317	; 0x525
-     724:	4808      	ldr	r0, [pc, #32]	; (748 <enable_rs232_interrupts+0x3c>)
-     726:	f001 fd86 	bl	2236 <USART_ITConfig>
-
-    /* Enable the USART2 IRQ in the NVIC module (so that the USART2 interrupt
-     * handler is enabled). */
-    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
-     72a:	2326      	movs	r3, #38	; 0x26
-     72c:	713b      	strb	r3, [r7, #4]
-    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
-     72e:	2300      	movs	r3, #0
-     730:	71bb      	strb	r3, [r7, #6]
-    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
-     732:	2301      	movs	r3, #1
-     734:	71fb      	strb	r3, [r7, #7]
-    NVIC_Init(&NVIC_InitStructure);
-     736:	1d3b      	adds	r3, r7, #4
-     738:	4618      	mov	r0, r3
-     73a:	f005 f81f 	bl	577c <NVIC_Init>
-}
-     73e:	bf00      	nop
-     740:	3708      	adds	r7, #8
-     742:	46bd      	mov	sp, r7
-     744:	bd80      	pop	{r7, pc}
-     746:	bf00      	nop
-     748:	40004400 	.word	0x40004400
-
-0000074c <enable_rs232>:
-
-void enable_rs232(void)
-{
-     74c:	b580      	push	{r7, lr}
-     74e:	af00      	add	r7, sp, #0
-    /* Enable the RS232 port. */
-    USART_Cmd(USART2, ENABLE);
-     750:	2101      	movs	r1, #1
-     752:	4802      	ldr	r0, [pc, #8]	; (75c <enable_rs232+0x10>)
-     754:	f001 fd50 	bl	21f8 <USART_Cmd>
-}
-     758:	bf00      	nop
-     75a:	bd80      	pop	{r7, pc}
-     75c:	40004400 	.word	0x40004400
-
-00000760 <rs232_print_str>:
-
-void rs232_print_str(const char *str)
-{
-     760:	b580      	push	{r7, lr}
-     762:	b084      	sub	sp, #16
-     764:	af00      	add	r7, sp, #0
-     766:	6078      	str	r0, [r7, #4]
-    const char *curr_char = str;
-     768:	687b      	ldr	r3, [r7, #4]
-     76a:	60fb      	str	r3, [r7, #12]
-
-    while(*curr_char != '\0') {
-     76c:	e011      	b.n	792 <rs232_print_str+0x32>
-        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
-     76e:	bf00      	nop
-     770:	2180      	movs	r1, #128	; 0x80
-     772:	480c      	ldr	r0, [pc, #48]	; (7a4 <rs232_print_str+0x44>)
-     774:	f001 ff9a 	bl	26ac <USART_GetFlagStatus>
-     778:	4603      	mov	r3, r0
-     77a:	2b00      	cmp	r3, #0
-     77c:	d0f8      	beq.n	770 <rs232_print_str+0x10>
-        USART_SendData(USART2, *curr_char);
-     77e:	68fb      	ldr	r3, [r7, #12]
-     780:	781b      	ldrb	r3, [r3, #0]
-     782:	b29b      	uxth	r3, r3
-     784:	4619      	mov	r1, r3
-     786:	4807      	ldr	r0, [pc, #28]	; (7a4 <rs232_print_str+0x44>)
-     788:	f001 fe4f 	bl	242a <USART_SendData>
-        curr_char++;
-     78c:	68fb      	ldr	r3, [r7, #12]
-     78e:	3301      	adds	r3, #1
-     790:	60fb      	str	r3, [r7, #12]
-    while(*curr_char != '\0') {
-     792:	68fb      	ldr	r3, [r7, #12]
-     794:	781b      	ldrb	r3, [r3, #0]
-     796:	2b00      	cmp	r3, #0
-     798:	d1e9      	bne.n	76e <rs232_print_str+0xe>
-    }
-}
-     79a:	bf00      	nop
-     79c:	bf00      	nop
-     79e:	3710      	adds	r7, #16
-     7a0:	46bd      	mov	sp, r7
-     7a2:	bd80      	pop	{r7, pc}
-     7a4:	40004400 	.word	0x40004400
-
-000007a8 <hex_to_char>:
-
-/* Functions for sending numbers through the UART */
-char hex_to_char(unsigned hex_number)
-{
-     7a8:	b480      	push	{r7}
-     7aa:	b083      	sub	sp, #12
-     7ac:	af00      	add	r7, sp, #0
-     7ae:	6078      	str	r0, [r7, #4]
-    if(hex_number < 0xA) {
-     7b0:	687b      	ldr	r3, [r7, #4]
-     7b2:	2b09      	cmp	r3, #9
-     7b4:	d804      	bhi.n	7c0 <hex_to_char+0x18>
-        return hex_number + '0';
-     7b6:	687b      	ldr	r3, [r7, #4]
-     7b8:	b2db      	uxtb	r3, r3
-     7ba:	3330      	adds	r3, #48	; 0x30
-     7bc:	b2db      	uxtb	r3, r3
-     7be:	e003      	b.n	7c8 <hex_to_char+0x20>
-    } else {
-        return hex_number - 0xA + 'A';
-     7c0:	687b      	ldr	r3, [r7, #4]
-     7c2:	b2db      	uxtb	r3, r3
-     7c4:	3337      	adds	r3, #55	; 0x37
-     7c6:	b2db      	uxtb	r3, r3
-    }
-}
-     7c8:	4618      	mov	r0, r3
-     7ca:	370c      	adds	r7, #12
-     7cc:	46bd      	mov	sp, r7
-     7ce:	bc80      	pop	{r7}
-     7d0:	4770      	bx	lr
-
-000007d2 <send_byte>:
-
-void send_byte(uint8_t b)
-{
-     7d2:	b580      	push	{r7, lr}
-     7d4:	b082      	sub	sp, #8
-     7d6:	af00      	add	r7, sp, #0
-     7d8:	4603      	mov	r3, r0
-     7da:	71fb      	strb	r3, [r7, #7]
-    /* Wait until the RS232 port can receive another byte. */
-    while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
-     7dc:	bf00      	nop
-     7de:	2180      	movs	r1, #128	; 0x80
-     7e0:	480a      	ldr	r0, [pc, #40]	; (80c <send_byte+0x3a>)
-     7e2:	f001 ff63 	bl	26ac <USART_GetFlagStatus>
-     7e6:	4603      	mov	r3, r0
-     7e8:	2b00      	cmp	r3, #0
-     7ea:	d0f8      	beq.n	7de <send_byte+0xc>
-
-    /* Toggle the LED just to show that progress is being made. */
-    GPIOC->ODR ^= 0x00001000;
-     7ec:	4b08      	ldr	r3, [pc, #32]	; (810 <send_byte+0x3e>)
-     7ee:	68db      	ldr	r3, [r3, #12]
-     7f0:	4a07      	ldr	r2, [pc, #28]	; (810 <send_byte+0x3e>)
-     7f2:	f483 5380 	eor.w	r3, r3, #4096	; 0x1000
-     7f6:	60d3      	str	r3, [r2, #12]
-
-    /* Send the byte */
-    USART_SendData(USART2, b);
-     7f8:	79fb      	ldrb	r3, [r7, #7]
-     7fa:	b29b      	uxth	r3, r3
-     7fc:	4619      	mov	r1, r3
-     7fe:	4803      	ldr	r0, [pc, #12]	; (80c <send_byte+0x3a>)
-     800:	f001 fe13 	bl	242a <USART_SendData>
-}
-     804:	bf00      	nop
-     806:	3708      	adds	r7, #8
-     808:	46bd      	mov	sp, r7
-     80a:	bd80      	pop	{r7, pc}
-     80c:	40004400 	.word	0x40004400
-     810:	40011000 	.word	0x40011000
-
-00000814 <send_number>:
-
-void send_number(unsigned long sample, int radix)
-{
-     814:	b580      	push	{r7, lr}
-     816:	b09e      	sub	sp, #120	; 0x78
-     818:	af00      	add	r7, sp, #0
-     81a:	6078      	str	r0, [r7, #4]
-     81c:	6039      	str	r1, [r7, #0]
-    int digit;
-    unsigned long  mod;
-    char str[100];
-
-    digit = 0;
-     81e:	2300      	movs	r3, #0
-     820:	677b      	str	r3, [r7, #116]	; 0x74
-    do {
-        mod = sample % radix;
-     822:	683a      	ldr	r2, [r7, #0]
-     824:	687b      	ldr	r3, [r7, #4]
-     826:	fbb3 f1f2 	udiv	r1, r3, r2
-     82a:	fb02 f201 	mul.w	r2, r2, r1
-     82e:	1a9b      	subs	r3, r3, r2
-     830:	673b      	str	r3, [r7, #112]	; 0x70
-        str[digit] = hex_to_char(mod);
-     832:	6f38      	ldr	r0, [r7, #112]	; 0x70
-     834:	f7ff ffb8 	bl	7a8 <hex_to_char>
-     838:	4603      	mov	r3, r0
-     83a:	4619      	mov	r1, r3
-     83c:	f107 020c 	add.w	r2, r7, #12
-     840:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     842:	4413      	add	r3, r2
-     844:	460a      	mov	r2, r1
-     846:	701a      	strb	r2, [r3, #0]
-        sample /= radix;
-     848:	683b      	ldr	r3, [r7, #0]
-     84a:	687a      	ldr	r2, [r7, #4]
-     84c:	fbb2 f3f3 	udiv	r3, r2, r3
-     850:	607b      	str	r3, [r7, #4]
-        digit++;
-     852:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     854:	3301      	adds	r3, #1
-     856:	677b      	str	r3, [r7, #116]	; 0x74
-    } while(sample != 0);
-     858:	687b      	ldr	r3, [r7, #4]
-     85a:	2b00      	cmp	r3, #0
-     85c:	d1e1      	bne.n	822 <send_number+0xe>
-
-    while(digit != 0) {
-     85e:	e014      	b.n	88a <send_number+0x76>
-        digit--;
-     860:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     862:	3b01      	subs	r3, #1
-     864:	677b      	str	r3, [r7, #116]	; 0x74
-        while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
-     866:	bf00      	nop
-     868:	2180      	movs	r1, #128	; 0x80
-     86a:	480c      	ldr	r0, [pc, #48]	; (89c <send_number+0x88>)
-     86c:	f001 ff1e 	bl	26ac <USART_GetFlagStatus>
-     870:	4603      	mov	r3, r0
-     872:	2b00      	cmp	r3, #0
-     874:	d0f8      	beq.n	868 <send_number+0x54>
-        USART_SendData(USART2, str[digit]);
-     876:	f107 020c 	add.w	r2, r7, #12
-     87a:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     87c:	4413      	add	r3, r2
-     87e:	781b      	ldrb	r3, [r3, #0]
-     880:	b29b      	uxth	r3, r3
-     882:	4619      	mov	r1, r3
-     884:	4805      	ldr	r0, [pc, #20]	; (89c <send_number+0x88>)
-     886:	f001 fdd0 	bl	242a <USART_SendData>
-    while(digit != 0) {
-     88a:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     88c:	2b00      	cmp	r3, #0
-     88e:	d1e7      	bne.n	860 <send_number+0x4c>
-    }
-}
-     890:	bf00      	nop
-     892:	bf00      	nop
-     894:	3778      	adds	r7, #120	; 0x78
-     896:	46bd      	mov	sp, r7
-     898:	bd80      	pop	{r7, pc}
-     89a:	bf00      	nop
-     89c:	40004400 	.word	0x40004400
-
-000008a0 <myprintf_init>:
-#define LARGE  	64		/* use 'ABCDEF' instead of 'abcdef' */
-#define SMALL  	64		/* use 'abcdef' instead of 'ABCDEF' */
-#define PBSIZE 128 /* Print Buffer Size  */
-
-void myprintf_init()
-{
-     8a0:	b580      	push	{r7, lr}
-     8a2:	af00      	add	r7, sp, #0
-    init_rs232();
-     8a4:	f7ff fef2 	bl	68c <init_rs232>
-    enable_rs232_interrupts();
-     8a8:	f7ff ff30 	bl	70c <enable_rs232_interrupts>
-    enable_rs232();
-     8ac:	f7ff ff4e 	bl	74c <enable_rs232>
-}
-     8b0:	bf00      	nop
-     8b2:	bd80      	pop	{r7, pc}
-
-000008b4 <usart_send_bytes>:
-
-void usart_send_bytes(uint8_t data)
-{
-     8b4:	b580      	push	{r7, lr}
-     8b6:	b082      	sub	sp, #8
-     8b8:	af00      	add	r7, sp, #0
-     8ba:	4603      	mov	r3, r0
-     8bc:	71fb      	strb	r3, [r7, #7]
-    while(!USART_GetFlagStatus(USART2 ,USART_FLAG_TXE)) {
-     8be:	bf00      	nop
-     8c0:	2180      	movs	r1, #128	; 0x80
-     8c2:	4808      	ldr	r0, [pc, #32]	; (8e4 <usart_send_bytes+0x30>)
-     8c4:	f001 fef2 	bl	26ac <USART_GetFlagStatus>
-     8c8:	4603      	mov	r3, r0
-     8ca:	2b00      	cmp	r3, #0
-     8cc:	d0f8      	beq.n	8c0 <usart_send_bytes+0xc>
-    }
-    USART_SendData( USART2, data);
-     8ce:	79fb      	ldrb	r3, [r7, #7]
-     8d0:	b29b      	uxth	r3, r3
-     8d2:	4619      	mov	r1, r3
-     8d4:	4803      	ldr	r0, [pc, #12]	; (8e4 <usart_send_bytes+0x30>)
-     8d6:	f001 fda8 	bl	242a <USART_SendData>
-}
-     8da:	bf00      	nop
-     8dc:	3708      	adds	r7, #8
-     8de:	46bd      	mov	sp, r7
-     8e0:	bd80      	pop	{r7, pc}
-     8e2:	bf00      	nop
-     8e4:	40004400 	.word	0x40004400
-
-000008e8 <mystrnlen>:
-
-
-signed int mystrnlen (const char * s, signed int count)
-{
-     8e8:	b480      	push	{r7}
-     8ea:	b085      	sub	sp, #20
-     8ec:	af00      	add	r7, sp, #0
-     8ee:	6078      	str	r0, [r7, #4]
-     8f0:	6039      	str	r1, [r7, #0]
-    const char *sc;
-
-    for (sc = s; count-- && *sc != '\0'; ++sc) {
-     8f2:	687b      	ldr	r3, [r7, #4]
-     8f4:	60fb      	str	r3, [r7, #12]
-     8f6:	e002      	b.n	8fe <mystrnlen+0x16>
-     8f8:	68fb      	ldr	r3, [r7, #12]
-     8fa:	3301      	adds	r3, #1
-     8fc:	60fb      	str	r3, [r7, #12]
-     8fe:	683b      	ldr	r3, [r7, #0]
-     900:	1e5a      	subs	r2, r3, #1
-     902:	603a      	str	r2, [r7, #0]
-     904:	2b00      	cmp	r3, #0
-     906:	d003      	beq.n	910 <mystrnlen+0x28>
-     908:	68fb      	ldr	r3, [r7, #12]
-     90a:	781b      	ldrb	r3, [r3, #0]
-     90c:	2b00      	cmp	r3, #0
-     90e:	d1f3      	bne.n	8f8 <mystrnlen+0x10>
-        /* nothing */
-    }
-    return sc - s;
-     910:	68fa      	ldr	r2, [r7, #12]
-     912:	687b      	ldr	r3, [r7, #4]
-     914:	1ad3      	subs	r3, r2, r3
-}
-     916:	4618      	mov	r0, r3
-     918:	3714      	adds	r7, #20
-     91a:	46bd      	mov	sp, r7
-     91c:	bc80      	pop	{r7}
-     91e:	4770      	bx	lr
-
-00000920 <myskip_atoi>:
-
-static int myskip_atoi (const char **s)
-{
-     920:	b480      	push	{r7}
-     922:	b085      	sub	sp, #20
-     924:	af00      	add	r7, sp, #0
-     926:	6078      	str	r0, [r7, #4]
-    int i = 0;
-     928:	2300      	movs	r3, #0
-     92a:	60fb      	str	r3, [r7, #12]
-
-    while (isdigit(**s) != 0) {
-     92c:	e00e      	b.n	94c <myskip_atoi+0x2c>
-        i = i * 10 + *((*s)++) - '0';
-     92e:	68fa      	ldr	r2, [r7, #12]
-     930:	4613      	mov	r3, r2
-     932:	009b      	lsls	r3, r3, #2
-     934:	4413      	add	r3, r2
-     936:	005b      	lsls	r3, r3, #1
-     938:	4618      	mov	r0, r3
-     93a:	687b      	ldr	r3, [r7, #4]
-     93c:	681b      	ldr	r3, [r3, #0]
-     93e:	1c59      	adds	r1, r3, #1
-     940:	687a      	ldr	r2, [r7, #4]
-     942:	6011      	str	r1, [r2, #0]
-     944:	781b      	ldrb	r3, [r3, #0]
-     946:	4403      	add	r3, r0
-     948:	3b30      	subs	r3, #48	; 0x30
-     94a:	60fb      	str	r3, [r7, #12]
-    while (isdigit(**s) != 0) {
-     94c:	687b      	ldr	r3, [r7, #4]
-     94e:	681b      	ldr	r3, [r3, #0]
-     950:	781b      	ldrb	r3, [r3, #0]
-     952:	3301      	adds	r3, #1
-     954:	4a06      	ldr	r2, [pc, #24]	; (970 <myskip_atoi+0x50>)
-     956:	4413      	add	r3, r2
-     958:	781b      	ldrb	r3, [r3, #0]
-     95a:	f003 0304 	and.w	r3, r3, #4
-     95e:	2b00      	cmp	r3, #0
-     960:	d1e5      	bne.n	92e <myskip_atoi+0xe>
-    }
-    return i;
-     962:	68fb      	ldr	r3, [r7, #12]
-}
-     964:	4618      	mov	r0, r3
-     966:	3714      	adds	r7, #20
-     968:	46bd      	mov	sp, r7
-     96a:	bc80      	pop	{r7}
-     96c:	4770      	bx	lr
-     96e:	bf00      	nop
-     970:	00005aac 	.word	0x00005aac
-
-00000974 <mynumber>:
-
-static char * mynumber (char * str, long num, int base, int size, int precision ,int type)
-{
-     974:	b580      	push	{r7, lr}
-     976:	b09a      	sub	sp, #104	; 0x68
-     978:	af00      	add	r7, sp, #0
-     97a:	60f8      	str	r0, [r7, #12]
-     97c:	60b9      	str	r1, [r7, #8]
-     97e:	607a      	str	r2, [r7, #4]
-     980:	603b      	str	r3, [r7, #0]
-    char c = 0;
-     982:	2300      	movs	r3, #0
-     984:	f887 305b 	strb.w	r3, [r7, #91]	; 0x5b
-    char sign = 0;
-     988:	2300      	movs	r3, #0
-     98a:	f887 3067 	strb.w	r3, [r7, #103]	; 0x67
-    char tmp[66] = {0};
-     98e:	2300      	movs	r3, #0
-     990:	613b      	str	r3, [r7, #16]
-     992:	f107 0314 	add.w	r3, r7, #20
-     996:	223e      	movs	r2, #62	; 0x3e
-     998:	2100      	movs	r1, #0
-     99a:	4618      	mov	r0, r3
-     99c:	f004 ffd2 	bl	5944 <memset>
-    int  i = 0;
-     9a0:	2300      	movs	r3, #0
-     9a2:	663b      	str	r3, [r7, #96]	; 0x60
-    const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz";
-     9a4:	4b85      	ldr	r3, [pc, #532]	; (bbc <mynumber+0x248>)
-     9a6:	65fb      	str	r3, [r7, #92]	; 0x5c
-
-    if ((type & LARGE) != 0) {
-     9a8:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     9aa:	f003 0340 	and.w	r3, r3, #64	; 0x40
-     9ae:	2b00      	cmp	r3, #0
-     9b0:	d001      	beq.n	9b6 <mynumber+0x42>
-        digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-     9b2:	4b83      	ldr	r3, [pc, #524]	; (bc0 <mynumber+0x24c>)
-     9b4:	65fb      	str	r3, [r7, #92]	; 0x5c
-    }
-    if ((type & LEFT) != 0) {
-     9b6:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     9b8:	f003 0310 	and.w	r3, r3, #16
-     9bc:	2b00      	cmp	r3, #0
-     9be:	d003      	beq.n	9c8 <mynumber+0x54>
-        type &= ~ZEROPAD;
-     9c0:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     9c2:	f023 0301 	bic.w	r3, r3, #1
-     9c6:	677b      	str	r3, [r7, #116]	; 0x74
-    }
-    if ((base < 2) || (base > 36)) {
-     9c8:	687b      	ldr	r3, [r7, #4]
-     9ca:	2b01      	cmp	r3, #1
-     9cc:	dd02      	ble.n	9d4 <mynumber+0x60>
-     9ce:	687b      	ldr	r3, [r7, #4]
-     9d0:	2b24      	cmp	r3, #36	; 0x24
-     9d2:	dd01      	ble.n	9d8 <mynumber+0x64>
-        return 0;
-     9d4:	2300      	movs	r3, #0
-     9d6:	e0ec      	b.n	bb2 <mynumber+0x23e>
-    }
-
-    c = (type & ZEROPAD) ? '0' : ' ';
-     9d8:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     9da:	f003 0301 	and.w	r3, r3, #1
-     9de:	2b00      	cmp	r3, #0
-     9e0:	d001      	beq.n	9e6 <mynumber+0x72>
-     9e2:	2330      	movs	r3, #48	; 0x30
-     9e4:	e000      	b.n	9e8 <mynumber+0x74>
-     9e6:	2320      	movs	r3, #32
-     9e8:	f887 305b 	strb.w	r3, [r7, #91]	; 0x5b
-    sign = 0;
-     9ec:	2300      	movs	r3, #0
-     9ee:	f887 3067 	strb.w	r3, [r7, #103]	; 0x67
-
-    if ((type & SIGN) != 0) {
-     9f2:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     9f4:	f003 0302 	and.w	r3, r3, #2
-     9f8:	2b00      	cmp	r3, #0
-     9fa:	d023      	beq.n	a44 <mynumber+0xd0>
-        if (num < 0) {
-     9fc:	68bb      	ldr	r3, [r7, #8]
-     9fe:	2b00      	cmp	r3, #0
-     a00:	da09      	bge.n	a16 <mynumber+0xa2>
-            sign = '-';
-     a02:	232d      	movs	r3, #45	; 0x2d
-     a04:	f887 3067 	strb.w	r3, [r7, #103]	; 0x67
-            num = -num;
-     a08:	68bb      	ldr	r3, [r7, #8]
-     a0a:	425b      	negs	r3, r3
-     a0c:	60bb      	str	r3, [r7, #8]
-            size--;
-     a0e:	683b      	ldr	r3, [r7, #0]
-     a10:	3b01      	subs	r3, #1
-     a12:	603b      	str	r3, [r7, #0]
-     a14:	e016      	b.n	a44 <mynumber+0xd0>
-        } else if ((type & PLUS) != 0) {
-     a16:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     a18:	f003 0304 	and.w	r3, r3, #4
-     a1c:	2b00      	cmp	r3, #0
-     a1e:	d006      	beq.n	a2e <mynumber+0xba>
-            sign = '+';
-     a20:	232b      	movs	r3, #43	; 0x2b
-     a22:	f887 3067 	strb.w	r3, [r7, #103]	; 0x67
-            size--;
-     a26:	683b      	ldr	r3, [r7, #0]
-     a28:	3b01      	subs	r3, #1
-     a2a:	603b      	str	r3, [r7, #0]
-     a2c:	e00a      	b.n	a44 <mynumber+0xd0>
-        } else if ((type & SPACE) != 0) {
-     a2e:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     a30:	f003 0308 	and.w	r3, r3, #8
-     a34:	2b00      	cmp	r3, #0
-     a36:	d005      	beq.n	a44 <mynumber+0xd0>
-            sign = ' ';
-     a38:	2320      	movs	r3, #32
-     a3a:	f887 3067 	strb.w	r3, [r7, #103]	; 0x67
-            size--;
-     a3e:	683b      	ldr	r3, [r7, #0]
-     a40:	3b01      	subs	r3, #1
-     a42:	603b      	str	r3, [r7, #0]
-        }
-    }
-    if ((type & SPECIAL) != 0) {
-     a44:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     a46:	f003 0320 	and.w	r3, r3, #32
-     a4a:	2b00      	cmp	r3, #0
-     a4c:	d00c      	beq.n	a68 <mynumber+0xf4>
-        if (16 == base) {
-     a4e:	687b      	ldr	r3, [r7, #4]
-     a50:	2b10      	cmp	r3, #16
-     a52:	d103      	bne.n	a5c <mynumber+0xe8>
-            size -= 2;
-     a54:	683b      	ldr	r3, [r7, #0]
-     a56:	3b02      	subs	r3, #2
-     a58:	603b      	str	r3, [r7, #0]
-     a5a:	e005      	b.n	a68 <mynumber+0xf4>
-        } else if (8 == base) {
-     a5c:	687b      	ldr	r3, [r7, #4]
-     a5e:	2b08      	cmp	r3, #8
-     a60:	d102      	bne.n	a68 <mynumber+0xf4>
-            size--;
-     a62:	683b      	ldr	r3, [r7, #0]
-     a64:	3b01      	subs	r3, #1
-     a66:	603b      	str	r3, [r7, #0]
-        }
-    }
-    i = 0;
-     a68:	2300      	movs	r3, #0
-     a6a:	663b      	str	r3, [r7, #96]	; 0x60
-    if (0 == num) {
-     a6c:	68bb      	ldr	r3, [r7, #8]
-     a6e:	2b00      	cmp	r3, #0
-     a70:	d123      	bne.n	aba <mynumber+0x146>
-        tmp[i++] = '0';
-     a72:	6e3b      	ldr	r3, [r7, #96]	; 0x60
-     a74:	1c5a      	adds	r2, r3, #1
-     a76:	663a      	str	r2, [r7, #96]	; 0x60
-     a78:	f107 0268 	add.w	r2, r7, #104	; 0x68
-     a7c:	4413      	add	r3, r2
-     a7e:	2230      	movs	r2, #48	; 0x30
-     a80:	f803 2c58 	strb.w	r2, [r3, #-88]
-     a84:	e01c      	b.n	ac0 <mynumber+0x14c>
-    } else {
-        while (num != 0) {
-            tmp[i++] = digits[mydo_div(num,base)];
-     a86:	68bb      	ldr	r3, [r7, #8]
-     a88:	687a      	ldr	r2, [r7, #4]
-     a8a:	fbb3 f1f2 	udiv	r1, r3, r2
-     a8e:	fb02 f201 	mul.w	r2, r2, r1
-     a92:	1a9b      	subs	r3, r3, r2
-     a94:	657b      	str	r3, [r7, #84]	; 0x54
-     a96:	68ba      	ldr	r2, [r7, #8]
-     a98:	687b      	ldr	r3, [r7, #4]
-     a9a:	fbb2 f3f3 	udiv	r3, r2, r3
-     a9e:	60bb      	str	r3, [r7, #8]
-     aa0:	6d7b      	ldr	r3, [r7, #84]	; 0x54
-     aa2:	461a      	mov	r2, r3
-     aa4:	6dfb      	ldr	r3, [r7, #92]	; 0x5c
-     aa6:	441a      	add	r2, r3
-     aa8:	6e3b      	ldr	r3, [r7, #96]	; 0x60
-     aaa:	1c59      	adds	r1, r3, #1
-     aac:	6639      	str	r1, [r7, #96]	; 0x60
-     aae:	7812      	ldrb	r2, [r2, #0]
-     ab0:	f107 0168 	add.w	r1, r7, #104	; 0x68
-     ab4:	440b      	add	r3, r1
-     ab6:	f803 2c58 	strb.w	r2, [r3, #-88]
-        while (num != 0) {
-     aba:	68bb      	ldr	r3, [r7, #8]
-     abc:	2b00      	cmp	r3, #0
-     abe:	d1e2      	bne.n	a86 <mynumber+0x112>
-        }
-    }
-    if (i > precision) {
-     ac0:	6e3a      	ldr	r2, [r7, #96]	; 0x60
-     ac2:	6f3b      	ldr	r3, [r7, #112]	; 0x70
-     ac4:	429a      	cmp	r2, r3
-     ac6:	dd01      	ble.n	acc <mynumber+0x158>
-        precision = i;
-     ac8:	6e3b      	ldr	r3, [r7, #96]	; 0x60
-     aca:	673b      	str	r3, [r7, #112]	; 0x70
-    }
-    size -= precision;
-     acc:	683a      	ldr	r2, [r7, #0]
-     ace:	6f3b      	ldr	r3, [r7, #112]	; 0x70
-     ad0:	1ad3      	subs	r3, r2, r3
-     ad2:	603b      	str	r3, [r7, #0]
-    if (0 == (type & (ZEROPAD + LEFT))) {
-     ad4:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     ad6:	f003 0311 	and.w	r3, r3, #17
-     ada:	2b00      	cmp	r3, #0
-     adc:	d10a      	bne.n	af4 <mynumber+0x180>
-        while (size-- > 0) {
-     ade:	e004      	b.n	aea <mynumber+0x176>
-            *str++ = ' ';
-     ae0:	68fb      	ldr	r3, [r7, #12]
-     ae2:	1c5a      	adds	r2, r3, #1
-     ae4:	60fa      	str	r2, [r7, #12]
-     ae6:	2220      	movs	r2, #32
-     ae8:	701a      	strb	r2, [r3, #0]
-        while (size-- > 0) {
-     aea:	683b      	ldr	r3, [r7, #0]
-     aec:	1e5a      	subs	r2, r3, #1
-     aee:	603a      	str	r2, [r7, #0]
-     af0:	2b00      	cmp	r3, #0
-     af2:	dcf5      	bgt.n	ae0 <mynumber+0x16c>
-        }
-    }
-    if (sign != 0) {
-     af4:	f897 3067 	ldrb.w	r3, [r7, #103]	; 0x67
-     af8:	2b00      	cmp	r3, #0
-     afa:	d005      	beq.n	b08 <mynumber+0x194>
-        *str++ = sign;
-     afc:	68fb      	ldr	r3, [r7, #12]
-     afe:	1c5a      	adds	r2, r3, #1
-     b00:	60fa      	str	r2, [r7, #12]
-     b02:	f897 2067 	ldrb.w	r2, [r7, #103]	; 0x67
-     b06:	701a      	strb	r2, [r3, #0]
-    }
-    if ((type & SPECIAL) != 0) {
-     b08:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     b0a:	f003 0320 	and.w	r3, r3, #32
-     b0e:	2b00      	cmp	r3, #0
-     b10:	d017      	beq.n	b42 <mynumber+0x1ce>
-        if (8 == base) {
-     b12:	687b      	ldr	r3, [r7, #4]
-     b14:	2b08      	cmp	r3, #8
-     b16:	d105      	bne.n	b24 <mynumber+0x1b0>
-            *str++ = '0';
-     b18:	68fb      	ldr	r3, [r7, #12]
-     b1a:	1c5a      	adds	r2, r3, #1
-     b1c:	60fa      	str	r2, [r7, #12]
-     b1e:	2230      	movs	r2, #48	; 0x30
-     b20:	701a      	strb	r2, [r3, #0]
-     b22:	e00e      	b.n	b42 <mynumber+0x1ce>
-        } else if (16 == base) {
-     b24:	687b      	ldr	r3, [r7, #4]
-     b26:	2b10      	cmp	r3, #16
-     b28:	d10b      	bne.n	b42 <mynumber+0x1ce>
-            *str++ = '0';
-     b2a:	68fb      	ldr	r3, [r7, #12]
-     b2c:	1c5a      	adds	r2, r3, #1
-     b2e:	60fa      	str	r2, [r7, #12]
-     b30:	2230      	movs	r2, #48	; 0x30
-     b32:	701a      	strb	r2, [r3, #0]
-            *str++ = digits[33];
-     b34:	68fb      	ldr	r3, [r7, #12]
-     b36:	1c5a      	adds	r2, r3, #1
-     b38:	60fa      	str	r2, [r7, #12]
-     b3a:	6dfa      	ldr	r2, [r7, #92]	; 0x5c
-     b3c:	f892 2021 	ldrb.w	r2, [r2, #33]	; 0x21
-     b40:	701a      	strb	r2, [r3, #0]
-        }
-    }
-    if (0 == (type & LEFT)) {
-     b42:	6f7b      	ldr	r3, [r7, #116]	; 0x74
-     b44:	f003 0310 	and.w	r3, r3, #16
-     b48:	2b00      	cmp	r3, #0
-     b4a:	d111      	bne.n	b70 <mynumber+0x1fc>
-        while (size-- > 0) {
-     b4c:	e005      	b.n	b5a <mynumber+0x1e6>
-            *str++ = c;
-     b4e:	68fb      	ldr	r3, [r7, #12]
-     b50:	1c5a      	adds	r2, r3, #1
-     b52:	60fa      	str	r2, [r7, #12]
-     b54:	f897 205b 	ldrb.w	r2, [r7, #91]	; 0x5b
-     b58:	701a      	strb	r2, [r3, #0]
-        while (size-- > 0) {
-     b5a:	683b      	ldr	r3, [r7, #0]
-     b5c:	1e5a      	subs	r2, r3, #1
-     b5e:	603a      	str	r2, [r7, #0]
-     b60:	2b00      	cmp	r3, #0
-     b62:	dcf4      	bgt.n	b4e <mynumber+0x1da>
-        }
-    }
-    while (i < precision--) {
-     b64:	e004      	b.n	b70 <mynumber+0x1fc>
-        *str++ = '0';
-     b66:	68fb      	ldr	r3, [r7, #12]
-     b68:	1c5a      	adds	r2, r3, #1
-     b6a:	60fa      	str	r2, [r7, #12]
-     b6c:	2230      	movs	r2, #48	; 0x30
-     b6e:	701a      	strb	r2, [r3, #0]
-    while (i < precision--) {
-     b70:	6f3b      	ldr	r3, [r7, #112]	; 0x70
-     b72:	1e5a      	subs	r2, r3, #1
-     b74:	673a      	str	r2, [r7, #112]	; 0x70
-     b76:	6e3a      	ldr	r2, [r7, #96]	; 0x60
-     b78:	429a      	cmp	r2, r3
-     b7a:	dbf4      	blt.n	b66 <mynumber+0x1f2>
-    }
-    while (i-- > 0) {
-     b7c:	e008      	b.n	b90 <mynumber+0x21c>
-        *str++ = tmp[i];
-     b7e:	68fb      	ldr	r3, [r7, #12]
-     b80:	1c5a      	adds	r2, r3, #1
-     b82:	60fa      	str	r2, [r7, #12]
-     b84:	f107 0110 	add.w	r1, r7, #16
-     b88:	6e3a      	ldr	r2, [r7, #96]	; 0x60
-     b8a:	440a      	add	r2, r1
-     b8c:	7812      	ldrb	r2, [r2, #0]
-     b8e:	701a      	strb	r2, [r3, #0]
-    while (i-- > 0) {
-     b90:	6e3b      	ldr	r3, [r7, #96]	; 0x60
-     b92:	1e5a      	subs	r2, r3, #1
-     b94:	663a      	str	r2, [r7, #96]	; 0x60
-     b96:	2b00      	cmp	r3, #0
-     b98:	dcf1      	bgt.n	b7e <mynumber+0x20a>
-    }
-    while (size-- > 0) {
-     b9a:	e004      	b.n	ba6 <mynumber+0x232>
-        *str++ = ' ';
-     b9c:	68fb      	ldr	r3, [r7, #12]
-     b9e:	1c5a      	adds	r2, r3, #1
-     ba0:	60fa      	str	r2, [r7, #12]
-     ba2:	2220      	movs	r2, #32
-     ba4:	701a      	strb	r2, [r3, #0]
-    while (size-- > 0) {
-     ba6:	683b      	ldr	r3, [r7, #0]
-     ba8:	1e5a      	subs	r2, r3, #1
-     baa:	603a      	str	r2, [r7, #0]
-     bac:	2b00      	cmp	r3, #0
-     bae:	dcf5      	bgt.n	b9c <mynumber+0x228>
-    }
-
-    return str;
-     bb0:	68fb      	ldr	r3, [r7, #12]
-}
-     bb2:	4618      	mov	r0, r3
-     bb4:	3768      	adds	r7, #104	; 0x68
-     bb6:	46bd      	mov	sp, r7
-     bb8:	bd80      	pop	{r7, pc}
-     bba:	bf00      	nop
-     bbc:	00005a2c 	.word	0x00005a2c
-     bc0:	00005a54 	.word	0x00005a54
-
-00000bc4 <myvsprintf>:
- *
- * If you're not already dealing with a va_list consider using sprintf().
- */
-
-int myvsprintf (char *buf, const char *fmt, va_list args)
-{
-     bc4:	b580      	push	{r7, lr}
-     bc6:	b092      	sub	sp, #72	; 0x48
-     bc8:	af02      	add	r7, sp, #8
-     bca:	60f8      	str	r0, [r7, #12]
-     bcc:	60b9      	str	r1, [r7, #8]
-     bce:	607a      	str	r2, [r7, #4]
-    int qualifier;		//'h', 'l', or 'q' for integer fields
-    char * str;
-    const char *s;
-    unsigned long num;
-
-    for (str = buf; *fmt; ++fmt) {
-     bd0:	68fb      	ldr	r3, [r7, #12]
-     bd2:	627b      	str	r3, [r7, #36]	; 0x24
-     bd4:	e272      	b.n	10bc <myvsprintf+0x4f8>
-        if (*fmt != '%') {
-     bd6:	68bb      	ldr	r3, [r7, #8]
-     bd8:	781b      	ldrb	r3, [r3, #0]
-     bda:	2b25      	cmp	r3, #37	; 0x25
-     bdc:	d006      	beq.n	bec <myvsprintf+0x28>
-            *str++ = *fmt;
-     bde:	68ba      	ldr	r2, [r7, #8]
-     be0:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     be2:	1c59      	adds	r1, r3, #1
-     be4:	6279      	str	r1, [r7, #36]	; 0x24
-     be6:	7812      	ldrb	r2, [r2, #0]
-     be8:	701a      	strb	r2, [r3, #0]
-            continue;
-     bea:	e264      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-
-        flags = 0;     //process flags
-     bec:	2300      	movs	r3, #0
-     bee:	63bb      	str	r3, [r7, #56]	; 0x38
-
-repeat:
-        ++fmt;		   //this also skips first '%'
-     bf0:	68bb      	ldr	r3, [r7, #8]
-     bf2:	3301      	adds	r3, #1
-     bf4:	60bb      	str	r3, [r7, #8]
-        switch (*fmt) {
-     bf6:	68bb      	ldr	r3, [r7, #8]
-     bf8:	781b      	ldrb	r3, [r3, #0]
-     bfa:	3b20      	subs	r3, #32
-     bfc:	2b10      	cmp	r3, #16
-     bfe:	d83e      	bhi.n	c7e <myvsprintf+0xba>
-     c00:	a201      	add	r2, pc, #4	; (adr r2, c08 <myvsprintf+0x44>)
-     c02:	f852 f023 	ldr.w	pc, [r2, r3, lsl #2]
-     c06:	bf00      	nop
-     c08:	00000c61 	.word	0x00000c61
-     c0c:	00000c7f 	.word	0x00000c7f
-     c10:	00000c7f 	.word	0x00000c7f
-     c14:	00000c6b 	.word	0x00000c6b
-     c18:	00000c7f 	.word	0x00000c7f
-     c1c:	00000c7f 	.word	0x00000c7f
-     c20:	00000c7f 	.word	0x00000c7f
-     c24:	00000c7f 	.word	0x00000c7f
-     c28:	00000c7f 	.word	0x00000c7f
-     c2c:	00000c7f 	.word	0x00000c7f
-     c30:	00000c7f 	.word	0x00000c7f
-     c34:	00000c57 	.word	0x00000c57
-     c38:	00000c7f 	.word	0x00000c7f
-     c3c:	00000c4d 	.word	0x00000c4d
-     c40:	00000c7f 	.word	0x00000c7f
-     c44:	00000c7f 	.word	0x00000c7f
-     c48:	00000c75 	.word	0x00000c75
-        case '-':
-            flags |= LEFT;
-     c4c:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     c4e:	f043 0310 	orr.w	r3, r3, #16
-     c52:	63bb      	str	r3, [r7, #56]	; 0x38
-            goto repeat;
-     c54:	e7cc      	b.n	bf0 <myvsprintf+0x2c>
-        case '+':
-            flags |= PLUS;
-     c56:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     c58:	f043 0304 	orr.w	r3, r3, #4
-     c5c:	63bb      	str	r3, [r7, #56]	; 0x38
-            goto repeat;
-     c5e:	e7c7      	b.n	bf0 <myvsprintf+0x2c>
-        case ' ':
-            flags |= SPACE;
-     c60:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     c62:	f043 0308 	orr.w	r3, r3, #8
-     c66:	63bb      	str	r3, [r7, #56]	; 0x38
-            goto repeat;
-     c68:	e7c2      	b.n	bf0 <myvsprintf+0x2c>
-        case '#':
-            flags |= SPECIAL;
-     c6a:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     c6c:	f043 0320 	orr.w	r3, r3, #32
-     c70:	63bb      	str	r3, [r7, #56]	; 0x38
-            goto repeat;
-     c72:	e7bd      	b.n	bf0 <myvsprintf+0x2c>
-        case '0':
-            flags |= ZEROPAD;
-     c74:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     c76:	f043 0301 	orr.w	r3, r3, #1
-     c7a:	63bb      	str	r3, [r7, #56]	; 0x38
-            goto repeat;
-     c7c:	e7b8      	b.n	bf0 <myvsprintf+0x2c>
-        }
-
-        field_width = -1;  //get field width
-     c7e:	f04f 33ff 	mov.w	r3, #4294967295	; 0xffffffff
-     c82:	633b      	str	r3, [r7, #48]	; 0x30
-        if (isdigit(*fmt) != 0) {
-     c84:	68bb      	ldr	r3, [r7, #8]
-     c86:	781b      	ldrb	r3, [r3, #0]
-     c88:	3301      	adds	r3, #1
-     c8a:	4ab9      	ldr	r2, [pc, #740]	; (f70 <myvsprintf+0x3ac>)
-     c8c:	4413      	add	r3, r2
-     c8e:	781b      	ldrb	r3, [r3, #0]
-     c90:	f003 0304 	and.w	r3, r3, #4
-     c94:	2b00      	cmp	r3, #0
-     c96:	d006      	beq.n	ca6 <myvsprintf+0xe2>
-
-            field_width = myskip_atoi(&fmt);
-     c98:	f107 0308 	add.w	r3, r7, #8
-     c9c:	4618      	mov	r0, r3
-     c9e:	f7ff fe3f 	bl	920 <myskip_atoi>
-     ca2:	6338      	str	r0, [r7, #48]	; 0x30
-     ca4:	e015      	b.n	cd2 <myvsprintf+0x10e>
-        } else if ('*' == *fmt) {
-     ca6:	68bb      	ldr	r3, [r7, #8]
-     ca8:	781b      	ldrb	r3, [r3, #0]
-     caa:	2b2a      	cmp	r3, #42	; 0x2a
-     cac:	d111      	bne.n	cd2 <myvsprintf+0x10e>
-            ++fmt;
-     cae:	68bb      	ldr	r3, [r7, #8]
-     cb0:	3301      	adds	r3, #1
-     cb2:	60bb      	str	r3, [r7, #8]
-            field_width = va_arg(args, int); //it's the next argument
-     cb4:	687b      	ldr	r3, [r7, #4]
-     cb6:	1d1a      	adds	r2, r3, #4
-     cb8:	607a      	str	r2, [r7, #4]
-     cba:	681b      	ldr	r3, [r3, #0]
-     cbc:	633b      	str	r3, [r7, #48]	; 0x30
-            if (field_width < 0) {
-     cbe:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     cc0:	2b00      	cmp	r3, #0
-     cc2:	da06      	bge.n	cd2 <myvsprintf+0x10e>
-                field_width = -field_width;
-     cc4:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     cc6:	425b      	negs	r3, r3
-     cc8:	633b      	str	r3, [r7, #48]	; 0x30
-                flags |= LEFT;
-     cca:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     ccc:	f043 0310 	orr.w	r3, r3, #16
-     cd0:	63bb      	str	r3, [r7, #56]	; 0x38
-            }
-        }
-
-        precision = -1;      //get the precision
-     cd2:	f04f 33ff 	mov.w	r3, #4294967295	; 0xffffffff
-     cd6:	62fb      	str	r3, [r7, #44]	; 0x2c
-        if ('.' == *fmt) {
-     cd8:	68bb      	ldr	r3, [r7, #8]
-     cda:	781b      	ldrb	r3, [r3, #0]
-     cdc:	2b2e      	cmp	r3, #46	; 0x2e
-     cde:	d124      	bne.n	d2a <myvsprintf+0x166>
-            ++fmt;
-     ce0:	68bb      	ldr	r3, [r7, #8]
-     ce2:	3301      	adds	r3, #1
-     ce4:	60bb      	str	r3, [r7, #8]
-            if (isdigit(*fmt)) {
-     ce6:	68bb      	ldr	r3, [r7, #8]
-     ce8:	781b      	ldrb	r3, [r3, #0]
-     cea:	3301      	adds	r3, #1
-     cec:	4aa0      	ldr	r2, [pc, #640]	; (f70 <myvsprintf+0x3ac>)
-     cee:	4413      	add	r3, r2
-     cf0:	781b      	ldrb	r3, [r3, #0]
-     cf2:	f003 0304 	and.w	r3, r3, #4
-     cf6:	2b00      	cmp	r3, #0
-     cf8:	d006      	beq.n	d08 <myvsprintf+0x144>
-                precision = myskip_atoi(&fmt);
-     cfa:	f107 0308 	add.w	r3, r7, #8
-     cfe:	4618      	mov	r0, r3
-     d00:	f7ff fe0e 	bl	920 <myskip_atoi>
-     d04:	62f8      	str	r0, [r7, #44]	; 0x2c
-     d06:	e00b      	b.n	d20 <myvsprintf+0x15c>
-            } else if ('*' == *fmt) {
-     d08:	68bb      	ldr	r3, [r7, #8]
-     d0a:	781b      	ldrb	r3, [r3, #0]
-     d0c:	2b2a      	cmp	r3, #42	; 0x2a
-     d0e:	d107      	bne.n	d20 <myvsprintf+0x15c>
-                ++fmt;
-     d10:	68bb      	ldr	r3, [r7, #8]
-     d12:	3301      	adds	r3, #1
-     d14:	60bb      	str	r3, [r7, #8]
-                precision = va_arg(args, int); //it's the next argument
-     d16:	687b      	ldr	r3, [r7, #4]
-     d18:	1d1a      	adds	r2, r3, #4
-     d1a:	607a      	str	r2, [r7, #4]
-     d1c:	681b      	ldr	r3, [r3, #0]
-     d1e:	62fb      	str	r3, [r7, #44]	; 0x2c
-            }
-            if (precision < 0) {
-     d20:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-     d22:	2b00      	cmp	r3, #0
-     d24:	da01      	bge.n	d2a <myvsprintf+0x166>
-                precision = 0;
-     d26:	2300      	movs	r3, #0
-     d28:	62fb      	str	r3, [r7, #44]	; 0x2c
-            }
-        }
-
-        qualifier = -1;         //get the conversion qualifier
-     d2a:	f04f 33ff 	mov.w	r3, #4294967295	; 0xffffffff
-     d2e:	62bb      	str	r3, [r7, #40]	; 0x28
-        if (('h' == *fmt) || ('l' == *fmt) || ('q' == *fmt)) {
-     d30:	68bb      	ldr	r3, [r7, #8]
-     d32:	781b      	ldrb	r3, [r3, #0]
-     d34:	2b68      	cmp	r3, #104	; 0x68
-     d36:	d007      	beq.n	d48 <myvsprintf+0x184>
-     d38:	68bb      	ldr	r3, [r7, #8]
-     d3a:	781b      	ldrb	r3, [r3, #0]
-     d3c:	2b6c      	cmp	r3, #108	; 0x6c
-     d3e:	d003      	beq.n	d48 <myvsprintf+0x184>
-     d40:	68bb      	ldr	r3, [r7, #8]
-     d42:	781b      	ldrb	r3, [r3, #0]
-     d44:	2b71      	cmp	r3, #113	; 0x71
-     d46:	d105      	bne.n	d54 <myvsprintf+0x190>
-            qualifier = *fmt;
-     d48:	68bb      	ldr	r3, [r7, #8]
-     d4a:	781b      	ldrb	r3, [r3, #0]
-     d4c:	62bb      	str	r3, [r7, #40]	; 0x28
-            ++fmt;
-     d4e:	68bb      	ldr	r3, [r7, #8]
-     d50:	3301      	adds	r3, #1
-     d52:	60bb      	str	r3, [r7, #8]
-        }
-
-        base = 10;          //default base
-     d54:	230a      	movs	r3, #10
-     d56:	637b      	str	r3, [r7, #52]	; 0x34
-        switch (*fmt) {
-     d58:	68bb      	ldr	r3, [r7, #8]
-     d5a:	781b      	ldrb	r3, [r3, #0]
-     d5c:	3b25      	subs	r3, #37	; 0x25
-     d5e:	2b53      	cmp	r3, #83	; 0x53
-     d60:	f200 815e 	bhi.w	1020 <myvsprintf+0x45c>
-     d64:	a201      	add	r2, pc, #4	; (adr r2, d6c <myvsprintf+0x1a8>)
-     d66:	f852 f023 	ldr.w	pc, [r2, r3, lsl #2]
-     d6a:	bf00      	nop
-     d6c:	00000ff7 	.word	0x00000ff7
-     d70:	00001021 	.word	0x00001021
-     d74:	00001021 	.word	0x00001021
-     d78:	00001021 	.word	0x00001021
-     d7c:	00001021 	.word	0x00001021
-     d80:	00001021 	.word	0x00001021
-     d84:	00001021 	.word	0x00001021
-     d88:	00001021 	.word	0x00001021
-     d8c:	00001021 	.word	0x00001021
-     d90:	00001021 	.word	0x00001021
-     d94:	00001021 	.word	0x00001021
-     d98:	00001021 	.word	0x00001021
-     d9c:	00001021 	.word	0x00001021
-     da0:	00001021 	.word	0x00001021
-     da4:	00001021 	.word	0x00001021
-     da8:	00001021 	.word	0x00001021
-     dac:	00001021 	.word	0x00001021
-     db0:	00001021 	.word	0x00001021
-     db4:	00001021 	.word	0x00001021
-     db8:	00001021 	.word	0x00001021
-     dbc:	00001021 	.word	0x00001021
-     dc0:	00001021 	.word	0x00001021
-     dc4:	00001021 	.word	0x00001021
-     dc8:	00001021 	.word	0x00001021
-     dcc:	00001021 	.word	0x00001021
-     dd0:	00001021 	.word	0x00001021
-     dd4:	00001021 	.word	0x00001021
-     dd8:	00001021 	.word	0x00001021
-     ddc:	00001021 	.word	0x00001021
-     de0:	00001021 	.word	0x00001021
-     de4:	00001021 	.word	0x00001021
-     de8:	00001021 	.word	0x00001021
-     dec:	00001021 	.word	0x00001021
-     df0:	00001021 	.word	0x00001021
-     df4:	00001021 	.word	0x00001021
-     df8:	00001021 	.word	0x00001021
-     dfc:	00001021 	.word	0x00001021
-     e00:	00001021 	.word	0x00001021
-     e04:	00001021 	.word	0x00001021
-     e08:	00001021 	.word	0x00001021
-     e0c:	00001021 	.word	0x00001021
-     e10:	00001021 	.word	0x00001021
-     e14:	00001021 	.word	0x00001021
-     e18:	00001021 	.word	0x00001021
-     e1c:	00001021 	.word	0x00001021
-     e20:	00001021 	.word	0x00001021
-     e24:	00001021 	.word	0x00001021
-     e28:	00001021 	.word	0x00001021
-     e2c:	00001021 	.word	0x00001021
-     e30:	00001021 	.word	0x00001021
-     e34:	00001021 	.word	0x00001021
-     e38:	00001009 	.word	0x00001009
-     e3c:	00001021 	.word	0x00001021
-     e40:	00001021 	.word	0x00001021
-     e44:	00001021 	.word	0x00001021
-     e48:	00001021 	.word	0x00001021
-     e4c:	00001021 	.word	0x00001021
-     e50:	00001021 	.word	0x00001021
-     e54:	00001021 	.word	0x00001021
-     e58:	00001021 	.word	0x00001021
-     e5c:	00001021 	.word	0x00001021
-     e60:	00001021 	.word	0x00001021
-     e64:	00000ebd 	.word	0x00000ebd
-     e68:	00001017 	.word	0x00001017
-     e6c:	00001021 	.word	0x00001021
-     e70:	00001021 	.word	0x00001021
-     e74:	00001021 	.word	0x00001021
-     e78:	00001021 	.word	0x00001021
-     e7c:	00001017 	.word	0x00001017
-     e80:	00001021 	.word	0x00001021
-     e84:	00001021 	.word	0x00001021
-     e88:	00001021 	.word	0x00001021
-     e8c:	00001021 	.word	0x00001021
-     e90:	00000fc5 	.word	0x00000fc5
-     e94:	00001003 	.word	0x00001003
-     e98:	00000f91 	.word	0x00000f91
-     e9c:	00001021 	.word	0x00001021
-     ea0:	00001021 	.word	0x00001021
-     ea4:	00000f0b 	.word	0x00000f0b
-     ea8:	00001021 	.word	0x00001021
-     eac:	00001049 	.word	0x00001049
-     eb0:	00001021 	.word	0x00001021
-     eb4:	00001021 	.word	0x00001021
-     eb8:	00001011 	.word	0x00001011
-        case 'c': {
-            if (0 == (flags & LEFT)) {
-     ebc:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     ebe:	f003 0310 	and.w	r3, r3, #16
-     ec2:	2b00      	cmp	r3, #0
-     ec4:	d10b      	bne.n	ede <myvsprintf+0x31a>
-                while (--field_width > 0) {
-     ec6:	e004      	b.n	ed2 <myvsprintf+0x30e>
-                    *str++ = ' ';
-     ec8:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     eca:	1c5a      	adds	r2, r3, #1
-     ecc:	627a      	str	r2, [r7, #36]	; 0x24
-     ece:	2220      	movs	r2, #32
-     ed0:	701a      	strb	r2, [r3, #0]
-                while (--field_width > 0) {
-     ed2:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     ed4:	3b01      	subs	r3, #1
-     ed6:	633b      	str	r3, [r7, #48]	; 0x30
-     ed8:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     eda:	2b00      	cmp	r3, #0
-     edc:	dcf4      	bgt.n	ec8 <myvsprintf+0x304>
-                }
-            }
-            *str++ = (unsigned char) va_arg(args, int);
-     ede:	687b      	ldr	r3, [r7, #4]
-     ee0:	1d1a      	adds	r2, r3, #4
-     ee2:	607a      	str	r2, [r7, #4]
-     ee4:	6819      	ldr	r1, [r3, #0]
-     ee6:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     ee8:	1c5a      	adds	r2, r3, #1
-     eea:	627a      	str	r2, [r7, #36]	; 0x24
-     eec:	b2ca      	uxtb	r2, r1
-     eee:	701a      	strb	r2, [r3, #0]
-            while (--field_width > 0) {
-     ef0:	e004      	b.n	efc <myvsprintf+0x338>
-                *str++ = ' ';
-     ef2:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     ef4:	1c5a      	adds	r2, r3, #1
-     ef6:	627a      	str	r2, [r7, #36]	; 0x24
-     ef8:	2220      	movs	r2, #32
-     efa:	701a      	strb	r2, [r3, #0]
-            while (--field_width > 0) {
-     efc:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     efe:	3b01      	subs	r3, #1
-     f00:	633b      	str	r3, [r7, #48]	; 0x30
-     f02:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     f04:	2b00      	cmp	r3, #0
-     f06:	dcf4      	bgt.n	ef2 <myvsprintf+0x32e>
-            }
-            continue;
-     f08:	e0d5      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-        case 's': {
-            s = va_arg(args, char *);
-     f0a:	687b      	ldr	r3, [r7, #4]
-     f0c:	1d1a      	adds	r2, r3, #4
-     f0e:	607a      	str	r2, [r7, #4]
-     f10:	681b      	ldr	r3, [r3, #0]
-     f12:	623b      	str	r3, [r7, #32]
-            if (!s) {
-     f14:	6a3b      	ldr	r3, [r7, #32]
-     f16:	2b00      	cmp	r3, #0
-     f18:	d101      	bne.n	f1e <myvsprintf+0x35a>
-                s = "<NULL>";
-     f1a:	4b16      	ldr	r3, [pc, #88]	; (f74 <myvsprintf+0x3b0>)
-     f1c:	623b      	str	r3, [r7, #32]
-            }
-            len = mystrnlen(s, precision);
-     f1e:	6af9      	ldr	r1, [r7, #44]	; 0x2c
-     f20:	6a38      	ldr	r0, [r7, #32]
-     f22:	f7ff fce1 	bl	8e8 <mystrnlen>
-     f26:	61b8      	str	r0, [r7, #24]
-            if (0 == (flags & LEFT)) {
-     f28:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     f2a:	f003 0310 	and.w	r3, r3, #16
-     f2e:	2b00      	cmp	r3, #0
-     f30:	d10b      	bne.n	f4a <myvsprintf+0x386>
-                while (len < field_width--) {
-     f32:	e004      	b.n	f3e <myvsprintf+0x37a>
-                    *str++ = ' ';
-     f34:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     f36:	1c5a      	adds	r2, r3, #1
-     f38:	627a      	str	r2, [r7, #36]	; 0x24
-     f3a:	2220      	movs	r2, #32
-     f3c:	701a      	strb	r2, [r3, #0]
-                while (len < field_width--) {
-     f3e:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     f40:	1e5a      	subs	r2, r3, #1
-     f42:	633a      	str	r2, [r7, #48]	; 0x30
-     f44:	69ba      	ldr	r2, [r7, #24]
-     f46:	429a      	cmp	r2, r3
-     f48:	dbf4      	blt.n	f34 <myvsprintf+0x370>
-                }
-            }
-            for (i = 0; i < len; ++i) {
-     f4a:	2300      	movs	r3, #0
-     f4c:	63fb      	str	r3, [r7, #60]	; 0x3c
-     f4e:	e00a      	b.n	f66 <myvsprintf+0x3a2>
-                *str++ = *s++;
-     f50:	6a3a      	ldr	r2, [r7, #32]
-     f52:	1c53      	adds	r3, r2, #1
-     f54:	623b      	str	r3, [r7, #32]
-     f56:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     f58:	1c59      	adds	r1, r3, #1
-     f5a:	6279      	str	r1, [r7, #36]	; 0x24
-     f5c:	7812      	ldrb	r2, [r2, #0]
-     f5e:	701a      	strb	r2, [r3, #0]
-            for (i = 0; i < len; ++i) {
-     f60:	6bfb      	ldr	r3, [r7, #60]	; 0x3c
-     f62:	3301      	adds	r3, #1
-     f64:	63fb      	str	r3, [r7, #60]	; 0x3c
-     f66:	6bfa      	ldr	r2, [r7, #60]	; 0x3c
-     f68:	69bb      	ldr	r3, [r7, #24]
-     f6a:	429a      	cmp	r2, r3
-     f6c:	dbf0      	blt.n	f50 <myvsprintf+0x38c>
-            }
-            while (len < field_width--) {
-     f6e:	e008      	b.n	f82 <myvsprintf+0x3be>
-     f70:	00005aac 	.word	0x00005aac
-     f74:	00005a7c 	.word	0x00005a7c
-                *str++ = ' ';
-     f78:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     f7a:	1c5a      	adds	r2, r3, #1
-     f7c:	627a      	str	r2, [r7, #36]	; 0x24
-     f7e:	2220      	movs	r2, #32
-     f80:	701a      	strb	r2, [r3, #0]
-            while (len < field_width--) {
-     f82:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     f84:	1e5a      	subs	r2, r3, #1
-     f86:	633a      	str	r2, [r7, #48]	; 0x30
-     f88:	69ba      	ldr	r2, [r7, #24]
-     f8a:	429a      	cmp	r2, r3
-     f8c:	dbf4      	blt.n	f78 <myvsprintf+0x3b4>
-            }
-            continue;
-     f8e:	e092      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-        case 'p': {
-            if (-1 == field_width) {
-     f90:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     f92:	f1b3 3fff 	cmp.w	r3, #4294967295	; 0xffffffff
-     f96:	d105      	bne.n	fa4 <myvsprintf+0x3e0>
-                field_width = 2 * sizeof(void *);
-     f98:	2308      	movs	r3, #8
-     f9a:	633b      	str	r3, [r7, #48]	; 0x30
-                flags |= ZEROPAD;
-     f9c:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     f9e:	f043 0301 	orr.w	r3, r3, #1
-     fa2:	63bb      	str	r3, [r7, #56]	; 0x38
-            }
-            str = mynumber(str, (unsigned long)va_arg(args, void *), 16, field_width, precision, flags);
-     fa4:	687b      	ldr	r3, [r7, #4]
-     fa6:	1d1a      	adds	r2, r3, #4
-     fa8:	607a      	str	r2, [r7, #4]
-     faa:	681b      	ldr	r3, [r3, #0]
-     fac:	4619      	mov	r1, r3
-     fae:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-     fb0:	9301      	str	r3, [sp, #4]
-     fb2:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-     fb4:	9300      	str	r3, [sp, #0]
-     fb6:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-     fb8:	2210      	movs	r2, #16
-     fba:	6a78      	ldr	r0, [r7, #36]	; 0x24
-     fbc:	f7ff fcda 	bl	974 <mynumber>
-     fc0:	6278      	str	r0, [r7, #36]	; 0x24
-            continue;
-     fc2:	e078      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-        case 'n': {
-            if ('l' == qualifier) {
-     fc4:	6abb      	ldr	r3, [r7, #40]	; 0x28
-     fc6:	2b6c      	cmp	r3, #108	; 0x6c
-     fc8:	d10a      	bne.n	fe0 <myvsprintf+0x41c>
-                long * ip = va_arg(args, long *);
-     fca:	687b      	ldr	r3, [r7, #4]
-     fcc:	1d1a      	adds	r2, r3, #4
-     fce:	607a      	str	r2, [r7, #4]
-     fd0:	681b      	ldr	r3, [r3, #0]
-     fd2:	613b      	str	r3, [r7, #16]
-                *ip = (str - buf);
-     fd4:	6a7a      	ldr	r2, [r7, #36]	; 0x24
-     fd6:	68fb      	ldr	r3, [r7, #12]
-     fd8:	1ad2      	subs	r2, r2, r3
-     fda:	693b      	ldr	r3, [r7, #16]
-     fdc:	601a      	str	r2, [r3, #0]
-            } else {
-                int * ip = va_arg(args, int *);
-                *ip = (str - buf);
-            }
-            continue;
-     fde:	e06a      	b.n	10b6 <myvsprintf+0x4f2>
-                int * ip = va_arg(args, int *);
-     fe0:	687b      	ldr	r3, [r7, #4]
-     fe2:	1d1a      	adds	r2, r3, #4
-     fe4:	607a      	str	r2, [r7, #4]
-     fe6:	681b      	ldr	r3, [r3, #0]
-     fe8:	617b      	str	r3, [r7, #20]
-                *ip = (str - buf);
-     fea:	6a7a      	ldr	r2, [r7, #36]	; 0x24
-     fec:	68fb      	ldr	r3, [r7, #12]
-     fee:	1ad2      	subs	r2, r2, r3
-     ff0:	697b      	ldr	r3, [r7, #20]
-     ff2:	601a      	str	r2, [r3, #0]
-            continue;
-     ff4:	e05f      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-        case '%': {
-            *str++ = '%';
-     ff6:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-     ff8:	1c5a      	adds	r2, r3, #1
-     ffa:	627a      	str	r2, [r7, #36]	; 0x24
-     ffc:	2225      	movs	r2, #37	; 0x25
-     ffe:	701a      	strb	r2, [r3, #0]
-            continue;
-    1000:	e059      	b.n	10b6 <myvsprintf+0x4f2>
-        }
-
-        case 'o': { //integer number formats - set up the flags and "break"
-            base = 8;
-    1002:	2308      	movs	r3, #8
-    1004:	637b      	str	r3, [r7, #52]	; 0x34
-            break;
-    1006:	e020      	b.n	104a <myvsprintf+0x486>
-        }
-
-        case 'X': {
-            flags |= LARGE;
-    1008:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-    100a:	f043 0340 	orr.w	r3, r3, #64	; 0x40
-    100e:	63bb      	str	r3, [r7, #56]	; 0x38
-        }
-        case 'x': {
-            base = 16;
-    1010:	2310      	movs	r3, #16
-    1012:	637b      	str	r3, [r7, #52]	; 0x34
-            break;
-    1014:	e019      	b.n	104a <myvsprintf+0x486>
-        }
-        case 'd':
-        case 'i': {
-            flags |= SIGN;
-    1016:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-    1018:	f043 0302 	orr.w	r3, r3, #2
-    101c:	63bb      	str	r3, [r7, #56]	; 0x38
-        }
-        case 'u': {
-            break;
-    101e:	e013      	b.n	1048 <myvsprintf+0x484>
-        }
-        default: {
-            *str++ = '%';
-    1020:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-    1022:	1c5a      	adds	r2, r3, #1
-    1024:	627a      	str	r2, [r7, #36]	; 0x24
-    1026:	2225      	movs	r2, #37	; 0x25
-    1028:	701a      	strb	r2, [r3, #0]
-            if (0 == *fmt) {
-    102a:	68bb      	ldr	r3, [r7, #8]
-    102c:	781b      	ldrb	r3, [r3, #0]
-    102e:	2b00      	cmp	r3, #0
-    1030:	d106      	bne.n	1040 <myvsprintf+0x47c>
-                *str++ = *fmt;
-    1032:	68ba      	ldr	r2, [r7, #8]
-    1034:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-    1036:	1c59      	adds	r1, r3, #1
-    1038:	6279      	str	r1, [r7, #36]	; 0x24
-    103a:	7812      	ldrb	r2, [r2, #0]
-    103c:	701a      	strb	r2, [r3, #0]
-            } else {
-                --fmt;
-            }
-            continue;
-    103e:	e03a      	b.n	10b6 <myvsprintf+0x4f2>
-                --fmt;
-    1040:	68bb      	ldr	r3, [r7, #8]
-    1042:	3b01      	subs	r3, #1
-    1044:	60bb      	str	r3, [r7, #8]
-            continue;
-    1046:	e036      	b.n	10b6 <myvsprintf+0x4f2>
-            break;
-    1048:	bf00      	nop
-        }
-        }
-
-        if ('l' == qualifier) {
-    104a:	6abb      	ldr	r3, [r7, #40]	; 0x28
-    104c:	2b6c      	cmp	r3, #108	; 0x6c
-    104e:	d105      	bne.n	105c <myvsprintf+0x498>
-            num = va_arg(args, unsigned long);
-    1050:	687b      	ldr	r3, [r7, #4]
-    1052:	1d1a      	adds	r2, r3, #4
-    1054:	607a      	str	r2, [r7, #4]
-    1056:	681b      	ldr	r3, [r3, #0]
-    1058:	61fb      	str	r3, [r7, #28]
-    105a:	e021      	b.n	10a0 <myvsprintf+0x4dc>
-        } else if ('h' == qualifier) {
-    105c:	6abb      	ldr	r3, [r7, #40]	; 0x28
-    105e:	2b68      	cmp	r3, #104	; 0x68
-    1060:	d10e      	bne.n	1080 <myvsprintf+0x4bc>
-            num = (unsigned short) va_arg(args, int);
-    1062:	687b      	ldr	r3, [r7, #4]
-    1064:	1d1a      	adds	r2, r3, #4
-    1066:	607a      	str	r2, [r7, #4]
-    1068:	681b      	ldr	r3, [r3, #0]
-    106a:	b29b      	uxth	r3, r3
-    106c:	61fb      	str	r3, [r7, #28]
-            if (0 == (flags & SIGN)) {
-    106e:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-    1070:	f003 0302 	and.w	r3, r3, #2
-    1074:	2b00      	cmp	r3, #0
-    1076:	d113      	bne.n	10a0 <myvsprintf+0x4dc>
-                num = (short) num;
-    1078:	69fb      	ldr	r3, [r7, #28]
-    107a:	b21b      	sxth	r3, r3
-    107c:	61fb      	str	r3, [r7, #28]
-    107e:	e00f      	b.n	10a0 <myvsprintf+0x4dc>
-            }
-        } else if (0 == (flags & SIGN)) {
-    1080:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-    1082:	f003 0302 	and.w	r3, r3, #2
-    1086:	2b00      	cmp	r3, #0
-    1088:	d105      	bne.n	1096 <myvsprintf+0x4d2>
-            num = va_arg(args, int);
-    108a:	687b      	ldr	r3, [r7, #4]
-    108c:	1d1a      	adds	r2, r3, #4
-    108e:	607a      	str	r2, [r7, #4]
-    1090:	681b      	ldr	r3, [r3, #0]
-    1092:	61fb      	str	r3, [r7, #28]
-    1094:	e004      	b.n	10a0 <myvsprintf+0x4dc>
-        } else {
-            num = va_arg(args, unsigned int);
-    1096:	687b      	ldr	r3, [r7, #4]
-    1098:	1d1a      	adds	r2, r3, #4
-    109a:	607a      	str	r2, [r7, #4]
-    109c:	681b      	ldr	r3, [r3, #0]
-    109e:	61fb      	str	r3, [r7, #28]
-        }
-
-        str = mynumber(str, num, base, field_width, precision, flags);
-    10a0:	69f9      	ldr	r1, [r7, #28]
-    10a2:	6bbb      	ldr	r3, [r7, #56]	; 0x38
-    10a4:	9301      	str	r3, [sp, #4]
-    10a6:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    10a8:	9300      	str	r3, [sp, #0]
-    10aa:	6b3b      	ldr	r3, [r7, #48]	; 0x30
-    10ac:	6b7a      	ldr	r2, [r7, #52]	; 0x34
-    10ae:	6a78      	ldr	r0, [r7, #36]	; 0x24
-    10b0:	f7ff fc60 	bl	974 <mynumber>
-    10b4:	6278      	str	r0, [r7, #36]	; 0x24
-    for (str = buf; *fmt; ++fmt) {
-    10b6:	68bb      	ldr	r3, [r7, #8]
-    10b8:	3301      	adds	r3, #1
-    10ba:	60bb      	str	r3, [r7, #8]
-    10bc:	68bb      	ldr	r3, [r7, #8]
-    10be:	781b      	ldrb	r3, [r3, #0]
-    10c0:	2b00      	cmp	r3, #0
-    10c2:	f47f ad88 	bne.w	bd6 <myvsprintf+0x12>
-
-    }
-    *str = '\0';
-    10c6:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-    10c8:	2200      	movs	r2, #0
-    10ca:	701a      	strb	r2, [r3, #0]
-
-    return str-buf;
-    10cc:	6a7a      	ldr	r2, [r7, #36]	; 0x24
-    10ce:	68fb      	ldr	r3, [r7, #12]
-    10d0:	1ad3      	subs	r3, r2, r3
-}
-    10d2:	4618      	mov	r0, r3
-    10d4:	3740      	adds	r7, #64	; 0x40
-    10d6:	46bd      	mov	sp, r7
-    10d8:	bd80      	pop	{r7, pc}
-
-000010da <myputc>:
-
-void myputc (const char c)
-{
-    10da:	b580      	push	{r7, lr}
-    10dc:	b082      	sub	sp, #8
-    10de:	af00      	add	r7, sp, #0
-    10e0:	4603      	mov	r3, r0
-    10e2:	71fb      	strb	r3, [r7, #7]
-    if (c == '\n')
-    10e4:	79fb      	ldrb	r3, [r7, #7]
-    10e6:	2b0a      	cmp	r3, #10
-    10e8:	d102      	bne.n	10f0 <myputc+0x16>
-        usart_send_bytes('\r');
-    10ea:	200d      	movs	r0, #13
-    10ec:	f7ff fbe2 	bl	8b4 <usart_send_bytes>
-    usart_send_bytes(c);
-    10f0:	79fb      	ldrb	r3, [r7, #7]
-    10f2:	4618      	mov	r0, r3
-    10f4:	f7ff fbde 	bl	8b4 <usart_send_bytes>
-}
-    10f8:	bf00      	nop
-    10fa:	3708      	adds	r7, #8
-    10fc:	46bd      	mov	sp, r7
-    10fe:	bd80      	pop	{r7, pc}
-
-00001100 <myputs>:
-
-void myputs (const unsigned char *s)
-{
-    1100:	b580      	push	{r7, lr}
-    1102:	b082      	sub	sp, #8
-    1104:	af00      	add	r7, sp, #0
-    1106:	6078      	str	r0, [r7, #4]
-    while (*s) {
-    1108:	e006      	b.n	1118 <myputs+0x18>
-        myputc (*s++);
-    110a:	687b      	ldr	r3, [r7, #4]
-    110c:	1c5a      	adds	r2, r3, #1
-    110e:	607a      	str	r2, [r7, #4]
-    1110:	781b      	ldrb	r3, [r3, #0]
-    1112:	4618      	mov	r0, r3
-    1114:	f7ff ffe1 	bl	10da <myputc>
-    while (*s) {
-    1118:	687b      	ldr	r3, [r7, #4]
-    111a:	781b      	ldrb	r3, [r3, #0]
-    111c:	2b00      	cmp	r3, #0
-    111e:	d1f4      	bne.n	110a <myputs+0xa>
-    }
-}
-    1120:	bf00      	nop
-    1122:	bf00      	nop
-    1124:	3708      	adds	r7, #8
-    1126:	46bd      	mov	sp, r7
-    1128:	bd80      	pop	{r7, pc}
-
-0000112a <myprintf>:
-
-void myprintf (const char *fmt,...)
-{
-    112a:	b40f      	push	{r0, r1, r2, r3}
-    112c:	b580      	push	{r7, lr}
-    112e:	b0a2      	sub	sp, #136	; 0x88
-    1130:	af00      	add	r7, sp, #0
-    va_list args;
-    char printbuffer[PBSIZE];
-
-    va_start(args, fmt);
-    1132:	f107 0394 	add.w	r3, r7, #148	; 0x94
-    1136:	f8c7 3084 	str.w	r3, [r7, #132]	; 0x84
-    myvsprintf(printbuffer, fmt, args);
-    113a:	1d3b      	adds	r3, r7, #4
-    113c:	f8d7 2084 	ldr.w	r2, [r7, #132]	; 0x84
-    1140:	f8d7 1090 	ldr.w	r1, [r7, #144]	; 0x90
-    1144:	4618      	mov	r0, r3
-    1146:	f7ff fd3d 	bl	bc4 <myvsprintf>
-    va_end(args);
-
-    myputs((const unsigned char *)printbuffer);  // Print the string
-    114a:	1d3b      	adds	r3, r7, #4
-    114c:	4618      	mov	r0, r3
-    114e:	f7ff ffd7 	bl	1100 <myputs>
-}
-    1152:	bf00      	nop
-    1154:	3788      	adds	r7, #136	; 0x88
-    1156:	46bd      	mov	sp, r7
-    1158:	e8bd 4080 	ldmia.w	sp!, {r7, lr}
-    115c:	b004      	add	sp, #16
-    115e:	4770      	bx	lr
-
-00001160 <RCC_DeInit>:
-  * @brief  Resets the RCC clock configuration to the default reset state.
-  * @param  None
-  * @retval None
-  */
-void RCC_DeInit(void)
-{
-    1160:	b480      	push	{r7}
-    1162:	af00      	add	r7, sp, #0
-  /* Set HSION bit */
-  RCC->CR |= (uint32_t)0x00000001;
-    1164:	4b13      	ldr	r3, [pc, #76]	; (11b4 <RCC_DeInit+0x54>)
-    1166:	681b      	ldr	r3, [r3, #0]
-    1168:	4a12      	ldr	r2, [pc, #72]	; (11b4 <RCC_DeInit+0x54>)
-    116a:	f043 0301 	orr.w	r3, r3, #1
-    116e:	6013      	str	r3, [r2, #0]
-
-  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
-#ifndef STM32F10X_CL
-  RCC->CFGR &= (uint32_t)0xF8FF0000;
-    1170:	4b10      	ldr	r3, [pc, #64]	; (11b4 <RCC_DeInit+0x54>)
-    1172:	685a      	ldr	r2, [r3, #4]
-    1174:	490f      	ldr	r1, [pc, #60]	; (11b4 <RCC_DeInit+0x54>)
-    1176:	4b10      	ldr	r3, [pc, #64]	; (11b8 <RCC_DeInit+0x58>)
-    1178:	4013      	ands	r3, r2
-    117a:	604b      	str	r3, [r1, #4]
-#else
-  RCC->CFGR &= (uint32_t)0xF0FF0000;
-#endif /* STM32F10X_CL */   
-  
-  /* Reset HSEON, CSSON and PLLON bits */
-  RCC->CR &= (uint32_t)0xFEF6FFFF;
-    117c:	4b0d      	ldr	r3, [pc, #52]	; (11b4 <RCC_DeInit+0x54>)
-    117e:	681b      	ldr	r3, [r3, #0]
-    1180:	4a0c      	ldr	r2, [pc, #48]	; (11b4 <RCC_DeInit+0x54>)
-    1182:	f023 7384 	bic.w	r3, r3, #17301504	; 0x1080000
-    1186:	f423 3380 	bic.w	r3, r3, #65536	; 0x10000
-    118a:	6013      	str	r3, [r2, #0]
-
-  /* Reset HSEBYP bit */
-  RCC->CR &= (uint32_t)0xFFFBFFFF;
-    118c:	4b09      	ldr	r3, [pc, #36]	; (11b4 <RCC_DeInit+0x54>)
-    118e:	681b      	ldr	r3, [r3, #0]
-    1190:	4a08      	ldr	r2, [pc, #32]	; (11b4 <RCC_DeInit+0x54>)
-    1192:	f423 2380 	bic.w	r3, r3, #262144	; 0x40000
-    1196:	6013      	str	r3, [r2, #0]
-
-  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
-  RCC->CFGR &= (uint32_t)0xFF80FFFF;
-    1198:	4b06      	ldr	r3, [pc, #24]	; (11b4 <RCC_DeInit+0x54>)
-    119a:	685b      	ldr	r3, [r3, #4]
-    119c:	4a05      	ldr	r2, [pc, #20]	; (11b4 <RCC_DeInit+0x54>)
-    119e:	f423 03fe 	bic.w	r3, r3, #8323072	; 0x7f0000
-    11a2:	6053      	str	r3, [r2, #4]
-
-  /* Reset CFGR2 register */
-  RCC->CFGR2 = 0x00000000;      
-#else
-  /* Disable all interrupts and clear pending bits  */
-  RCC->CIR = 0x009F0000;
-    11a4:	4b03      	ldr	r3, [pc, #12]	; (11b4 <RCC_DeInit+0x54>)
-    11a6:	f44f 021f 	mov.w	r2, #10420224	; 0x9f0000
-    11aa:	609a      	str	r2, [r3, #8]
-#endif /* STM32F10X_CL */
-
-}
-    11ac:	bf00      	nop
-    11ae:	46bd      	mov	sp, r7
-    11b0:	bc80      	pop	{r7}
-    11b2:	4770      	bx	lr
-    11b4:	40021000 	.word	0x40021000
-    11b8:	f8ff0000 	.word	0xf8ff0000
-
-000011bc <RCC_HSEConfig>:
-  *     @arg RCC_HSE_ON: HSE oscillator ON
-  *     @arg RCC_HSE_Bypass: HSE oscillator bypassed with external clock
-  * @retval None
-  */
-void RCC_HSEConfig(uint32_t RCC_HSE)
-{
-    11bc:	b480      	push	{r7}
-    11be:	b083      	sub	sp, #12
-    11c0:	af00      	add	r7, sp, #0
-    11c2:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_RCC_HSE(RCC_HSE));
-  /* Reset HSEON and HSEBYP bits before configuring the HSE ------------------*/
-  /* Reset HSEON bit */
-  RCC->CR &= CR_HSEON_Reset;
-    11c4:	4b13      	ldr	r3, [pc, #76]	; (1214 <RCC_HSEConfig+0x58>)
-    11c6:	681b      	ldr	r3, [r3, #0]
-    11c8:	4a12      	ldr	r2, [pc, #72]	; (1214 <RCC_HSEConfig+0x58>)
-    11ca:	f423 3380 	bic.w	r3, r3, #65536	; 0x10000
-    11ce:	6013      	str	r3, [r2, #0]
-  /* Reset HSEBYP bit */
-  RCC->CR &= CR_HSEBYP_Reset;
-    11d0:	4b10      	ldr	r3, [pc, #64]	; (1214 <RCC_HSEConfig+0x58>)
-    11d2:	681b      	ldr	r3, [r3, #0]
-    11d4:	4a0f      	ldr	r2, [pc, #60]	; (1214 <RCC_HSEConfig+0x58>)
-    11d6:	f423 2380 	bic.w	r3, r3, #262144	; 0x40000
-    11da:	6013      	str	r3, [r2, #0]
-  /* Configure HSE (RCC_HSE_OFF is already covered by the code section above) */
-  switch(RCC_HSE)
-    11dc:	687b      	ldr	r3, [r7, #4]
-    11de:	f5b3 3f80 	cmp.w	r3, #65536	; 0x10000
-    11e2:	d004      	beq.n	11ee <RCC_HSEConfig+0x32>
-    11e4:	687b      	ldr	r3, [r7, #4]
-    11e6:	f5b3 2f80 	cmp.w	r3, #262144	; 0x40000
-    11ea:	d007      	beq.n	11fc <RCC_HSEConfig+0x40>
-      /* Set HSEBYP and HSEON bits */
-      RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
-      break;
-      
-    default:
-      break;
-    11ec:	e00d      	b.n	120a <RCC_HSEConfig+0x4e>
-      RCC->CR |= CR_HSEON_Set;
-    11ee:	4b09      	ldr	r3, [pc, #36]	; (1214 <RCC_HSEConfig+0x58>)
-    11f0:	681b      	ldr	r3, [r3, #0]
-    11f2:	4a08      	ldr	r2, [pc, #32]	; (1214 <RCC_HSEConfig+0x58>)
-    11f4:	f443 3380 	orr.w	r3, r3, #65536	; 0x10000
-    11f8:	6013      	str	r3, [r2, #0]
-      break;
-    11fa:	e006      	b.n	120a <RCC_HSEConfig+0x4e>
-      RCC->CR |= CR_HSEBYP_Set | CR_HSEON_Set;
-    11fc:	4b05      	ldr	r3, [pc, #20]	; (1214 <RCC_HSEConfig+0x58>)
-    11fe:	681b      	ldr	r3, [r3, #0]
-    1200:	4a04      	ldr	r2, [pc, #16]	; (1214 <RCC_HSEConfig+0x58>)
-    1202:	f443 23a0 	orr.w	r3, r3, #327680	; 0x50000
-    1206:	6013      	str	r3, [r2, #0]
-      break;
-    1208:	bf00      	nop
-  }
-}
-    120a:	bf00      	nop
-    120c:	370c      	adds	r7, #12
-    120e:	46bd      	mov	sp, r7
-    1210:	bc80      	pop	{r7}
-    1212:	4770      	bx	lr
-    1214:	40021000 	.word	0x40021000
-
-00001218 <RCC_WaitForHSEStartUp>:
-  * @retval An ErrorStatus enumuration value:
-  * - SUCCESS: HSE oscillator is stable and ready to use
-  * - ERROR: HSE oscillator not yet ready
-  */
-ErrorStatus RCC_WaitForHSEStartUp(void)
-{
-    1218:	b580      	push	{r7, lr}
-    121a:	b082      	sub	sp, #8
-    121c:	af00      	add	r7, sp, #0
-  __IO uint32_t StartUpCounter = 0;
-    121e:	2300      	movs	r3, #0
-    1220:	603b      	str	r3, [r7, #0]
-  ErrorStatus status = ERROR;
-    1222:	2300      	movs	r3, #0
-    1224:	71fb      	strb	r3, [r7, #7]
-  FlagStatus HSEStatus = RESET;
-    1226:	2300      	movs	r3, #0
-    1228:	71bb      	strb	r3, [r7, #6]
-  
-  /* Wait till HSE is ready and if Time out is reached exit */
-  do
-  {
-    HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
-    122a:	2031      	movs	r0, #49	; 0x31
-    122c:	f000 fb14 	bl	1858 <RCC_GetFlagStatus>
-    1230:	4603      	mov	r3, r0
-    1232:	71bb      	strb	r3, [r7, #6]
-    StartUpCounter++;  
-    1234:	683b      	ldr	r3, [r7, #0]
-    1236:	3301      	adds	r3, #1
-    1238:	603b      	str	r3, [r7, #0]
-  } while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET));
-    123a:	683b      	ldr	r3, [r7, #0]
-    123c:	f5b3 6fa0 	cmp.w	r3, #1280	; 0x500
-    1240:	d002      	beq.n	1248 <RCC_WaitForHSEStartUp+0x30>
-    1242:	79bb      	ldrb	r3, [r7, #6]
-    1244:	2b00      	cmp	r3, #0
-    1246:	d0f0      	beq.n	122a <RCC_WaitForHSEStartUp+0x12>
-  
-  if (RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET)
-    1248:	2031      	movs	r0, #49	; 0x31
-    124a:	f000 fb05 	bl	1858 <RCC_GetFlagStatus>
-    124e:	4603      	mov	r3, r0
-    1250:	2b00      	cmp	r3, #0
-    1252:	d002      	beq.n	125a <RCC_WaitForHSEStartUp+0x42>
-  {
-    status = SUCCESS;
-    1254:	2301      	movs	r3, #1
-    1256:	71fb      	strb	r3, [r7, #7]
-    1258:	e001      	b.n	125e <RCC_WaitForHSEStartUp+0x46>
-  }
-  else
-  {
-    status = ERROR;
-    125a:	2300      	movs	r3, #0
-    125c:	71fb      	strb	r3, [r7, #7]
-  }  
-  return (status);
-    125e:	79fb      	ldrb	r3, [r7, #7]
-}
-    1260:	4618      	mov	r0, r3
-    1262:	3708      	adds	r7, #8
-    1264:	46bd      	mov	sp, r7
-    1266:	bd80      	pop	{r7, pc}
-
-00001268 <RCC_AdjustHSICalibrationValue>:
-  * @param  HSICalibrationValue: specifies the calibration trimming value.
-  *   This parameter must be a number between 0 and 0x1F.
-  * @retval None
-  */
-void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
-{
-    1268:	b480      	push	{r7}
-    126a:	b085      	sub	sp, #20
-    126c:	af00      	add	r7, sp, #0
-    126e:	4603      	mov	r3, r0
-    1270:	71fb      	strb	r3, [r7, #7]
-  uint32_t tmpreg = 0;
-    1272:	2300      	movs	r3, #0
-    1274:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue));
-  tmpreg = RCC->CR;
-    1276:	4b0a      	ldr	r3, [pc, #40]	; (12a0 <RCC_AdjustHSICalibrationValue+0x38>)
-    1278:	681b      	ldr	r3, [r3, #0]
-    127a:	60fb      	str	r3, [r7, #12]
-  /* Clear HSITRIM[4:0] bits */
-  tmpreg &= CR_HSITRIM_Mask;
-    127c:	68fb      	ldr	r3, [r7, #12]
-    127e:	f023 03f8 	bic.w	r3, r3, #248	; 0xf8
-    1282:	60fb      	str	r3, [r7, #12]
-  /* Set the HSITRIM[4:0] bits according to HSICalibrationValue value */
-  tmpreg |= (uint32_t)HSICalibrationValue << 3;
-    1284:	79fb      	ldrb	r3, [r7, #7]
-    1286:	00db      	lsls	r3, r3, #3
-    1288:	68fa      	ldr	r2, [r7, #12]
-    128a:	4313      	orrs	r3, r2
-    128c:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CR = tmpreg;
-    128e:	4a04      	ldr	r2, [pc, #16]	; (12a0 <RCC_AdjustHSICalibrationValue+0x38>)
-    1290:	68fb      	ldr	r3, [r7, #12]
-    1292:	6013      	str	r3, [r2, #0]
-}
-    1294:	bf00      	nop
-    1296:	3714      	adds	r7, #20
-    1298:	46bd      	mov	sp, r7
-    129a:	bc80      	pop	{r7}
-    129c:	4770      	bx	lr
-    129e:	bf00      	nop
-    12a0:	40021000 	.word	0x40021000
-
-000012a4 <RCC_HSICmd>:
-  * @note   HSI can not be stopped if it is used directly or through the PLL as system clock.
-  * @param  NewState: new state of the HSI. This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_HSICmd(FunctionalState NewState)
-{
-    12a4:	b480      	push	{r7}
-    12a6:	b083      	sub	sp, #12
-    12a8:	af00      	add	r7, sp, #0
-    12aa:	4603      	mov	r3, r0
-    12ac:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  *(__IO uint32_t *) CR_HSION_BB = (uint32_t)NewState;
-    12ae:	4a04      	ldr	r2, [pc, #16]	; (12c0 <RCC_HSICmd+0x1c>)
-    12b0:	79fb      	ldrb	r3, [r7, #7]
-    12b2:	6013      	str	r3, [r2, #0]
-}
-    12b4:	bf00      	nop
-    12b6:	370c      	adds	r7, #12
-    12b8:	46bd      	mov	sp, r7
-    12ba:	bc80      	pop	{r7}
-    12bc:	4770      	bx	lr
-    12be:	bf00      	nop
-    12c0:	42420000 	.word	0x42420000
-
-000012c4 <RCC_PLLConfig>:
-  *   For @b STM32_Connectivity_line_devices, this parameter can be RCC_PLLMul_x where x:{[4,9], 6_5}
-  *   For @b other_STM32_devices, this parameter can be RCC_PLLMul_x where x:[2,16]  
-  * @retval None
-  */
-void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
-{
-    12c4:	b480      	push	{r7}
-    12c6:	b085      	sub	sp, #20
-    12c8:	af00      	add	r7, sp, #0
-    12ca:	6078      	str	r0, [r7, #4]
-    12cc:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg = 0;
-    12ce:	2300      	movs	r3, #0
-    12d0:	60fb      	str	r3, [r7, #12]
-
-  /* Check the parameters */
-  assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
-  assert_param(IS_RCC_PLL_MUL(RCC_PLLMul));
-
-  tmpreg = RCC->CFGR;
-    12d2:	4b0a      	ldr	r3, [pc, #40]	; (12fc <RCC_PLLConfig+0x38>)
-    12d4:	685b      	ldr	r3, [r3, #4]
-    12d6:	60fb      	str	r3, [r7, #12]
-  /* Clear PLLSRC, PLLXTPRE and PLLMUL[3:0] bits */
-  tmpreg &= CFGR_PLL_Mask;
-    12d8:	68fb      	ldr	r3, [r7, #12]
-    12da:	f423 137c 	bic.w	r3, r3, #4128768	; 0x3f0000
-    12de:	60fb      	str	r3, [r7, #12]
-  /* Set the PLL configuration bits */
-  tmpreg |= RCC_PLLSource | RCC_PLLMul;
-    12e0:	687a      	ldr	r2, [r7, #4]
-    12e2:	683b      	ldr	r3, [r7, #0]
-    12e4:	4313      	orrs	r3, r2
-    12e6:	68fa      	ldr	r2, [r7, #12]
-    12e8:	4313      	orrs	r3, r2
-    12ea:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    12ec:	4a03      	ldr	r2, [pc, #12]	; (12fc <RCC_PLLConfig+0x38>)
-    12ee:	68fb      	ldr	r3, [r7, #12]
-    12f0:	6053      	str	r3, [r2, #4]
-}
-    12f2:	bf00      	nop
-    12f4:	3714      	adds	r7, #20
-    12f6:	46bd      	mov	sp, r7
-    12f8:	bc80      	pop	{r7}
-    12fa:	4770      	bx	lr
-    12fc:	40021000 	.word	0x40021000
-
-00001300 <RCC_PLLCmd>:
-  * @note   The PLL can not be disabled if it is used as system clock.
-  * @param  NewState: new state of the PLL. This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_PLLCmd(FunctionalState NewState)
-{
-    1300:	b480      	push	{r7}
-    1302:	b083      	sub	sp, #12
-    1304:	af00      	add	r7, sp, #0
-    1306:	4603      	mov	r3, r0
-    1308:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-
-  *(__IO uint32_t *) CR_PLLON_BB = (uint32_t)NewState;
-    130a:	4a04      	ldr	r2, [pc, #16]	; (131c <RCC_PLLCmd+0x1c>)
-    130c:	79fb      	ldrb	r3, [r7, #7]
-    130e:	6013      	str	r3, [r2, #0]
-}
-    1310:	bf00      	nop
-    1312:	370c      	adds	r7, #12
-    1314:	46bd      	mov	sp, r7
-    1316:	bc80      	pop	{r7}
-    1318:	4770      	bx	lr
-    131a:	bf00      	nop
-    131c:	42420060 	.word	0x42420060
-
-00001320 <RCC_SYSCLKConfig>:
-  *     @arg RCC_SYSCLKSource_HSE: HSE selected as system clock
-  *     @arg RCC_SYSCLKSource_PLLCLK: PLL selected as system clock
-  * @retval None
-  */
-void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
-{
-    1320:	b480      	push	{r7}
-    1322:	b085      	sub	sp, #20
-    1324:	af00      	add	r7, sp, #0
-    1326:	6078      	str	r0, [r7, #4]
-  uint32_t tmpreg = 0;
-    1328:	2300      	movs	r3, #0
-    132a:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
-  tmpreg = RCC->CFGR;
-    132c:	4b09      	ldr	r3, [pc, #36]	; (1354 <RCC_SYSCLKConfig+0x34>)
-    132e:	685b      	ldr	r3, [r3, #4]
-    1330:	60fb      	str	r3, [r7, #12]
-  /* Clear SW[1:0] bits */
-  tmpreg &= CFGR_SW_Mask;
-    1332:	68fb      	ldr	r3, [r7, #12]
-    1334:	f023 0303 	bic.w	r3, r3, #3
-    1338:	60fb      	str	r3, [r7, #12]
-  /* Set SW[1:0] bits according to RCC_SYSCLKSource value */
-  tmpreg |= RCC_SYSCLKSource;
-    133a:	68fa      	ldr	r2, [r7, #12]
-    133c:	687b      	ldr	r3, [r7, #4]
-    133e:	4313      	orrs	r3, r2
-    1340:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    1342:	4a04      	ldr	r2, [pc, #16]	; (1354 <RCC_SYSCLKConfig+0x34>)
-    1344:	68fb      	ldr	r3, [r7, #12]
-    1346:	6053      	str	r3, [r2, #4]
-}
-    1348:	bf00      	nop
-    134a:	3714      	adds	r7, #20
-    134c:	46bd      	mov	sp, r7
-    134e:	bc80      	pop	{r7}
-    1350:	4770      	bx	lr
-    1352:	bf00      	nop
-    1354:	40021000 	.word	0x40021000
-
-00001358 <RCC_GetSYSCLKSource>:
-  *     - 0x00: HSI used as system clock
-  *     - 0x04: HSE used as system clock
-  *     - 0x08: PLL used as system clock
-  */
-uint8_t RCC_GetSYSCLKSource(void)
-{
-    1358:	b480      	push	{r7}
-    135a:	af00      	add	r7, sp, #0
-  return ((uint8_t)(RCC->CFGR & CFGR_SWS_Mask));
-    135c:	4b04      	ldr	r3, [pc, #16]	; (1370 <RCC_GetSYSCLKSource+0x18>)
-    135e:	685b      	ldr	r3, [r3, #4]
-    1360:	b2db      	uxtb	r3, r3
-    1362:	f003 030c 	and.w	r3, r3, #12
-    1366:	b2db      	uxtb	r3, r3
-}
-    1368:	4618      	mov	r0, r3
-    136a:	46bd      	mov	sp, r7
-    136c:	bc80      	pop	{r7}
-    136e:	4770      	bx	lr
-    1370:	40021000 	.word	0x40021000
-
-00001374 <RCC_HCLKConfig>:
-  *     @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256
-  *     @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512
-  * @retval None
-  */
-void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
-{
-    1374:	b480      	push	{r7}
-    1376:	b085      	sub	sp, #20
-    1378:	af00      	add	r7, sp, #0
-    137a:	6078      	str	r0, [r7, #4]
-  uint32_t tmpreg = 0;
-    137c:	2300      	movs	r3, #0
-    137e:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_HCLK(RCC_SYSCLK));
-  tmpreg = RCC->CFGR;
-    1380:	4b09      	ldr	r3, [pc, #36]	; (13a8 <RCC_HCLKConfig+0x34>)
-    1382:	685b      	ldr	r3, [r3, #4]
-    1384:	60fb      	str	r3, [r7, #12]
-  /* Clear HPRE[3:0] bits */
-  tmpreg &= CFGR_HPRE_Reset_Mask;
-    1386:	68fb      	ldr	r3, [r7, #12]
-    1388:	f023 03f0 	bic.w	r3, r3, #240	; 0xf0
-    138c:	60fb      	str	r3, [r7, #12]
-  /* Set HPRE[3:0] bits according to RCC_SYSCLK value */
-  tmpreg |= RCC_SYSCLK;
-    138e:	68fa      	ldr	r2, [r7, #12]
-    1390:	687b      	ldr	r3, [r7, #4]
-    1392:	4313      	orrs	r3, r2
-    1394:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    1396:	4a04      	ldr	r2, [pc, #16]	; (13a8 <RCC_HCLKConfig+0x34>)
-    1398:	68fb      	ldr	r3, [r7, #12]
-    139a:	6053      	str	r3, [r2, #4]
-}
-    139c:	bf00      	nop
-    139e:	3714      	adds	r7, #20
-    13a0:	46bd      	mov	sp, r7
-    13a2:	bc80      	pop	{r7}
-    13a4:	4770      	bx	lr
-    13a6:	bf00      	nop
-    13a8:	40021000 	.word	0x40021000
-
-000013ac <RCC_PCLK1Config>:
-  *     @arg RCC_HCLK_Div8: APB1 clock = HCLK/8
-  *     @arg RCC_HCLK_Div16: APB1 clock = HCLK/16
-  * @retval None
-  */
-void RCC_PCLK1Config(uint32_t RCC_HCLK)
-{
-    13ac:	b480      	push	{r7}
-    13ae:	b085      	sub	sp, #20
-    13b0:	af00      	add	r7, sp, #0
-    13b2:	6078      	str	r0, [r7, #4]
-  uint32_t tmpreg = 0;
-    13b4:	2300      	movs	r3, #0
-    13b6:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_PCLK(RCC_HCLK));
-  tmpreg = RCC->CFGR;
-    13b8:	4b09      	ldr	r3, [pc, #36]	; (13e0 <RCC_PCLK1Config+0x34>)
-    13ba:	685b      	ldr	r3, [r3, #4]
-    13bc:	60fb      	str	r3, [r7, #12]
-  /* Clear PPRE1[2:0] bits */
-  tmpreg &= CFGR_PPRE1_Reset_Mask;
-    13be:	68fb      	ldr	r3, [r7, #12]
-    13c0:	f423 63e0 	bic.w	r3, r3, #1792	; 0x700
-    13c4:	60fb      	str	r3, [r7, #12]
-  /* Set PPRE1[2:0] bits according to RCC_HCLK value */
-  tmpreg |= RCC_HCLK;
-    13c6:	68fa      	ldr	r2, [r7, #12]
-    13c8:	687b      	ldr	r3, [r7, #4]
-    13ca:	4313      	orrs	r3, r2
-    13cc:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    13ce:	4a04      	ldr	r2, [pc, #16]	; (13e0 <RCC_PCLK1Config+0x34>)
-    13d0:	68fb      	ldr	r3, [r7, #12]
-    13d2:	6053      	str	r3, [r2, #4]
-}
-    13d4:	bf00      	nop
-    13d6:	3714      	adds	r7, #20
-    13d8:	46bd      	mov	sp, r7
-    13da:	bc80      	pop	{r7}
-    13dc:	4770      	bx	lr
-    13de:	bf00      	nop
-    13e0:	40021000 	.word	0x40021000
-
-000013e4 <RCC_PCLK2Config>:
-  *     @arg RCC_HCLK_Div8: APB2 clock = HCLK/8
-  *     @arg RCC_HCLK_Div16: APB2 clock = HCLK/16
-  * @retval None
-  */
-void RCC_PCLK2Config(uint32_t RCC_HCLK)
-{
-    13e4:	b480      	push	{r7}
-    13e6:	b085      	sub	sp, #20
-    13e8:	af00      	add	r7, sp, #0
-    13ea:	6078      	str	r0, [r7, #4]
-  uint32_t tmpreg = 0;
-    13ec:	2300      	movs	r3, #0
-    13ee:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_PCLK(RCC_HCLK));
-  tmpreg = RCC->CFGR;
-    13f0:	4b09      	ldr	r3, [pc, #36]	; (1418 <RCC_PCLK2Config+0x34>)
-    13f2:	685b      	ldr	r3, [r3, #4]
-    13f4:	60fb      	str	r3, [r7, #12]
-  /* Clear PPRE2[2:0] bits */
-  tmpreg &= CFGR_PPRE2_Reset_Mask;
-    13f6:	68fb      	ldr	r3, [r7, #12]
-    13f8:	f423 5360 	bic.w	r3, r3, #14336	; 0x3800
-    13fc:	60fb      	str	r3, [r7, #12]
-  /* Set PPRE2[2:0] bits according to RCC_HCLK value */
-  tmpreg |= RCC_HCLK << 3;
-    13fe:	687b      	ldr	r3, [r7, #4]
-    1400:	00db      	lsls	r3, r3, #3
-    1402:	68fa      	ldr	r2, [r7, #12]
-    1404:	4313      	orrs	r3, r2
-    1406:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    1408:	4a03      	ldr	r2, [pc, #12]	; (1418 <RCC_PCLK2Config+0x34>)
-    140a:	68fb      	ldr	r3, [r7, #12]
-    140c:	6053      	str	r3, [r2, #4]
-}
-    140e:	bf00      	nop
-    1410:	3714      	adds	r7, #20
-    1412:	46bd      	mov	sp, r7
-    1414:	bc80      	pop	{r7}
-    1416:	4770      	bx	lr
-    1418:	40021000 	.word	0x40021000
-
-0000141c <RCC_ITConfig>:
-  * @param  NewState: new state of the specified RCC interrupts.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
-{
-    141c:	b480      	push	{r7}
-    141e:	b083      	sub	sp, #12
-    1420:	af00      	add	r7, sp, #0
-    1422:	4603      	mov	r3, r0
-    1424:	460a      	mov	r2, r1
-    1426:	71fb      	strb	r3, [r7, #7]
-    1428:	4613      	mov	r3, r2
-    142a:	71bb      	strb	r3, [r7, #6]
-  /* Check the parameters */
-  assert_param(IS_RCC_IT(RCC_IT));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    142c:	79bb      	ldrb	r3, [r7, #6]
-    142e:	2b00      	cmp	r3, #0
-    1430:	d008      	beq.n	1444 <RCC_ITConfig+0x28>
-  {
-    /* Perform Byte access to RCC_CIR bits to enable the selected interrupts */
-    *(__IO uint8_t *) CIR_BYTE2_ADDRESS |= RCC_IT;
-    1432:	4b0c      	ldr	r3, [pc, #48]	; (1464 <RCC_ITConfig+0x48>)
-    1434:	781b      	ldrb	r3, [r3, #0]
-    1436:	b2da      	uxtb	r2, r3
-    1438:	490a      	ldr	r1, [pc, #40]	; (1464 <RCC_ITConfig+0x48>)
-    143a:	79fb      	ldrb	r3, [r7, #7]
-    143c:	4313      	orrs	r3, r2
-    143e:	b2db      	uxtb	r3, r3
-    1440:	700b      	strb	r3, [r1, #0]
-  else
-  {
-    /* Perform Byte access to RCC_CIR bits to disable the selected interrupts */
-    *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
-  }
-}
-    1442:	e009      	b.n	1458 <RCC_ITConfig+0x3c>
-    *(__IO uint8_t *) CIR_BYTE2_ADDRESS &= (uint8_t)~RCC_IT;
-    1444:	4b07      	ldr	r3, [pc, #28]	; (1464 <RCC_ITConfig+0x48>)
-    1446:	781b      	ldrb	r3, [r3, #0]
-    1448:	b2da      	uxtb	r2, r3
-    144a:	79fb      	ldrb	r3, [r7, #7]
-    144c:	43db      	mvns	r3, r3
-    144e:	b2db      	uxtb	r3, r3
-    1450:	4904      	ldr	r1, [pc, #16]	; (1464 <RCC_ITConfig+0x48>)
-    1452:	4013      	ands	r3, r2
-    1454:	b2db      	uxtb	r3, r3
-    1456:	700b      	strb	r3, [r1, #0]
-}
-    1458:	bf00      	nop
-    145a:	370c      	adds	r7, #12
-    145c:	46bd      	mov	sp, r7
-    145e:	bc80      	pop	{r7}
-    1460:	4770      	bx	lr
-    1462:	bf00      	nop
-    1464:	40021009 	.word	0x40021009
-
-00001468 <RCC_USBCLKConfig>:
-  *                                     clock source
-  *     @arg RCC_USBCLKSource_PLLCLK_Div1: PLL clock selected as USB clock source
-  * @retval None
-  */
-void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)
-{
-    1468:	b480      	push	{r7}
-    146a:	b083      	sub	sp, #12
-    146c:	af00      	add	r7, sp, #0
-    146e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource));
-
-  *(__IO uint32_t *) CFGR_USBPRE_BB = RCC_USBCLKSource;
-    1470:	4a03      	ldr	r2, [pc, #12]	; (1480 <RCC_USBCLKConfig+0x18>)
-    1472:	687b      	ldr	r3, [r7, #4]
-    1474:	6013      	str	r3, [r2, #0]
-}
-    1476:	bf00      	nop
-    1478:	370c      	adds	r7, #12
-    147a:	46bd      	mov	sp, r7
-    147c:	bc80      	pop	{r7}
-    147e:	4770      	bx	lr
-    1480:	424200d8 	.word	0x424200d8
-
-00001484 <RCC_ADCCLKConfig>:
-  *     @arg RCC_PCLK2_Div6: ADC clock = PCLK2/6
-  *     @arg RCC_PCLK2_Div8: ADC clock = PCLK2/8
-  * @retval None
-  */
-void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
-{
-    1484:	b480      	push	{r7}
-    1486:	b085      	sub	sp, #20
-    1488:	af00      	add	r7, sp, #0
-    148a:	6078      	str	r0, [r7, #4]
-  uint32_t tmpreg = 0;
-    148c:	2300      	movs	r3, #0
-    148e:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
-  tmpreg = RCC->CFGR;
-    1490:	4b09      	ldr	r3, [pc, #36]	; (14b8 <RCC_ADCCLKConfig+0x34>)
-    1492:	685b      	ldr	r3, [r3, #4]
-    1494:	60fb      	str	r3, [r7, #12]
-  /* Clear ADCPRE[1:0] bits */
-  tmpreg &= CFGR_ADCPRE_Reset_Mask;
-    1496:	68fb      	ldr	r3, [r7, #12]
-    1498:	f423 4340 	bic.w	r3, r3, #49152	; 0xc000
-    149c:	60fb      	str	r3, [r7, #12]
-  /* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
-  tmpreg |= RCC_PCLK2;
-    149e:	68fa      	ldr	r2, [r7, #12]
-    14a0:	687b      	ldr	r3, [r7, #4]
-    14a2:	4313      	orrs	r3, r2
-    14a4:	60fb      	str	r3, [r7, #12]
-  /* Store the new value */
-  RCC->CFGR = tmpreg;
-    14a6:	4a04      	ldr	r2, [pc, #16]	; (14b8 <RCC_ADCCLKConfig+0x34>)
-    14a8:	68fb      	ldr	r3, [r7, #12]
-    14aa:	6053      	str	r3, [r2, #4]
-}
-    14ac:	bf00      	nop
-    14ae:	3714      	adds	r7, #20
-    14b0:	46bd      	mov	sp, r7
-    14b2:	bc80      	pop	{r7}
-    14b4:	4770      	bx	lr
-    14b6:	bf00      	nop
-    14b8:	40021000 	.word	0x40021000
-
-000014bc <RCC_LSEConfig>:
-  *     @arg RCC_LSE_ON: LSE oscillator ON
-  *     @arg RCC_LSE_Bypass: LSE oscillator bypassed with external clock
-  * @retval None
-  */
-void RCC_LSEConfig(uint8_t RCC_LSE)
-{
-    14bc:	b480      	push	{r7}
-    14be:	b083      	sub	sp, #12
-    14c0:	af00      	add	r7, sp, #0
-    14c2:	4603      	mov	r3, r0
-    14c4:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_RCC_LSE(RCC_LSE));
-  /* Reset LSEON and LSEBYP bits before configuring the LSE ------------------*/
-  /* Reset LSEON bit */
-  *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
-    14c6:	4b0c      	ldr	r3, [pc, #48]	; (14f8 <RCC_LSEConfig+0x3c>)
-    14c8:	2200      	movs	r2, #0
-    14ca:	701a      	strb	r2, [r3, #0]
-  /* Reset LSEBYP bit */
-  *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_OFF;
-    14cc:	4b0a      	ldr	r3, [pc, #40]	; (14f8 <RCC_LSEConfig+0x3c>)
-    14ce:	2200      	movs	r2, #0
-    14d0:	701a      	strb	r2, [r3, #0]
-  /* Configure LSE (RCC_LSE_OFF is already covered by the code section above) */
-  switch(RCC_LSE)
-    14d2:	79fb      	ldrb	r3, [r7, #7]
-    14d4:	2b01      	cmp	r3, #1
-    14d6:	d002      	beq.n	14de <RCC_LSEConfig+0x22>
-    14d8:	2b04      	cmp	r3, #4
-    14da:	d004      	beq.n	14e6 <RCC_LSEConfig+0x2a>
-      /* Set LSEBYP and LSEON bits */
-      *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
-      break;            
-      
-    default:
-      break;      
-    14dc:	e007      	b.n	14ee <RCC_LSEConfig+0x32>
-      *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_ON;
-    14de:	4b06      	ldr	r3, [pc, #24]	; (14f8 <RCC_LSEConfig+0x3c>)
-    14e0:	2201      	movs	r2, #1
-    14e2:	701a      	strb	r2, [r3, #0]
-      break;
-    14e4:	e003      	b.n	14ee <RCC_LSEConfig+0x32>
-      *(__IO uint8_t *) BDCR_ADDRESS = RCC_LSE_Bypass | RCC_LSE_ON;
-    14e6:	4b04      	ldr	r3, [pc, #16]	; (14f8 <RCC_LSEConfig+0x3c>)
-    14e8:	2205      	movs	r2, #5
-    14ea:	701a      	strb	r2, [r3, #0]
-      break;            
-    14ec:	bf00      	nop
-  }
-}
-    14ee:	bf00      	nop
-    14f0:	370c      	adds	r7, #12
-    14f2:	46bd      	mov	sp, r7
-    14f4:	bc80      	pop	{r7}
-    14f6:	4770      	bx	lr
-    14f8:	40021020 	.word	0x40021020
-
-000014fc <RCC_LSICmd>:
-  * @note   LSI can not be disabled if the IWDG is running.
-  * @param  NewState: new state of the LSI. This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_LSICmd(FunctionalState NewState)
-{
-    14fc:	b480      	push	{r7}
-    14fe:	b083      	sub	sp, #12
-    1500:	af00      	add	r7, sp, #0
-    1502:	4603      	mov	r3, r0
-    1504:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  *(__IO uint32_t *) CSR_LSION_BB = (uint32_t)NewState;
-    1506:	4a04      	ldr	r2, [pc, #16]	; (1518 <RCC_LSICmd+0x1c>)
-    1508:	79fb      	ldrb	r3, [r7, #7]
-    150a:	6013      	str	r3, [r2, #0]
-}
-    150c:	bf00      	nop
-    150e:	370c      	adds	r7, #12
-    1510:	46bd      	mov	sp, r7
-    1512:	bc80      	pop	{r7}
-    1514:	4770      	bx	lr
-    1516:	bf00      	nop
-    1518:	42420480 	.word	0x42420480
-
-0000151c <RCC_RTCCLKConfig>:
-  *     @arg RCC_RTCCLKSource_LSI: LSI selected as RTC clock
-  *     @arg RCC_RTCCLKSource_HSE_Div128: HSE clock divided by 128 selected as RTC clock
-  * @retval None
-  */
-void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource)
-{
-    151c:	b480      	push	{r7}
-    151e:	b083      	sub	sp, #12
-    1520:	af00      	add	r7, sp, #0
-    1522:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource));
-  /* Select the RTC clock source */
-  RCC->BDCR |= RCC_RTCCLKSource;
-    1524:	4b05      	ldr	r3, [pc, #20]	; (153c <RCC_RTCCLKConfig+0x20>)
-    1526:	6a1a      	ldr	r2, [r3, #32]
-    1528:	4904      	ldr	r1, [pc, #16]	; (153c <RCC_RTCCLKConfig+0x20>)
-    152a:	687b      	ldr	r3, [r7, #4]
-    152c:	4313      	orrs	r3, r2
-    152e:	620b      	str	r3, [r1, #32]
-}
-    1530:	bf00      	nop
-    1532:	370c      	adds	r7, #12
-    1534:	46bd      	mov	sp, r7
-    1536:	bc80      	pop	{r7}
-    1538:	4770      	bx	lr
-    153a:	bf00      	nop
-    153c:	40021000 	.word	0x40021000
-
-00001540 <RCC_RTCCLKCmd>:
-  * @note   This function must be used only after the RTC clock was selected using the RCC_RTCCLKConfig function.
-  * @param  NewState: new state of the RTC clock. This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_RTCCLKCmd(FunctionalState NewState)
-{
-    1540:	b480      	push	{r7}
-    1542:	b083      	sub	sp, #12
-    1544:	af00      	add	r7, sp, #0
-    1546:	4603      	mov	r3, r0
-    1548:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  *(__IO uint32_t *) BDCR_RTCEN_BB = (uint32_t)NewState;
-    154a:	4a04      	ldr	r2, [pc, #16]	; (155c <RCC_RTCCLKCmd+0x1c>)
-    154c:	79fb      	ldrb	r3, [r7, #7]
-    154e:	6013      	str	r3, [r2, #0]
-}
-    1550:	bf00      	nop
-    1552:	370c      	adds	r7, #12
-    1554:	46bd      	mov	sp, r7
-    1556:	bc80      	pop	{r7}
-    1558:	4770      	bx	lr
-    155a:	bf00      	nop
-    155c:	4242043c 	.word	0x4242043c
-
-00001560 <RCC_GetClocksFreq>:
-  * @note   The result of this function could be not correct when using 
-  *         fractional value for HSE crystal.  
-  * @retval None
-  */
-void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
-{
-    1560:	b480      	push	{r7}
-    1562:	b087      	sub	sp, #28
-    1564:	af00      	add	r7, sp, #0
-    1566:	6078      	str	r0, [r7, #4]
-  uint32_t tmp = 0, pllmull = 0, pllsource = 0, presc = 0;
-    1568:	2300      	movs	r3, #0
-    156a:	617b      	str	r3, [r7, #20]
-    156c:	2300      	movs	r3, #0
-    156e:	613b      	str	r3, [r7, #16]
-    1570:	2300      	movs	r3, #0
-    1572:	60fb      	str	r3, [r7, #12]
-    1574:	2300      	movs	r3, #0
-    1576:	60bb      	str	r3, [r7, #8]
-#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
-  uint32_t prediv1factor = 0;
-#endif
-    
-  /* Get SYSCLK source -------------------------------------------------------*/
-  tmp = RCC->CFGR & CFGR_SWS_Mask;
-    1578:	4b4f      	ldr	r3, [pc, #316]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    157a:	685b      	ldr	r3, [r3, #4]
-    157c:	f003 030c 	and.w	r3, r3, #12
-    1580:	617b      	str	r3, [r7, #20]
-  
-  switch (tmp)
-    1582:	697b      	ldr	r3, [r7, #20]
-    1584:	2b08      	cmp	r3, #8
-    1586:	d011      	beq.n	15ac <RCC_GetClocksFreq+0x4c>
-    1588:	697b      	ldr	r3, [r7, #20]
-    158a:	2b08      	cmp	r3, #8
-    158c:	d83a      	bhi.n	1604 <RCC_GetClocksFreq+0xa4>
-    158e:	697b      	ldr	r3, [r7, #20]
-    1590:	2b00      	cmp	r3, #0
-    1592:	d003      	beq.n	159c <RCC_GetClocksFreq+0x3c>
-    1594:	697b      	ldr	r3, [r7, #20]
-    1596:	2b04      	cmp	r3, #4
-    1598:	d004      	beq.n	15a4 <RCC_GetClocksFreq+0x44>
-    159a:	e033      	b.n	1604 <RCC_GetClocksFreq+0xa4>
-  {
-    case 0x00:  /* HSI used as system clock */
-      RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
-    159c:	687b      	ldr	r3, [r7, #4]
-    159e:	4a47      	ldr	r2, [pc, #284]	; (16bc <RCC_GetClocksFreq+0x15c>)
-    15a0:	601a      	str	r2, [r3, #0]
-      break;
-    15a2:	e033      	b.n	160c <RCC_GetClocksFreq+0xac>
-    case 0x04:  /* HSE used as system clock */
-      RCC_Clocks->SYSCLK_Frequency = HSE_VALUE;
-    15a4:	687b      	ldr	r3, [r7, #4]
-    15a6:	4a45      	ldr	r2, [pc, #276]	; (16bc <RCC_GetClocksFreq+0x15c>)
-    15a8:	601a      	str	r2, [r3, #0]
-      break;
-    15aa:	e02f      	b.n	160c <RCC_GetClocksFreq+0xac>
-    case 0x08:  /* PLL used as system clock */
-
-      /* Get PLL clock source and multiplication factor ----------------------*/
-      pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
-    15ac:	4b42      	ldr	r3, [pc, #264]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    15ae:	685b      	ldr	r3, [r3, #4]
-    15b0:	f403 1370 	and.w	r3, r3, #3932160	; 0x3c0000
-    15b4:	613b      	str	r3, [r7, #16]
-      pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;
-    15b6:	4b40      	ldr	r3, [pc, #256]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    15b8:	685b      	ldr	r3, [r3, #4]
-    15ba:	f403 3380 	and.w	r3, r3, #65536	; 0x10000
-    15be:	60fb      	str	r3, [r7, #12]
-      
-#ifndef STM32F10X_CL      
-      pllmull = ( pllmull >> 18) + 2;
-    15c0:	693b      	ldr	r3, [r7, #16]
-    15c2:	0c9b      	lsrs	r3, r3, #18
-    15c4:	3302      	adds	r3, #2
-    15c6:	613b      	str	r3, [r7, #16]
-      
-      if (pllsource == 0x00)
-    15c8:	68fb      	ldr	r3, [r7, #12]
-    15ca:	2b00      	cmp	r3, #0
-    15cc:	d106      	bne.n	15dc <RCC_GetClocksFreq+0x7c>
-      {/* HSI oscillator clock divided by 2 selected as PLL clock entry */
-        RCC_Clocks->SYSCLK_Frequency = (HSI_VALUE >> 1) * pllmull;
-    15ce:	693b      	ldr	r3, [r7, #16]
-    15d0:	4a3b      	ldr	r2, [pc, #236]	; (16c0 <RCC_GetClocksFreq+0x160>)
-    15d2:	fb02 f203 	mul.w	r2, r2, r3
-    15d6:	687b      	ldr	r3, [r7, #4]
-    15d8:	601a      	str	r2, [r3, #0]
-          pll2mull = ((RCC->CFGR2 & CFGR2_PLL2MUL) >> 8 ) + 2; 
-          RCC_Clocks->SYSCLK_Frequency = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                         
-        }
-      }
-#endif /* STM32F10X_CL */ 
-      break;
-    15da:	e017      	b.n	160c <RCC_GetClocksFreq+0xac>
-        if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (uint32_t)RESET)
-    15dc:	4b36      	ldr	r3, [pc, #216]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    15de:	685b      	ldr	r3, [r3, #4]
-    15e0:	f403 3300 	and.w	r3, r3, #131072	; 0x20000
-    15e4:	2b00      	cmp	r3, #0
-    15e6:	d006      	beq.n	15f6 <RCC_GetClocksFreq+0x96>
-          RCC_Clocks->SYSCLK_Frequency = (HSE_VALUE >> 1) * pllmull;
-    15e8:	693b      	ldr	r3, [r7, #16]
-    15ea:	4a35      	ldr	r2, [pc, #212]	; (16c0 <RCC_GetClocksFreq+0x160>)
-    15ec:	fb02 f203 	mul.w	r2, r2, r3
-    15f0:	687b      	ldr	r3, [r7, #4]
-    15f2:	601a      	str	r2, [r3, #0]
-      break;
-    15f4:	e00a      	b.n	160c <RCC_GetClocksFreq+0xac>
-          RCC_Clocks->SYSCLK_Frequency = HSE_VALUE * pllmull;
-    15f6:	693b      	ldr	r3, [r7, #16]
-    15f8:	4a30      	ldr	r2, [pc, #192]	; (16bc <RCC_GetClocksFreq+0x15c>)
-    15fa:	fb02 f203 	mul.w	r2, r2, r3
-    15fe:	687b      	ldr	r3, [r7, #4]
-    1600:	601a      	str	r2, [r3, #0]
-      break;
-    1602:	e003      	b.n	160c <RCC_GetClocksFreq+0xac>
-
-    default:
-      RCC_Clocks->SYSCLK_Frequency = HSI_VALUE;
-    1604:	687b      	ldr	r3, [r7, #4]
-    1606:	4a2d      	ldr	r2, [pc, #180]	; (16bc <RCC_GetClocksFreq+0x15c>)
-    1608:	601a      	str	r2, [r3, #0]
-      break;
-    160a:	bf00      	nop
-  }
-
-  /* Compute HCLK, PCLK1, PCLK2 and ADCCLK clocks frequencies ----------------*/
-  /* Get HCLK prescaler */
-  tmp = RCC->CFGR & CFGR_HPRE_Set_Mask;
-    160c:	4b2a      	ldr	r3, [pc, #168]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    160e:	685b      	ldr	r3, [r3, #4]
-    1610:	f003 03f0 	and.w	r3, r3, #240	; 0xf0
-    1614:	617b      	str	r3, [r7, #20]
-  tmp = tmp >> 4;
-    1616:	697b      	ldr	r3, [r7, #20]
-    1618:	091b      	lsrs	r3, r3, #4
-    161a:	617b      	str	r3, [r7, #20]
-  presc = APBAHBPrescTable[tmp];
-    161c:	4a29      	ldr	r2, [pc, #164]	; (16c4 <RCC_GetClocksFreq+0x164>)
-    161e:	697b      	ldr	r3, [r7, #20]
-    1620:	4413      	add	r3, r2
-    1622:	781b      	ldrb	r3, [r3, #0]
-    1624:	b2db      	uxtb	r3, r3
-    1626:	60bb      	str	r3, [r7, #8]
-  /* HCLK clock frequency */
-  RCC_Clocks->HCLK_Frequency = RCC_Clocks->SYSCLK_Frequency >> presc;
-    1628:	687b      	ldr	r3, [r7, #4]
-    162a:	681a      	ldr	r2, [r3, #0]
-    162c:	68bb      	ldr	r3, [r7, #8]
-    162e:	40da      	lsrs	r2, r3
-    1630:	687b      	ldr	r3, [r7, #4]
-    1632:	605a      	str	r2, [r3, #4]
-  /* Get PCLK1 prescaler */
-  tmp = RCC->CFGR & CFGR_PPRE1_Set_Mask;
-    1634:	4b20      	ldr	r3, [pc, #128]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    1636:	685b      	ldr	r3, [r3, #4]
-    1638:	f403 63e0 	and.w	r3, r3, #1792	; 0x700
-    163c:	617b      	str	r3, [r7, #20]
-  tmp = tmp >> 8;
-    163e:	697b      	ldr	r3, [r7, #20]
-    1640:	0a1b      	lsrs	r3, r3, #8
-    1642:	617b      	str	r3, [r7, #20]
-  presc = APBAHBPrescTable[tmp];
-    1644:	4a1f      	ldr	r2, [pc, #124]	; (16c4 <RCC_GetClocksFreq+0x164>)
-    1646:	697b      	ldr	r3, [r7, #20]
-    1648:	4413      	add	r3, r2
-    164a:	781b      	ldrb	r3, [r3, #0]
-    164c:	b2db      	uxtb	r3, r3
-    164e:	60bb      	str	r3, [r7, #8]
-  /* PCLK1 clock frequency */
-  RCC_Clocks->PCLK1_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
-    1650:	687b      	ldr	r3, [r7, #4]
-    1652:	685a      	ldr	r2, [r3, #4]
-    1654:	68bb      	ldr	r3, [r7, #8]
-    1656:	40da      	lsrs	r2, r3
-    1658:	687b      	ldr	r3, [r7, #4]
-    165a:	609a      	str	r2, [r3, #8]
-  /* Get PCLK2 prescaler */
-  tmp = RCC->CFGR & CFGR_PPRE2_Set_Mask;
-    165c:	4b16      	ldr	r3, [pc, #88]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    165e:	685b      	ldr	r3, [r3, #4]
-    1660:	f403 5360 	and.w	r3, r3, #14336	; 0x3800
-    1664:	617b      	str	r3, [r7, #20]
-  tmp = tmp >> 11;
-    1666:	697b      	ldr	r3, [r7, #20]
-    1668:	0adb      	lsrs	r3, r3, #11
-    166a:	617b      	str	r3, [r7, #20]
-  presc = APBAHBPrescTable[tmp];
-    166c:	4a15      	ldr	r2, [pc, #84]	; (16c4 <RCC_GetClocksFreq+0x164>)
-    166e:	697b      	ldr	r3, [r7, #20]
-    1670:	4413      	add	r3, r2
-    1672:	781b      	ldrb	r3, [r3, #0]
-    1674:	b2db      	uxtb	r3, r3
-    1676:	60bb      	str	r3, [r7, #8]
-  /* PCLK2 clock frequency */
-  RCC_Clocks->PCLK2_Frequency = RCC_Clocks->HCLK_Frequency >> presc;
-    1678:	687b      	ldr	r3, [r7, #4]
-    167a:	685a      	ldr	r2, [r3, #4]
-    167c:	68bb      	ldr	r3, [r7, #8]
-    167e:	40da      	lsrs	r2, r3
-    1680:	687b      	ldr	r3, [r7, #4]
-    1682:	60da      	str	r2, [r3, #12]
-  /* Get ADCCLK prescaler */
-  tmp = RCC->CFGR & CFGR_ADCPRE_Set_Mask;
-    1684:	4b0c      	ldr	r3, [pc, #48]	; (16b8 <RCC_GetClocksFreq+0x158>)
-    1686:	685b      	ldr	r3, [r3, #4]
-    1688:	f403 4340 	and.w	r3, r3, #49152	; 0xc000
-    168c:	617b      	str	r3, [r7, #20]
-  tmp = tmp >> 14;
-    168e:	697b      	ldr	r3, [r7, #20]
-    1690:	0b9b      	lsrs	r3, r3, #14
-    1692:	617b      	str	r3, [r7, #20]
-  presc = ADCPrescTable[tmp];
-    1694:	4a0c      	ldr	r2, [pc, #48]	; (16c8 <RCC_GetClocksFreq+0x168>)
-    1696:	697b      	ldr	r3, [r7, #20]
-    1698:	4413      	add	r3, r2
-    169a:	781b      	ldrb	r3, [r3, #0]
-    169c:	b2db      	uxtb	r3, r3
-    169e:	60bb      	str	r3, [r7, #8]
-  /* ADCCLK clock frequency */
-  RCC_Clocks->ADCCLK_Frequency = RCC_Clocks->PCLK2_Frequency / presc;
-    16a0:	687b      	ldr	r3, [r7, #4]
-    16a2:	68da      	ldr	r2, [r3, #12]
-    16a4:	68bb      	ldr	r3, [r7, #8]
-    16a6:	fbb2 f2f3 	udiv	r2, r2, r3
-    16aa:	687b      	ldr	r3, [r7, #4]
-    16ac:	611a      	str	r2, [r3, #16]
-}
-    16ae:	bf00      	nop
-    16b0:	371c      	adds	r7, #28
-    16b2:	46bd      	mov	sp, r7
-    16b4:	bc80      	pop	{r7}
-    16b6:	4770      	bx	lr
-    16b8:	40021000 	.word	0x40021000
-    16bc:	007a1200 	.word	0x007a1200
-    16c0:	003d0900 	.word	0x003d0900
-    16c4:	20000014 	.word	0x20000014
-    16c8:	20000024 	.word	0x20000024
-
-000016cc <RCC_AHBPeriphClockCmd>:
-  * @param  NewState: new state of the specified peripheral clock.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
-{
-    16cc:	b480      	push	{r7}
-    16ce:	b083      	sub	sp, #12
-    16d0:	af00      	add	r7, sp, #0
-    16d2:	6078      	str	r0, [r7, #4]
-    16d4:	460b      	mov	r3, r1
-    16d6:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-
-  if (NewState != DISABLE)
-    16d8:	78fb      	ldrb	r3, [r7, #3]
-    16da:	2b00      	cmp	r3, #0
-    16dc:	d006      	beq.n	16ec <RCC_AHBPeriphClockCmd+0x20>
-  {
-    RCC->AHBENR |= RCC_AHBPeriph;
-    16de:	4b09      	ldr	r3, [pc, #36]	; (1704 <RCC_AHBPeriphClockCmd+0x38>)
-    16e0:	695a      	ldr	r2, [r3, #20]
-    16e2:	4908      	ldr	r1, [pc, #32]	; (1704 <RCC_AHBPeriphClockCmd+0x38>)
-    16e4:	687b      	ldr	r3, [r7, #4]
-    16e6:	4313      	orrs	r3, r2
-    16e8:	614b      	str	r3, [r1, #20]
-  }
-  else
-  {
-    RCC->AHBENR &= ~RCC_AHBPeriph;
-  }
-}
-    16ea:	e006      	b.n	16fa <RCC_AHBPeriphClockCmd+0x2e>
-    RCC->AHBENR &= ~RCC_AHBPeriph;
-    16ec:	4b05      	ldr	r3, [pc, #20]	; (1704 <RCC_AHBPeriphClockCmd+0x38>)
-    16ee:	695a      	ldr	r2, [r3, #20]
-    16f0:	687b      	ldr	r3, [r7, #4]
-    16f2:	43db      	mvns	r3, r3
-    16f4:	4903      	ldr	r1, [pc, #12]	; (1704 <RCC_AHBPeriphClockCmd+0x38>)
-    16f6:	4013      	ands	r3, r2
-    16f8:	614b      	str	r3, [r1, #20]
-}
-    16fa:	bf00      	nop
-    16fc:	370c      	adds	r7, #12
-    16fe:	46bd      	mov	sp, r7
-    1700:	bc80      	pop	{r7}
-    1702:	4770      	bx	lr
-    1704:	40021000 	.word	0x40021000
-
-00001708 <RCC_APB2PeriphClockCmd>:
-  * @param  NewState: new state of the specified peripheral clock.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
-{
-    1708:	b480      	push	{r7}
-    170a:	b083      	sub	sp, #12
-    170c:	af00      	add	r7, sp, #0
-    170e:	6078      	str	r0, [r7, #4]
-    1710:	460b      	mov	r3, r1
-    1712:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    1714:	78fb      	ldrb	r3, [r7, #3]
-    1716:	2b00      	cmp	r3, #0
-    1718:	d006      	beq.n	1728 <RCC_APB2PeriphClockCmd+0x20>
-  {
-    RCC->APB2ENR |= RCC_APB2Periph;
-    171a:	4b09      	ldr	r3, [pc, #36]	; (1740 <RCC_APB2PeriphClockCmd+0x38>)
-    171c:	699a      	ldr	r2, [r3, #24]
-    171e:	4908      	ldr	r1, [pc, #32]	; (1740 <RCC_APB2PeriphClockCmd+0x38>)
-    1720:	687b      	ldr	r3, [r7, #4]
-    1722:	4313      	orrs	r3, r2
-    1724:	618b      	str	r3, [r1, #24]
-  }
-  else
-  {
-    RCC->APB2ENR &= ~RCC_APB2Periph;
-  }
-}
-    1726:	e006      	b.n	1736 <RCC_APB2PeriphClockCmd+0x2e>
-    RCC->APB2ENR &= ~RCC_APB2Periph;
-    1728:	4b05      	ldr	r3, [pc, #20]	; (1740 <RCC_APB2PeriphClockCmd+0x38>)
-    172a:	699a      	ldr	r2, [r3, #24]
-    172c:	687b      	ldr	r3, [r7, #4]
-    172e:	43db      	mvns	r3, r3
-    1730:	4903      	ldr	r1, [pc, #12]	; (1740 <RCC_APB2PeriphClockCmd+0x38>)
-    1732:	4013      	ands	r3, r2
-    1734:	618b      	str	r3, [r1, #24]
-}
-    1736:	bf00      	nop
-    1738:	370c      	adds	r7, #12
-    173a:	46bd      	mov	sp, r7
-    173c:	bc80      	pop	{r7}
-    173e:	4770      	bx	lr
-    1740:	40021000 	.word	0x40021000
-
-00001744 <RCC_APB1PeriphClockCmd>:
-  * @param  NewState: new state of the specified peripheral clock.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
-{
-    1744:	b480      	push	{r7}
-    1746:	b083      	sub	sp, #12
-    1748:	af00      	add	r7, sp, #0
-    174a:	6078      	str	r0, [r7, #4]
-    174c:	460b      	mov	r3, r1
-    174e:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    1750:	78fb      	ldrb	r3, [r7, #3]
-    1752:	2b00      	cmp	r3, #0
-    1754:	d006      	beq.n	1764 <RCC_APB1PeriphClockCmd+0x20>
-  {
-    RCC->APB1ENR |= RCC_APB1Periph;
-    1756:	4b09      	ldr	r3, [pc, #36]	; (177c <RCC_APB1PeriphClockCmd+0x38>)
-    1758:	69da      	ldr	r2, [r3, #28]
-    175a:	4908      	ldr	r1, [pc, #32]	; (177c <RCC_APB1PeriphClockCmd+0x38>)
-    175c:	687b      	ldr	r3, [r7, #4]
-    175e:	4313      	orrs	r3, r2
-    1760:	61cb      	str	r3, [r1, #28]
-  }
-  else
-  {
-    RCC->APB1ENR &= ~RCC_APB1Periph;
-  }
-}
-    1762:	e006      	b.n	1772 <RCC_APB1PeriphClockCmd+0x2e>
-    RCC->APB1ENR &= ~RCC_APB1Periph;
-    1764:	4b05      	ldr	r3, [pc, #20]	; (177c <RCC_APB1PeriphClockCmd+0x38>)
-    1766:	69da      	ldr	r2, [r3, #28]
-    1768:	687b      	ldr	r3, [r7, #4]
-    176a:	43db      	mvns	r3, r3
-    176c:	4903      	ldr	r1, [pc, #12]	; (177c <RCC_APB1PeriphClockCmd+0x38>)
-    176e:	4013      	ands	r3, r2
-    1770:	61cb      	str	r3, [r1, #28]
-}
-    1772:	bf00      	nop
-    1774:	370c      	adds	r7, #12
-    1776:	46bd      	mov	sp, r7
-    1778:	bc80      	pop	{r7}
-    177a:	4770      	bx	lr
-    177c:	40021000 	.word	0x40021000
-
-00001780 <RCC_APB2PeriphResetCmd>:
-  * @param  NewState: new state of the specified peripheral reset.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
-{
-    1780:	b480      	push	{r7}
-    1782:	b083      	sub	sp, #12
-    1784:	af00      	add	r7, sp, #0
-    1786:	6078      	str	r0, [r7, #4]
-    1788:	460b      	mov	r3, r1
-    178a:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    178c:	78fb      	ldrb	r3, [r7, #3]
-    178e:	2b00      	cmp	r3, #0
-    1790:	d006      	beq.n	17a0 <RCC_APB2PeriphResetCmd+0x20>
-  {
-    RCC->APB2RSTR |= RCC_APB2Periph;
-    1792:	4b09      	ldr	r3, [pc, #36]	; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
-    1794:	68da      	ldr	r2, [r3, #12]
-    1796:	4908      	ldr	r1, [pc, #32]	; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
-    1798:	687b      	ldr	r3, [r7, #4]
-    179a:	4313      	orrs	r3, r2
-    179c:	60cb      	str	r3, [r1, #12]
-  }
-  else
-  {
-    RCC->APB2RSTR &= ~RCC_APB2Periph;
-  }
-}
-    179e:	e006      	b.n	17ae <RCC_APB2PeriphResetCmd+0x2e>
-    RCC->APB2RSTR &= ~RCC_APB2Periph;
-    17a0:	4b05      	ldr	r3, [pc, #20]	; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
-    17a2:	68da      	ldr	r2, [r3, #12]
-    17a4:	687b      	ldr	r3, [r7, #4]
-    17a6:	43db      	mvns	r3, r3
-    17a8:	4903      	ldr	r1, [pc, #12]	; (17b8 <RCC_APB2PeriphResetCmd+0x38>)
-    17aa:	4013      	ands	r3, r2
-    17ac:	60cb      	str	r3, [r1, #12]
-}
-    17ae:	bf00      	nop
-    17b0:	370c      	adds	r7, #12
-    17b2:	46bd      	mov	sp, r7
-    17b4:	bc80      	pop	{r7}
-    17b6:	4770      	bx	lr
-    17b8:	40021000 	.word	0x40021000
-
-000017bc <RCC_APB1PeriphResetCmd>:
-  * @param  NewState: new state of the specified peripheral clock.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
-{
-    17bc:	b480      	push	{r7}
-    17be:	b083      	sub	sp, #12
-    17c0:	af00      	add	r7, sp, #0
-    17c2:	6078      	str	r0, [r7, #4]
-    17c4:	460b      	mov	r3, r1
-    17c6:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    17c8:	78fb      	ldrb	r3, [r7, #3]
-    17ca:	2b00      	cmp	r3, #0
-    17cc:	d006      	beq.n	17dc <RCC_APB1PeriphResetCmd+0x20>
-  {
-    RCC->APB1RSTR |= RCC_APB1Periph;
-    17ce:	4b09      	ldr	r3, [pc, #36]	; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
-    17d0:	691a      	ldr	r2, [r3, #16]
-    17d2:	4908      	ldr	r1, [pc, #32]	; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
-    17d4:	687b      	ldr	r3, [r7, #4]
-    17d6:	4313      	orrs	r3, r2
-    17d8:	610b      	str	r3, [r1, #16]
-  }
-  else
-  {
-    RCC->APB1RSTR &= ~RCC_APB1Periph;
-  }
-}
-    17da:	e006      	b.n	17ea <RCC_APB1PeriphResetCmd+0x2e>
-    RCC->APB1RSTR &= ~RCC_APB1Periph;
-    17dc:	4b05      	ldr	r3, [pc, #20]	; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
-    17de:	691a      	ldr	r2, [r3, #16]
-    17e0:	687b      	ldr	r3, [r7, #4]
-    17e2:	43db      	mvns	r3, r3
-    17e4:	4903      	ldr	r1, [pc, #12]	; (17f4 <RCC_APB1PeriphResetCmd+0x38>)
-    17e6:	4013      	ands	r3, r2
-    17e8:	610b      	str	r3, [r1, #16]
-}
-    17ea:	bf00      	nop
-    17ec:	370c      	adds	r7, #12
-    17ee:	46bd      	mov	sp, r7
-    17f0:	bc80      	pop	{r7}
-    17f2:	4770      	bx	lr
-    17f4:	40021000 	.word	0x40021000
-
-000017f8 <RCC_BackupResetCmd>:
-  * @param  NewState: new state of the Backup domain reset.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_BackupResetCmd(FunctionalState NewState)
-{
-    17f8:	b480      	push	{r7}
-    17fa:	b083      	sub	sp, #12
-    17fc:	af00      	add	r7, sp, #0
-    17fe:	4603      	mov	r3, r0
-    1800:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  *(__IO uint32_t *) BDCR_BDRST_BB = (uint32_t)NewState;
-    1802:	4a04      	ldr	r2, [pc, #16]	; (1814 <RCC_BackupResetCmd+0x1c>)
-    1804:	79fb      	ldrb	r3, [r7, #7]
-    1806:	6013      	str	r3, [r2, #0]
-}
-    1808:	bf00      	nop
-    180a:	370c      	adds	r7, #12
-    180c:	46bd      	mov	sp, r7
-    180e:	bc80      	pop	{r7}
-    1810:	4770      	bx	lr
-    1812:	bf00      	nop
-    1814:	42420440 	.word	0x42420440
-
-00001818 <RCC_ClockSecuritySystemCmd>:
-  * @param  NewState: new state of the Clock Security System..
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
-{
-    1818:	b480      	push	{r7}
-    181a:	b083      	sub	sp, #12
-    181c:	af00      	add	r7, sp, #0
-    181e:	4603      	mov	r3, r0
-    1820:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  *(__IO uint32_t *) CR_CSSON_BB = (uint32_t)NewState;
-    1822:	4a04      	ldr	r2, [pc, #16]	; (1834 <RCC_ClockSecuritySystemCmd+0x1c>)
-    1824:	79fb      	ldrb	r3, [r7, #7]
-    1826:	6013      	str	r3, [r2, #0]
-}
-    1828:	bf00      	nop
-    182a:	370c      	adds	r7, #12
-    182c:	46bd      	mov	sp, r7
-    182e:	bc80      	pop	{r7}
-    1830:	4770      	bx	lr
-    1832:	bf00      	nop
-    1834:	4242004c 	.word	0x4242004c
-
-00001838 <RCC_MCOConfig>:
-  *     @arg RCC_MCO_PLLCLK_Div2: PLL clock divided by 2 selected
-  *   
-  * @retval None
-  */
-void RCC_MCOConfig(uint8_t RCC_MCO)
-{
-    1838:	b480      	push	{r7}
-    183a:	b083      	sub	sp, #12
-    183c:	af00      	add	r7, sp, #0
-    183e:	4603      	mov	r3, r0
-    1840:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_RCC_MCO(RCC_MCO));
-
-  /* Perform Byte access to MCO bits to select the MCO source */
-  *(__IO uint8_t *) CFGR_BYTE4_ADDRESS = RCC_MCO;
-    1842:	4a04      	ldr	r2, [pc, #16]	; (1854 <RCC_MCOConfig+0x1c>)
-    1844:	79fb      	ldrb	r3, [r7, #7]
-    1846:	7013      	strb	r3, [r2, #0]
-}
-    1848:	bf00      	nop
-    184a:	370c      	adds	r7, #12
-    184c:	46bd      	mov	sp, r7
-    184e:	bc80      	pop	{r7}
-    1850:	4770      	bx	lr
-    1852:	bf00      	nop
-    1854:	40021007 	.word	0x40021007
-
-00001858 <RCC_GetFlagStatus>:
-  *     @arg RCC_FLAG_LPWRRST: Low Power reset
-  *   
-  * @retval The new state of RCC_FLAG (SET or RESET).
-  */
-FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
-{
-    1858:	b480      	push	{r7}
-    185a:	b087      	sub	sp, #28
-    185c:	af00      	add	r7, sp, #0
-    185e:	4603      	mov	r3, r0
-    1860:	71fb      	strb	r3, [r7, #7]
-  uint32_t tmp = 0;
-    1862:	2300      	movs	r3, #0
-    1864:	60fb      	str	r3, [r7, #12]
-  uint32_t statusreg = 0;
-    1866:	2300      	movs	r3, #0
-    1868:	617b      	str	r3, [r7, #20]
-  FlagStatus bitstatus = RESET;
-    186a:	2300      	movs	r3, #0
-    186c:	74fb      	strb	r3, [r7, #19]
-  /* Check the parameters */
-  assert_param(IS_RCC_FLAG(RCC_FLAG));
-
-  /* Get the RCC register index */
-  tmp = RCC_FLAG >> 5;
-    186e:	79fb      	ldrb	r3, [r7, #7]
-    1870:	095b      	lsrs	r3, r3, #5
-    1872:	b2db      	uxtb	r3, r3
-    1874:	60fb      	str	r3, [r7, #12]
-  if (tmp == 1)               /* The flag to check is in CR register */
-    1876:	68fb      	ldr	r3, [r7, #12]
-    1878:	2b01      	cmp	r3, #1
-    187a:	d103      	bne.n	1884 <RCC_GetFlagStatus+0x2c>
-  {
-    statusreg = RCC->CR;
-    187c:	4b12      	ldr	r3, [pc, #72]	; (18c8 <RCC_GetFlagStatus+0x70>)
-    187e:	681b      	ldr	r3, [r3, #0]
-    1880:	617b      	str	r3, [r7, #20]
-    1882:	e009      	b.n	1898 <RCC_GetFlagStatus+0x40>
-  }
-  else if (tmp == 2)          /* The flag to check is in BDCR register */
-    1884:	68fb      	ldr	r3, [r7, #12]
-    1886:	2b02      	cmp	r3, #2
-    1888:	d103      	bne.n	1892 <RCC_GetFlagStatus+0x3a>
-  {
-    statusreg = RCC->BDCR;
-    188a:	4b0f      	ldr	r3, [pc, #60]	; (18c8 <RCC_GetFlagStatus+0x70>)
-    188c:	6a1b      	ldr	r3, [r3, #32]
-    188e:	617b      	str	r3, [r7, #20]
-    1890:	e002      	b.n	1898 <RCC_GetFlagStatus+0x40>
-  }
-  else                       /* The flag to check is in CSR register */
-  {
-    statusreg = RCC->CSR;
-    1892:	4b0d      	ldr	r3, [pc, #52]	; (18c8 <RCC_GetFlagStatus+0x70>)
-    1894:	6a5b      	ldr	r3, [r3, #36]	; 0x24
-    1896:	617b      	str	r3, [r7, #20]
-  }
-
-  /* Get the flag position */
-  tmp = RCC_FLAG & FLAG_Mask;
-    1898:	79fb      	ldrb	r3, [r7, #7]
-    189a:	f003 031f 	and.w	r3, r3, #31
-    189e:	60fb      	str	r3, [r7, #12]
-  if ((statusreg & ((uint32_t)1 << tmp)) != (uint32_t)RESET)
-    18a0:	697a      	ldr	r2, [r7, #20]
-    18a2:	68fb      	ldr	r3, [r7, #12]
-    18a4:	fa22 f303 	lsr.w	r3, r2, r3
-    18a8:	f003 0301 	and.w	r3, r3, #1
-    18ac:	2b00      	cmp	r3, #0
-    18ae:	d002      	beq.n	18b6 <RCC_GetFlagStatus+0x5e>
-  {
-    bitstatus = SET;
-    18b0:	2301      	movs	r3, #1
-    18b2:	74fb      	strb	r3, [r7, #19]
-    18b4:	e001      	b.n	18ba <RCC_GetFlagStatus+0x62>
-  }
-  else
-  {
-    bitstatus = RESET;
-    18b6:	2300      	movs	r3, #0
-    18b8:	74fb      	strb	r3, [r7, #19]
-  }
-
-  /* Return the flag status */
-  return bitstatus;
-    18ba:	7cfb      	ldrb	r3, [r7, #19]
-}
-    18bc:	4618      	mov	r0, r3
-    18be:	371c      	adds	r7, #28
-    18c0:	46bd      	mov	sp, r7
-    18c2:	bc80      	pop	{r7}
-    18c4:	4770      	bx	lr
-    18c6:	bf00      	nop
-    18c8:	40021000 	.word	0x40021000
-
-000018cc <RCC_ClearFlag>:
-  *   RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST
-  * @param  None
-  * @retval None
-  */
-void RCC_ClearFlag(void)
-{
-    18cc:	b480      	push	{r7}
-    18ce:	af00      	add	r7, sp, #0
-  /* Set RMVF bit to clear the reset flags */
-  RCC->CSR |= CSR_RMVF_Set;
-    18d0:	4b04      	ldr	r3, [pc, #16]	; (18e4 <RCC_ClearFlag+0x18>)
-    18d2:	6a5b      	ldr	r3, [r3, #36]	; 0x24
-    18d4:	4a03      	ldr	r2, [pc, #12]	; (18e4 <RCC_ClearFlag+0x18>)
-    18d6:	f043 7380 	orr.w	r3, r3, #16777216	; 0x1000000
-    18da:	6253      	str	r3, [r2, #36]	; 0x24
-}
-    18dc:	bf00      	nop
-    18de:	46bd      	mov	sp, r7
-    18e0:	bc80      	pop	{r7}
-    18e2:	4770      	bx	lr
-    18e4:	40021000 	.word	0x40021000
-
-000018e8 <RCC_GetITStatus>:
-  *     @arg RCC_IT_CSS: Clock Security System interrupt
-  *   
-  * @retval The new state of RCC_IT (SET or RESET).
-  */
-ITStatus RCC_GetITStatus(uint8_t RCC_IT)
-{
-    18e8:	b480      	push	{r7}
-    18ea:	b085      	sub	sp, #20
-    18ec:	af00      	add	r7, sp, #0
-    18ee:	4603      	mov	r3, r0
-    18f0:	71fb      	strb	r3, [r7, #7]
-  ITStatus bitstatus = RESET;
-    18f2:	2300      	movs	r3, #0
-    18f4:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_RCC_GET_IT(RCC_IT));
-
-  /* Check the status of the specified RCC interrupt */
-  if ((RCC->CIR & RCC_IT) != (uint32_t)RESET)
-    18f6:	4b08      	ldr	r3, [pc, #32]	; (1918 <RCC_GetITStatus+0x30>)
-    18f8:	689a      	ldr	r2, [r3, #8]
-    18fa:	79fb      	ldrb	r3, [r7, #7]
-    18fc:	4013      	ands	r3, r2
-    18fe:	2b00      	cmp	r3, #0
-    1900:	d002      	beq.n	1908 <RCC_GetITStatus+0x20>
-  {
-    bitstatus = SET;
-    1902:	2301      	movs	r3, #1
-    1904:	73fb      	strb	r3, [r7, #15]
-    1906:	e001      	b.n	190c <RCC_GetITStatus+0x24>
-  }
-  else
-  {
-    bitstatus = RESET;
-    1908:	2300      	movs	r3, #0
-    190a:	73fb      	strb	r3, [r7, #15]
-  }
-
-  /* Return the RCC_IT status */
-  return  bitstatus;
-    190c:	7bfb      	ldrb	r3, [r7, #15]
-}
-    190e:	4618      	mov	r0, r3
-    1910:	3714      	adds	r7, #20
-    1912:	46bd      	mov	sp, r7
-    1914:	bc80      	pop	{r7}
-    1916:	4770      	bx	lr
-    1918:	40021000 	.word	0x40021000
-
-0000191c <RCC_ClearITPendingBit>:
-  *   
-  *     @arg RCC_IT_CSS: Clock Security System interrupt
-  * @retval None
-  */
-void RCC_ClearITPendingBit(uint8_t RCC_IT)
-{
-    191c:	b480      	push	{r7}
-    191e:	b083      	sub	sp, #12
-    1920:	af00      	add	r7, sp, #0
-    1922:	4603      	mov	r3, r0
-    1924:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_RCC_CLEAR_IT(RCC_IT));
-
-  /* Perform Byte access to RCC_CIR[23:16] bits to clear the selected interrupt
-     pending bits */
-  *(__IO uint8_t *) CIR_BYTE3_ADDRESS = RCC_IT;
-    1926:	4a04      	ldr	r2, [pc, #16]	; (1938 <RCC_ClearITPendingBit+0x1c>)
-    1928:	79fb      	ldrb	r3, [r7, #7]
-    192a:	7013      	strb	r3, [r2, #0]
-}
-    192c:	bf00      	nop
-    192e:	370c      	adds	r7, #12
-    1930:	46bd      	mov	sp, r7
-    1932:	bc80      	pop	{r7}
-    1934:	4770      	bx	lr
-    1936:	bf00      	nop
-    1938:	4002100a 	.word	0x4002100a
-
-0000193c <GPIO_DeInit>:
-  * @brief  Deinitializes the GPIOx peripheral registers to their default reset values.
-  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
-  * @retval None
-  */
-void GPIO_DeInit(GPIO_TypeDef* GPIOx)
-{
-    193c:	b580      	push	{r7, lr}
-    193e:	b082      	sub	sp, #8
-    1940:	af00      	add	r7, sp, #0
-    1942:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  
-  if (GPIOx == GPIOA)
-    1944:	687b      	ldr	r3, [r7, #4]
-    1946:	4a2f      	ldr	r2, [pc, #188]	; (1a04 <GPIO_DeInit+0xc8>)
-    1948:	4293      	cmp	r3, r2
-    194a:	d108      	bne.n	195e <GPIO_DeInit+0x22>
-  {
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
-    194c:	2101      	movs	r1, #1
-    194e:	2004      	movs	r0, #4
-    1950:	f7ff ff16 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
-    1954:	2100      	movs	r1, #0
-    1956:	2004      	movs	r0, #4
-    1958:	f7ff ff12 	bl	1780 <RCC_APB2PeriphResetCmd>
-    {
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
-    }
-  }
-}
-    195c:	e04e      	b.n	19fc <GPIO_DeInit+0xc0>
-  else if (GPIOx == GPIOB)
-    195e:	687b      	ldr	r3, [r7, #4]
-    1960:	4a29      	ldr	r2, [pc, #164]	; (1a08 <GPIO_DeInit+0xcc>)
-    1962:	4293      	cmp	r3, r2
-    1964:	d108      	bne.n	1978 <GPIO_DeInit+0x3c>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
-    1966:	2101      	movs	r1, #1
-    1968:	2008      	movs	r0, #8
-    196a:	f7ff ff09 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
-    196e:	2100      	movs	r1, #0
-    1970:	2008      	movs	r0, #8
-    1972:	f7ff ff05 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    1976:	e041      	b.n	19fc <GPIO_DeInit+0xc0>
-  else if (GPIOx == GPIOC)
-    1978:	687b      	ldr	r3, [r7, #4]
-    197a:	4a24      	ldr	r2, [pc, #144]	; (1a0c <GPIO_DeInit+0xd0>)
-    197c:	4293      	cmp	r3, r2
-    197e:	d108      	bne.n	1992 <GPIO_DeInit+0x56>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
-    1980:	2101      	movs	r1, #1
-    1982:	2010      	movs	r0, #16
-    1984:	f7ff fefc 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
-    1988:	2100      	movs	r1, #0
-    198a:	2010      	movs	r0, #16
-    198c:	f7ff fef8 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    1990:	e034      	b.n	19fc <GPIO_DeInit+0xc0>
-  else if (GPIOx == GPIOD)
-    1992:	687b      	ldr	r3, [r7, #4]
-    1994:	4a1e      	ldr	r2, [pc, #120]	; (1a10 <GPIO_DeInit+0xd4>)
-    1996:	4293      	cmp	r3, r2
-    1998:	d108      	bne.n	19ac <GPIO_DeInit+0x70>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
-    199a:	2101      	movs	r1, #1
-    199c:	2020      	movs	r0, #32
-    199e:	f7ff feef 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
-    19a2:	2100      	movs	r1, #0
-    19a4:	2020      	movs	r0, #32
-    19a6:	f7ff feeb 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    19aa:	e027      	b.n	19fc <GPIO_DeInit+0xc0>
-  else if (GPIOx == GPIOE)
-    19ac:	687b      	ldr	r3, [r7, #4]
-    19ae:	4a19      	ldr	r2, [pc, #100]	; (1a14 <GPIO_DeInit+0xd8>)
-    19b0:	4293      	cmp	r3, r2
-    19b2:	d108      	bne.n	19c6 <GPIO_DeInit+0x8a>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
-    19b4:	2101      	movs	r1, #1
-    19b6:	2040      	movs	r0, #64	; 0x40
-    19b8:	f7ff fee2 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
-    19bc:	2100      	movs	r1, #0
-    19be:	2040      	movs	r0, #64	; 0x40
-    19c0:	f7ff fede 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    19c4:	e01a      	b.n	19fc <GPIO_DeInit+0xc0>
-  else if (GPIOx == GPIOF)
-    19c6:	687b      	ldr	r3, [r7, #4]
-    19c8:	4a13      	ldr	r2, [pc, #76]	; (1a18 <GPIO_DeInit+0xdc>)
-    19ca:	4293      	cmp	r3, r2
-    19cc:	d108      	bne.n	19e0 <GPIO_DeInit+0xa4>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);
-    19ce:	2101      	movs	r1, #1
-    19d0:	2080      	movs	r0, #128	; 0x80
-    19d2:	f7ff fed5 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE);
-    19d6:	2100      	movs	r1, #0
-    19d8:	2080      	movs	r0, #128	; 0x80
-    19da:	f7ff fed1 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    19de:	e00d      	b.n	19fc <GPIO_DeInit+0xc0>
-    if (GPIOx == GPIOG)
-    19e0:	687b      	ldr	r3, [r7, #4]
-    19e2:	4a0e      	ldr	r2, [pc, #56]	; (1a1c <GPIO_DeInit+0xe0>)
-    19e4:	4293      	cmp	r3, r2
-    19e6:	d109      	bne.n	19fc <GPIO_DeInit+0xc0>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
-    19e8:	2101      	movs	r1, #1
-    19ea:	f44f 7080 	mov.w	r0, #256	; 0x100
-    19ee:	f7ff fec7 	bl	1780 <RCC_APB2PeriphResetCmd>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
-    19f2:	2100      	movs	r1, #0
-    19f4:	f44f 7080 	mov.w	r0, #256	; 0x100
-    19f8:	f7ff fec2 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    19fc:	bf00      	nop
-    19fe:	3708      	adds	r7, #8
-    1a00:	46bd      	mov	sp, r7
-    1a02:	bd80      	pop	{r7, pc}
-    1a04:	40010800 	.word	0x40010800
-    1a08:	40010c00 	.word	0x40010c00
-    1a0c:	40011000 	.word	0x40011000
-    1a10:	40011400 	.word	0x40011400
-    1a14:	40011800 	.word	0x40011800
-    1a18:	40011c00 	.word	0x40011c00
-    1a1c:	40012000 	.word	0x40012000
-
-00001a20 <GPIO_AFIODeInit>:
-  *   and EXTI configuration) registers to their default reset values.
-  * @param  None
-  * @retval None
-  */
-void GPIO_AFIODeInit(void)
-{
-    1a20:	b580      	push	{r7, lr}
-    1a22:	af00      	add	r7, sp, #0
-  RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
-    1a24:	2101      	movs	r1, #1
-    1a26:	2001      	movs	r0, #1
-    1a28:	f7ff feaa 	bl	1780 <RCC_APB2PeriphResetCmd>
-  RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
-    1a2c:	2100      	movs	r1, #0
-    1a2e:	2001      	movs	r0, #1
-    1a30:	f7ff fea6 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    1a34:	bf00      	nop
-    1a36:	bd80      	pop	{r7, pc}
-
-00001a38 <GPIO_Init>:
-  * @param  GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
-  *         contains the configuration information for the specified GPIO peripheral.
-  * @retval None
-  */
-void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
-{
-    1a38:	b480      	push	{r7}
-    1a3a:	b089      	sub	sp, #36	; 0x24
-    1a3c:	af00      	add	r7, sp, #0
-    1a3e:	6078      	str	r0, [r7, #4]
-    1a40:	6039      	str	r1, [r7, #0]
-  uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
-    1a42:	2300      	movs	r3, #0
-    1a44:	61fb      	str	r3, [r7, #28]
-    1a46:	2300      	movs	r3, #0
-    1a48:	613b      	str	r3, [r7, #16]
-    1a4a:	2300      	movs	r3, #0
-    1a4c:	61bb      	str	r3, [r7, #24]
-    1a4e:	2300      	movs	r3, #0
-    1a50:	60fb      	str	r3, [r7, #12]
-  uint32_t tmpreg = 0x00, pinmask = 0x00;
-    1a52:	2300      	movs	r3, #0
-    1a54:	617b      	str	r3, [r7, #20]
-    1a56:	2300      	movs	r3, #0
-    1a58:	60bb      	str	r3, [r7, #8]
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
-  assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  
-  
-/*---------------------------- GPIO Mode Configuration -----------------------*/
-  currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
-    1a5a:	683b      	ldr	r3, [r7, #0]
-    1a5c:	78db      	ldrb	r3, [r3, #3]
-    1a5e:	f003 030f 	and.w	r3, r3, #15
-    1a62:	61fb      	str	r3, [r7, #28]
-  if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
-    1a64:	683b      	ldr	r3, [r7, #0]
-    1a66:	78db      	ldrb	r3, [r3, #3]
-    1a68:	f003 0310 	and.w	r3, r3, #16
-    1a6c:	2b00      	cmp	r3, #0
-    1a6e:	d005      	beq.n	1a7c <GPIO_Init+0x44>
-  { 
-    /* Check the parameters */
-    assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
-    /* Output mode */
-    currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
-    1a70:	683b      	ldr	r3, [r7, #0]
-    1a72:	789b      	ldrb	r3, [r3, #2]
-    1a74:	461a      	mov	r2, r3
-    1a76:	69fb      	ldr	r3, [r7, #28]
-    1a78:	4313      	orrs	r3, r2
-    1a7a:	61fb      	str	r3, [r7, #28]
-  }
-/*---------------------------- GPIO CRL Configuration ------------------------*/
-  /* Configure the eight low port pins */
-  if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
-    1a7c:	683b      	ldr	r3, [r7, #0]
-    1a7e:	881b      	ldrh	r3, [r3, #0]
-    1a80:	b2db      	uxtb	r3, r3
-    1a82:	2b00      	cmp	r3, #0
-    1a84:	d044      	beq.n	1b10 <GPIO_Init+0xd8>
-  {
-    tmpreg = GPIOx->CRL;
-    1a86:	687b      	ldr	r3, [r7, #4]
-    1a88:	681b      	ldr	r3, [r3, #0]
-    1a8a:	617b      	str	r3, [r7, #20]
-    for (pinpos = 0x00; pinpos < 0x08; pinpos++)
-    1a8c:	2300      	movs	r3, #0
-    1a8e:	61bb      	str	r3, [r7, #24]
-    1a90:	e038      	b.n	1b04 <GPIO_Init+0xcc>
-    {
-      pos = ((uint32_t)0x01) << pinpos;
-    1a92:	2201      	movs	r2, #1
-    1a94:	69bb      	ldr	r3, [r7, #24]
-    1a96:	fa02 f303 	lsl.w	r3, r2, r3
-    1a9a:	60fb      	str	r3, [r7, #12]
-      /* Get the port pins position */
-      currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
-    1a9c:	683b      	ldr	r3, [r7, #0]
-    1a9e:	881b      	ldrh	r3, [r3, #0]
-    1aa0:	461a      	mov	r2, r3
-    1aa2:	68fb      	ldr	r3, [r7, #12]
-    1aa4:	4013      	ands	r3, r2
-    1aa6:	613b      	str	r3, [r7, #16]
-      if (currentpin == pos)
-    1aa8:	693a      	ldr	r2, [r7, #16]
-    1aaa:	68fb      	ldr	r3, [r7, #12]
-    1aac:	429a      	cmp	r2, r3
-    1aae:	d126      	bne.n	1afe <GPIO_Init+0xc6>
-      {
-        pos = pinpos << 2;
-    1ab0:	69bb      	ldr	r3, [r7, #24]
-    1ab2:	009b      	lsls	r3, r3, #2
-    1ab4:	60fb      	str	r3, [r7, #12]
-        /* Clear the corresponding low control register bits */
-        pinmask = ((uint32_t)0x0F) << pos;
-    1ab6:	220f      	movs	r2, #15
-    1ab8:	68fb      	ldr	r3, [r7, #12]
-    1aba:	fa02 f303 	lsl.w	r3, r2, r3
-    1abe:	60bb      	str	r3, [r7, #8]
-        tmpreg &= ~pinmask;
-    1ac0:	68bb      	ldr	r3, [r7, #8]
-    1ac2:	43db      	mvns	r3, r3
-    1ac4:	697a      	ldr	r2, [r7, #20]
-    1ac6:	4013      	ands	r3, r2
-    1ac8:	617b      	str	r3, [r7, #20]
-        /* Write the mode configuration in the corresponding bits */
-        tmpreg |= (currentmode << pos);
-    1aca:	69fa      	ldr	r2, [r7, #28]
-    1acc:	68fb      	ldr	r3, [r7, #12]
-    1ace:	fa02 f303 	lsl.w	r3, r2, r3
-    1ad2:	697a      	ldr	r2, [r7, #20]
-    1ad4:	4313      	orrs	r3, r2
-    1ad6:	617b      	str	r3, [r7, #20]
-        /* Reset the corresponding ODR bit */
-        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
-    1ad8:	683b      	ldr	r3, [r7, #0]
-    1ada:	78db      	ldrb	r3, [r3, #3]
-    1adc:	2b28      	cmp	r3, #40	; 0x28
-    1ade:	d105      	bne.n	1aec <GPIO_Init+0xb4>
-        {
-          GPIOx->BRR = (((uint32_t)0x01) << pinpos);
-    1ae0:	2201      	movs	r2, #1
-    1ae2:	69bb      	ldr	r3, [r7, #24]
-    1ae4:	409a      	lsls	r2, r3
-    1ae6:	687b      	ldr	r3, [r7, #4]
-    1ae8:	615a      	str	r2, [r3, #20]
-    1aea:	e008      	b.n	1afe <GPIO_Init+0xc6>
-        }
-        else
-        {
-          /* Set the corresponding ODR bit */
-          if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
-    1aec:	683b      	ldr	r3, [r7, #0]
-    1aee:	78db      	ldrb	r3, [r3, #3]
-    1af0:	2b48      	cmp	r3, #72	; 0x48
-    1af2:	d104      	bne.n	1afe <GPIO_Init+0xc6>
-          {
-            GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
-    1af4:	2201      	movs	r2, #1
-    1af6:	69bb      	ldr	r3, [r7, #24]
-    1af8:	409a      	lsls	r2, r3
-    1afa:	687b      	ldr	r3, [r7, #4]
-    1afc:	611a      	str	r2, [r3, #16]
-    for (pinpos = 0x00; pinpos < 0x08; pinpos++)
-    1afe:	69bb      	ldr	r3, [r7, #24]
-    1b00:	3301      	adds	r3, #1
-    1b02:	61bb      	str	r3, [r7, #24]
-    1b04:	69bb      	ldr	r3, [r7, #24]
-    1b06:	2b07      	cmp	r3, #7
-    1b08:	d9c3      	bls.n	1a92 <GPIO_Init+0x5a>
-          }
-        }
-      }
-    }
-    GPIOx->CRL = tmpreg;
-    1b0a:	687b      	ldr	r3, [r7, #4]
-    1b0c:	697a      	ldr	r2, [r7, #20]
-    1b0e:	601a      	str	r2, [r3, #0]
-  }
-/*---------------------------- GPIO CRH Configuration ------------------------*/
-  /* Configure the eight high port pins */
-  if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
-    1b10:	683b      	ldr	r3, [r7, #0]
-    1b12:	881b      	ldrh	r3, [r3, #0]
-    1b14:	2bff      	cmp	r3, #255	; 0xff
-    1b16:	d946      	bls.n	1ba6 <GPIO_Init+0x16e>
-  {
-    tmpreg = GPIOx->CRH;
-    1b18:	687b      	ldr	r3, [r7, #4]
-    1b1a:	685b      	ldr	r3, [r3, #4]
-    1b1c:	617b      	str	r3, [r7, #20]
-    for (pinpos = 0x00; pinpos < 0x08; pinpos++)
-    1b1e:	2300      	movs	r3, #0
-    1b20:	61bb      	str	r3, [r7, #24]
-    1b22:	e03a      	b.n	1b9a <GPIO_Init+0x162>
-    {
-      pos = (((uint32_t)0x01) << (pinpos + 0x08));
-    1b24:	69bb      	ldr	r3, [r7, #24]
-    1b26:	3308      	adds	r3, #8
-    1b28:	2201      	movs	r2, #1
-    1b2a:	fa02 f303 	lsl.w	r3, r2, r3
-    1b2e:	60fb      	str	r3, [r7, #12]
-      /* Get the port pins position */
-      currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
-    1b30:	683b      	ldr	r3, [r7, #0]
-    1b32:	881b      	ldrh	r3, [r3, #0]
-    1b34:	461a      	mov	r2, r3
-    1b36:	68fb      	ldr	r3, [r7, #12]
-    1b38:	4013      	ands	r3, r2
-    1b3a:	613b      	str	r3, [r7, #16]
-      if (currentpin == pos)
-    1b3c:	693a      	ldr	r2, [r7, #16]
-    1b3e:	68fb      	ldr	r3, [r7, #12]
-    1b40:	429a      	cmp	r2, r3
-    1b42:	d127      	bne.n	1b94 <GPIO_Init+0x15c>
-      {
-        pos = pinpos << 2;
-    1b44:	69bb      	ldr	r3, [r7, #24]
-    1b46:	009b      	lsls	r3, r3, #2
-    1b48:	60fb      	str	r3, [r7, #12]
-        /* Clear the corresponding high control register bits */
-        pinmask = ((uint32_t)0x0F) << pos;
-    1b4a:	220f      	movs	r2, #15
-    1b4c:	68fb      	ldr	r3, [r7, #12]
-    1b4e:	fa02 f303 	lsl.w	r3, r2, r3
-    1b52:	60bb      	str	r3, [r7, #8]
-        tmpreg &= ~pinmask;
-    1b54:	68bb      	ldr	r3, [r7, #8]
-    1b56:	43db      	mvns	r3, r3
-    1b58:	697a      	ldr	r2, [r7, #20]
-    1b5a:	4013      	ands	r3, r2
-    1b5c:	617b      	str	r3, [r7, #20]
-        /* Write the mode configuration in the corresponding bits */
-        tmpreg |= (currentmode << pos);
-    1b5e:	69fa      	ldr	r2, [r7, #28]
-    1b60:	68fb      	ldr	r3, [r7, #12]
-    1b62:	fa02 f303 	lsl.w	r3, r2, r3
-    1b66:	697a      	ldr	r2, [r7, #20]
-    1b68:	4313      	orrs	r3, r2
-    1b6a:	617b      	str	r3, [r7, #20]
-        /* Reset the corresponding ODR bit */
-        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
-    1b6c:	683b      	ldr	r3, [r7, #0]
-    1b6e:	78db      	ldrb	r3, [r3, #3]
-    1b70:	2b28      	cmp	r3, #40	; 0x28
-    1b72:	d105      	bne.n	1b80 <GPIO_Init+0x148>
-        {
-          GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
-    1b74:	69bb      	ldr	r3, [r7, #24]
-    1b76:	3308      	adds	r3, #8
-    1b78:	2201      	movs	r2, #1
-    1b7a:	409a      	lsls	r2, r3
-    1b7c:	687b      	ldr	r3, [r7, #4]
-    1b7e:	615a      	str	r2, [r3, #20]
-        }
-        /* Set the corresponding ODR bit */
-        if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
-    1b80:	683b      	ldr	r3, [r7, #0]
-    1b82:	78db      	ldrb	r3, [r3, #3]
-    1b84:	2b48      	cmp	r3, #72	; 0x48
-    1b86:	d105      	bne.n	1b94 <GPIO_Init+0x15c>
-        {
-          GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
-    1b88:	69bb      	ldr	r3, [r7, #24]
-    1b8a:	3308      	adds	r3, #8
-    1b8c:	2201      	movs	r2, #1
-    1b8e:	409a      	lsls	r2, r3
-    1b90:	687b      	ldr	r3, [r7, #4]
-    1b92:	611a      	str	r2, [r3, #16]
-    for (pinpos = 0x00; pinpos < 0x08; pinpos++)
-    1b94:	69bb      	ldr	r3, [r7, #24]
-    1b96:	3301      	adds	r3, #1
-    1b98:	61bb      	str	r3, [r7, #24]
-    1b9a:	69bb      	ldr	r3, [r7, #24]
-    1b9c:	2b07      	cmp	r3, #7
-    1b9e:	d9c1      	bls.n	1b24 <GPIO_Init+0xec>
-        }
-      }
-    }
-    GPIOx->CRH = tmpreg;
-    1ba0:	687b      	ldr	r3, [r7, #4]
-    1ba2:	697a      	ldr	r2, [r7, #20]
-    1ba4:	605a      	str	r2, [r3, #4]
-  }
-}
-    1ba6:	bf00      	nop
-    1ba8:	3724      	adds	r7, #36	; 0x24
-    1baa:	46bd      	mov	sp, r7
-    1bac:	bc80      	pop	{r7}
-    1bae:	4770      	bx	lr
-
-00001bb0 <GPIO_StructInit>:
-  * @param  GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
-{
-    1bb0:	b480      	push	{r7}
-    1bb2:	b083      	sub	sp, #12
-    1bb4:	af00      	add	r7, sp, #0
-    1bb6:	6078      	str	r0, [r7, #4]
-  /* Reset GPIO init structure parameters values */
-  GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
-    1bb8:	687b      	ldr	r3, [r7, #4]
-    1bba:	f64f 72ff 	movw	r2, #65535	; 0xffff
-    1bbe:	801a      	strh	r2, [r3, #0]
-  GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
-    1bc0:	687b      	ldr	r3, [r7, #4]
-    1bc2:	2202      	movs	r2, #2
-    1bc4:	709a      	strb	r2, [r3, #2]
-  GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
-    1bc6:	687b      	ldr	r3, [r7, #4]
-    1bc8:	2204      	movs	r2, #4
-    1bca:	70da      	strb	r2, [r3, #3]
-}
-    1bcc:	bf00      	nop
-    1bce:	370c      	adds	r7, #12
-    1bd0:	46bd      	mov	sp, r7
-    1bd2:	bc80      	pop	{r7}
-    1bd4:	4770      	bx	lr
-
-00001bd6 <GPIO_ReadInputDataBit>:
-  * @param  GPIO_Pin:  specifies the port bit to read.
-  *   This parameter can be GPIO_Pin_x where x can be (0..15).
-  * @retval The input port pin value.
-  */
-uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    1bd6:	b480      	push	{r7}
-    1bd8:	b085      	sub	sp, #20
-    1bda:	af00      	add	r7, sp, #0
-    1bdc:	6078      	str	r0, [r7, #4]
-    1bde:	460b      	mov	r3, r1
-    1be0:	807b      	strh	r3, [r7, #2]
-  uint8_t bitstatus = 0x00;
-    1be2:	2300      	movs	r3, #0
-    1be4:	73fb      	strb	r3, [r7, #15]
-  
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
-  
-  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
-    1be6:	687b      	ldr	r3, [r7, #4]
-    1be8:	689a      	ldr	r2, [r3, #8]
-    1bea:	887b      	ldrh	r3, [r7, #2]
-    1bec:	4013      	ands	r3, r2
-    1bee:	2b00      	cmp	r3, #0
-    1bf0:	d002      	beq.n	1bf8 <GPIO_ReadInputDataBit+0x22>
-  {
-    bitstatus = (uint8_t)Bit_SET;
-    1bf2:	2301      	movs	r3, #1
-    1bf4:	73fb      	strb	r3, [r7, #15]
-    1bf6:	e001      	b.n	1bfc <GPIO_ReadInputDataBit+0x26>
-  }
-  else
-  {
-    bitstatus = (uint8_t)Bit_RESET;
-    1bf8:	2300      	movs	r3, #0
-    1bfa:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    1bfc:	7bfb      	ldrb	r3, [r7, #15]
-}
-    1bfe:	4618      	mov	r0, r3
-    1c00:	3714      	adds	r7, #20
-    1c02:	46bd      	mov	sp, r7
-    1c04:	bc80      	pop	{r7}
-    1c06:	4770      	bx	lr
-
-00001c08 <GPIO_ReadInputData>:
-  * @brief  Reads the specified GPIO input data port.
-  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
-  * @retval GPIO input data port value.
-  */
-uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
-{
-    1c08:	b480      	push	{r7}
-    1c0a:	b083      	sub	sp, #12
-    1c0c:	af00      	add	r7, sp, #0
-    1c0e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  
-  return ((uint16_t)GPIOx->IDR);
-    1c10:	687b      	ldr	r3, [r7, #4]
-    1c12:	689b      	ldr	r3, [r3, #8]
-    1c14:	b29b      	uxth	r3, r3
-}
-    1c16:	4618      	mov	r0, r3
-    1c18:	370c      	adds	r7, #12
-    1c1a:	46bd      	mov	sp, r7
-    1c1c:	bc80      	pop	{r7}
-    1c1e:	4770      	bx	lr
-
-00001c20 <GPIO_ReadOutputDataBit>:
-  * @param  GPIO_Pin:  specifies the port bit to read.
-  *   This parameter can be GPIO_Pin_x where x can be (0..15).
-  * @retval The output port pin value.
-  */
-uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    1c20:	b480      	push	{r7}
-    1c22:	b085      	sub	sp, #20
-    1c24:	af00      	add	r7, sp, #0
-    1c26:	6078      	str	r0, [r7, #4]
-    1c28:	460b      	mov	r3, r1
-    1c2a:	807b      	strh	r3, [r7, #2]
-  uint8_t bitstatus = 0x00;
-    1c2c:	2300      	movs	r3, #0
-    1c2e:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GET_GPIO_PIN(GPIO_Pin)); 
-  
-  if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
-    1c30:	687b      	ldr	r3, [r7, #4]
-    1c32:	68da      	ldr	r2, [r3, #12]
-    1c34:	887b      	ldrh	r3, [r7, #2]
-    1c36:	4013      	ands	r3, r2
-    1c38:	2b00      	cmp	r3, #0
-    1c3a:	d002      	beq.n	1c42 <GPIO_ReadOutputDataBit+0x22>
-  {
-    bitstatus = (uint8_t)Bit_SET;
-    1c3c:	2301      	movs	r3, #1
-    1c3e:	73fb      	strb	r3, [r7, #15]
-    1c40:	e001      	b.n	1c46 <GPIO_ReadOutputDataBit+0x26>
-  }
-  else
-  {
-    bitstatus = (uint8_t)Bit_RESET;
-    1c42:	2300      	movs	r3, #0
-    1c44:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    1c46:	7bfb      	ldrb	r3, [r7, #15]
-}
-    1c48:	4618      	mov	r0, r3
-    1c4a:	3714      	adds	r7, #20
-    1c4c:	46bd      	mov	sp, r7
-    1c4e:	bc80      	pop	{r7}
-    1c50:	4770      	bx	lr
-
-00001c52 <GPIO_ReadOutputData>:
-  * @brief  Reads the specified GPIO output data port.
-  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
-  * @retval GPIO output data port value.
-  */
-uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
-{
-    1c52:	b480      	push	{r7}
-    1c54:	b083      	sub	sp, #12
-    1c56:	af00      	add	r7, sp, #0
-    1c58:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-    
-  return ((uint16_t)GPIOx->ODR);
-    1c5a:	687b      	ldr	r3, [r7, #4]
-    1c5c:	68db      	ldr	r3, [r3, #12]
-    1c5e:	b29b      	uxth	r3, r3
-}
-    1c60:	4618      	mov	r0, r3
-    1c62:	370c      	adds	r7, #12
-    1c64:	46bd      	mov	sp, r7
-    1c66:	bc80      	pop	{r7}
-    1c68:	4770      	bx	lr
-
-00001c6a <GPIO_SetBits>:
-  * @param  GPIO_Pin: specifies the port bits to be written.
-  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
-  * @retval None
-  */
-void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    1c6a:	b480      	push	{r7}
-    1c6c:	b083      	sub	sp, #12
-    1c6e:	af00      	add	r7, sp, #0
-    1c70:	6078      	str	r0, [r7, #4]
-    1c72:	460b      	mov	r3, r1
-    1c74:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GPIO_PIN(GPIO_Pin));
-  
-  GPIOx->BSRR = GPIO_Pin;
-    1c76:	887a      	ldrh	r2, [r7, #2]
-    1c78:	687b      	ldr	r3, [r7, #4]
-    1c7a:	611a      	str	r2, [r3, #16]
-}
-    1c7c:	bf00      	nop
-    1c7e:	370c      	adds	r7, #12
-    1c80:	46bd      	mov	sp, r7
-    1c82:	bc80      	pop	{r7}
-    1c84:	4770      	bx	lr
-
-00001c86 <GPIO_ResetBits>:
-  * @param  GPIO_Pin: specifies the port bits to be written.
-  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
-  * @retval None
-  */
-void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    1c86:	b480      	push	{r7}
-    1c88:	b083      	sub	sp, #12
-    1c8a:	af00      	add	r7, sp, #0
-    1c8c:	6078      	str	r0, [r7, #4]
-    1c8e:	460b      	mov	r3, r1
-    1c90:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GPIO_PIN(GPIO_Pin));
-  
-  GPIOx->BRR = GPIO_Pin;
-    1c92:	887a      	ldrh	r2, [r7, #2]
-    1c94:	687b      	ldr	r3, [r7, #4]
-    1c96:	615a      	str	r2, [r3, #20]
-}
-    1c98:	bf00      	nop
-    1c9a:	370c      	adds	r7, #12
-    1c9c:	46bd      	mov	sp, r7
-    1c9e:	bc80      	pop	{r7}
-    1ca0:	4770      	bx	lr
-
-00001ca2 <GPIO_WriteBit>:
-  *     @arg Bit_RESET: to clear the port pin
-  *     @arg Bit_SET: to set the port pin
-  * @retval None
-  */
-void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
-{
-    1ca2:	b480      	push	{r7}
-    1ca4:	b083      	sub	sp, #12
-    1ca6:	af00      	add	r7, sp, #0
-    1ca8:	6078      	str	r0, [r7, #4]
-    1caa:	460b      	mov	r3, r1
-    1cac:	807b      	strh	r3, [r7, #2]
-    1cae:	4613      	mov	r3, r2
-    1cb0:	707b      	strb	r3, [r7, #1]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
-  assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
-  
-  if (BitVal != Bit_RESET)
-    1cb2:	787b      	ldrb	r3, [r7, #1]
-    1cb4:	2b00      	cmp	r3, #0
-    1cb6:	d003      	beq.n	1cc0 <GPIO_WriteBit+0x1e>
-  {
-    GPIOx->BSRR = GPIO_Pin;
-    1cb8:	887a      	ldrh	r2, [r7, #2]
-    1cba:	687b      	ldr	r3, [r7, #4]
-    1cbc:	611a      	str	r2, [r3, #16]
-  }
-  else
-  {
-    GPIOx->BRR = GPIO_Pin;
-  }
-}
-    1cbe:	e002      	b.n	1cc6 <GPIO_WriteBit+0x24>
-    GPIOx->BRR = GPIO_Pin;
-    1cc0:	887a      	ldrh	r2, [r7, #2]
-    1cc2:	687b      	ldr	r3, [r7, #4]
-    1cc4:	615a      	str	r2, [r3, #20]
-}
-    1cc6:	bf00      	nop
-    1cc8:	370c      	adds	r7, #12
-    1cca:	46bd      	mov	sp, r7
-    1ccc:	bc80      	pop	{r7}
-    1cce:	4770      	bx	lr
-
-00001cd0 <GPIO_Write>:
-  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
-  * @param  PortVal: specifies the value to be written to the port output data register.
-  * @retval None
-  */
-void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
-{
-    1cd0:	b480      	push	{r7}
-    1cd2:	b083      	sub	sp, #12
-    1cd4:	af00      	add	r7, sp, #0
-    1cd6:	6078      	str	r0, [r7, #4]
-    1cd8:	460b      	mov	r3, r1
-    1cda:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  
-  GPIOx->ODR = PortVal;
-    1cdc:	887a      	ldrh	r2, [r7, #2]
-    1cde:	687b      	ldr	r3, [r7, #4]
-    1ce0:	60da      	str	r2, [r3, #12]
-}
-    1ce2:	bf00      	nop
-    1ce4:	370c      	adds	r7, #12
-    1ce6:	46bd      	mov	sp, r7
-    1ce8:	bc80      	pop	{r7}
-    1cea:	4770      	bx	lr
-
-00001cec <GPIO_PinLockConfig>:
-  * @param  GPIO_Pin: specifies the port bit to be written.
-  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
-  * @retval None
-  */
-void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
-{
-    1cec:	b480      	push	{r7}
-    1cee:	b085      	sub	sp, #20
-    1cf0:	af00      	add	r7, sp, #0
-    1cf2:	6078      	str	r0, [r7, #4]
-    1cf4:	460b      	mov	r3, r1
-    1cf6:	807b      	strh	r3, [r7, #2]
-  uint32_t tmp = 0x00010000;
-    1cf8:	f44f 3380 	mov.w	r3, #65536	; 0x10000
-    1cfc:	60fb      	str	r3, [r7, #12]
-  
-  /* Check the parameters */
-  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
-  assert_param(IS_GPIO_PIN(GPIO_Pin));
-  
-  tmp |= GPIO_Pin;
-    1cfe:	887b      	ldrh	r3, [r7, #2]
-    1d00:	68fa      	ldr	r2, [r7, #12]
-    1d02:	4313      	orrs	r3, r2
-    1d04:	60fb      	str	r3, [r7, #12]
-  /* Set LCKK bit */
-  GPIOx->LCKR = tmp;
-    1d06:	687b      	ldr	r3, [r7, #4]
-    1d08:	68fa      	ldr	r2, [r7, #12]
-    1d0a:	619a      	str	r2, [r3, #24]
-  /* Reset LCKK bit */
-  GPIOx->LCKR =  GPIO_Pin;
-    1d0c:	887a      	ldrh	r2, [r7, #2]
-    1d0e:	687b      	ldr	r3, [r7, #4]
-    1d10:	619a      	str	r2, [r3, #24]
-  /* Set LCKK bit */
-  GPIOx->LCKR = tmp;
-    1d12:	687b      	ldr	r3, [r7, #4]
-    1d14:	68fa      	ldr	r2, [r7, #12]
-    1d16:	619a      	str	r2, [r3, #24]
-  /* Read LCKK bit*/
-  tmp = GPIOx->LCKR;
-    1d18:	687b      	ldr	r3, [r7, #4]
-    1d1a:	699b      	ldr	r3, [r3, #24]
-    1d1c:	60fb      	str	r3, [r7, #12]
-  /* Read LCKK bit*/
-  tmp = GPIOx->LCKR;
-    1d1e:	687b      	ldr	r3, [r7, #4]
-    1d20:	699b      	ldr	r3, [r3, #24]
-    1d22:	60fb      	str	r3, [r7, #12]
-}
-    1d24:	bf00      	nop
-    1d26:	3714      	adds	r7, #20
-    1d28:	46bd      	mov	sp, r7
-    1d2a:	bc80      	pop	{r7}
-    1d2c:	4770      	bx	lr
-
-00001d2e <GPIO_EventOutputConfig>:
-  * @param  GPIO_PinSource: specifies the pin for the Event output.
-  *   This parameter can be GPIO_PinSourcex where x can be (0..15).
-  * @retval None
-  */
-void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
-{
-    1d2e:	b480      	push	{r7}
-    1d30:	b085      	sub	sp, #20
-    1d32:	af00      	add	r7, sp, #0
-    1d34:	4603      	mov	r3, r0
-    1d36:	460a      	mov	r2, r1
-    1d38:	71fb      	strb	r3, [r7, #7]
-    1d3a:	4613      	mov	r3, r2
-    1d3c:	71bb      	strb	r3, [r7, #6]
-  uint32_t tmpreg = 0x00;
-    1d3e:	2300      	movs	r3, #0
-    1d40:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
-  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
-    
-  tmpreg = AFIO->EVCR;
-    1d42:	4b0c      	ldr	r3, [pc, #48]	; (1d74 <GPIO_EventOutputConfig+0x46>)
-    1d44:	681b      	ldr	r3, [r3, #0]
-    1d46:	60fb      	str	r3, [r7, #12]
-  /* Clear the PORT[6:4] and PIN[3:0] bits */
-  tmpreg &= EVCR_PORTPINCONFIG_MASK;
-    1d48:	68fa      	ldr	r2, [r7, #12]
-    1d4a:	f64f 7380 	movw	r3, #65408	; 0xff80
-    1d4e:	4013      	ands	r3, r2
-    1d50:	60fb      	str	r3, [r7, #12]
-  tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
-    1d52:	79fb      	ldrb	r3, [r7, #7]
-    1d54:	011b      	lsls	r3, r3, #4
-    1d56:	68fa      	ldr	r2, [r7, #12]
-    1d58:	4313      	orrs	r3, r2
-    1d5a:	60fb      	str	r3, [r7, #12]
-  tmpreg |= GPIO_PinSource;
-    1d5c:	79bb      	ldrb	r3, [r7, #6]
-    1d5e:	68fa      	ldr	r2, [r7, #12]
-    1d60:	4313      	orrs	r3, r2
-    1d62:	60fb      	str	r3, [r7, #12]
-  AFIO->EVCR = tmpreg;
-    1d64:	4a03      	ldr	r2, [pc, #12]	; (1d74 <GPIO_EventOutputConfig+0x46>)
-    1d66:	68fb      	ldr	r3, [r7, #12]
-    1d68:	6013      	str	r3, [r2, #0]
-}
-    1d6a:	bf00      	nop
-    1d6c:	3714      	adds	r7, #20
-    1d6e:	46bd      	mov	sp, r7
-    1d70:	bc80      	pop	{r7}
-    1d72:	4770      	bx	lr
-    1d74:	40010000 	.word	0x40010000
-
-00001d78 <GPIO_EventOutputCmd>:
-  * @param  NewState: new state of the Event output.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void GPIO_EventOutputCmd(FunctionalState NewState)
-{
-    1d78:	b480      	push	{r7}
-    1d7a:	b083      	sub	sp, #12
-    1d7c:	af00      	add	r7, sp, #0
-    1d7e:	4603      	mov	r3, r0
-    1d80:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  *(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState;
-    1d82:	4a04      	ldr	r2, [pc, #16]	; (1d94 <GPIO_EventOutputCmd+0x1c>)
-    1d84:	79fb      	ldrb	r3, [r7, #7]
-    1d86:	6013      	str	r3, [r2, #0]
-}
-    1d88:	bf00      	nop
-    1d8a:	370c      	adds	r7, #12
-    1d8c:	46bd      	mov	sp, r7
-    1d8e:	bc80      	pop	{r7}
-    1d90:	4770      	bx	lr
-    1d92:	bf00      	nop
-    1d94:	4220001c 	.word	0x4220001c
-
-00001d98 <GPIO_PinRemapConfig>:
-  * @param  NewState: new state of the port pin remapping.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
-{
-    1d98:	b480      	push	{r7}
-    1d9a:	b087      	sub	sp, #28
-    1d9c:	af00      	add	r7, sp, #0
-    1d9e:	6078      	str	r0, [r7, #4]
-    1da0:	460b      	mov	r3, r1
-    1da2:	70fb      	strb	r3, [r7, #3]
-  uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
-    1da4:	2300      	movs	r3, #0
-    1da6:	613b      	str	r3, [r7, #16]
-    1da8:	2300      	movs	r3, #0
-    1daa:	60fb      	str	r3, [r7, #12]
-    1dac:	2300      	movs	r3, #0
-    1dae:	617b      	str	r3, [r7, #20]
-    1db0:	2300      	movs	r3, #0
-    1db2:	60bb      	str	r3, [r7, #8]
-
-  /* Check the parameters */
-  assert_param(IS_GPIO_REMAP(GPIO_Remap));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));  
-  
-  if((GPIO_Remap & 0x80000000) == 0x80000000)
-    1db4:	687b      	ldr	r3, [r7, #4]
-    1db6:	2b00      	cmp	r3, #0
-    1db8:	da03      	bge.n	1dc2 <GPIO_PinRemapConfig+0x2a>
-  {
-    tmpreg = AFIO->MAPR2;
-    1dba:	4b2e      	ldr	r3, [pc, #184]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1dbc:	69db      	ldr	r3, [r3, #28]
-    1dbe:	617b      	str	r3, [r7, #20]
-    1dc0:	e002      	b.n	1dc8 <GPIO_PinRemapConfig+0x30>
-  }
-  else
-  {
-    tmpreg = AFIO->MAPR;
-    1dc2:	4b2c      	ldr	r3, [pc, #176]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1dc4:	685b      	ldr	r3, [r3, #4]
-    1dc6:	617b      	str	r3, [r7, #20]
-  }
-
-  tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
-    1dc8:	687b      	ldr	r3, [r7, #4]
-    1dca:	0c1b      	lsrs	r3, r3, #16
-    1dcc:	f003 030f 	and.w	r3, r3, #15
-    1dd0:	60bb      	str	r3, [r7, #8]
-  tmp = GPIO_Remap & LSB_MASK;
-    1dd2:	687b      	ldr	r3, [r7, #4]
-    1dd4:	b29b      	uxth	r3, r3
-    1dd6:	613b      	str	r3, [r7, #16]
-
-  if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
-    1dd8:	687b      	ldr	r3, [r7, #4]
-    1dda:	f403 1340 	and.w	r3, r3, #3145728	; 0x300000
-    1dde:	f5b3 1f40 	cmp.w	r3, #3145728	; 0x300000
-    1de2:	d10a      	bne.n	1dfa <GPIO_PinRemapConfig+0x62>
-  {
-    tmpreg &= DBGAFR_SWJCFG_MASK;
-    1de4:	697b      	ldr	r3, [r7, #20]
-    1de6:	f023 6370 	bic.w	r3, r3, #251658240	; 0xf000000
-    1dea:	617b      	str	r3, [r7, #20]
-    AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
-    1dec:	4b21      	ldr	r3, [pc, #132]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1dee:	685b      	ldr	r3, [r3, #4]
-    1df0:	4a20      	ldr	r2, [pc, #128]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1df2:	f023 6370 	bic.w	r3, r3, #251658240	; 0xf000000
-    1df6:	6053      	str	r3, [r2, #4]
-    1df8:	e021      	b.n	1e3e <GPIO_PinRemapConfig+0xa6>
-  }
-  else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
-    1dfa:	687b      	ldr	r3, [r7, #4]
-    1dfc:	f403 1380 	and.w	r3, r3, #1048576	; 0x100000
-    1e00:	2b00      	cmp	r3, #0
-    1e02:	d00e      	beq.n	1e22 <GPIO_PinRemapConfig+0x8a>
-  {
-    tmp1 = ((uint32_t)0x03) << tmpmask;
-    1e04:	2203      	movs	r2, #3
-    1e06:	68bb      	ldr	r3, [r7, #8]
-    1e08:	fa02 f303 	lsl.w	r3, r2, r3
-    1e0c:	60fb      	str	r3, [r7, #12]
-    tmpreg &= ~tmp1;
-    1e0e:	68fb      	ldr	r3, [r7, #12]
-    1e10:	43db      	mvns	r3, r3
-    1e12:	697a      	ldr	r2, [r7, #20]
-    1e14:	4013      	ands	r3, r2
-    1e16:	617b      	str	r3, [r7, #20]
-    tmpreg |= ~DBGAFR_SWJCFG_MASK;
-    1e18:	697b      	ldr	r3, [r7, #20]
-    1e1a:	f043 6370 	orr.w	r3, r3, #251658240	; 0xf000000
-    1e1e:	617b      	str	r3, [r7, #20]
-    1e20:	e00d      	b.n	1e3e <GPIO_PinRemapConfig+0xa6>
-  }
-  else
-  {
-    tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
-    1e22:	687b      	ldr	r3, [r7, #4]
-    1e24:	0d5b      	lsrs	r3, r3, #21
-    1e26:	011b      	lsls	r3, r3, #4
-    1e28:	693a      	ldr	r2, [r7, #16]
-    1e2a:	fa02 f303 	lsl.w	r3, r2, r3
-    1e2e:	43db      	mvns	r3, r3
-    1e30:	697a      	ldr	r2, [r7, #20]
-    1e32:	4013      	ands	r3, r2
-    1e34:	617b      	str	r3, [r7, #20]
-    tmpreg |= ~DBGAFR_SWJCFG_MASK;
-    1e36:	697b      	ldr	r3, [r7, #20]
-    1e38:	f043 6370 	orr.w	r3, r3, #251658240	; 0xf000000
-    1e3c:	617b      	str	r3, [r7, #20]
-  }
-
-  if (NewState != DISABLE)
-    1e3e:	78fb      	ldrb	r3, [r7, #3]
-    1e40:	2b00      	cmp	r3, #0
-    1e42:	d008      	beq.n	1e56 <GPIO_PinRemapConfig+0xbe>
-  {
-    tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
-    1e44:	687b      	ldr	r3, [r7, #4]
-    1e46:	0d5b      	lsrs	r3, r3, #21
-    1e48:	011b      	lsls	r3, r3, #4
-    1e4a:	693a      	ldr	r2, [r7, #16]
-    1e4c:	fa02 f303 	lsl.w	r3, r2, r3
-    1e50:	697a      	ldr	r2, [r7, #20]
-    1e52:	4313      	orrs	r3, r2
-    1e54:	617b      	str	r3, [r7, #20]
-  }
-
-  if((GPIO_Remap & 0x80000000) == 0x80000000)
-    1e56:	687b      	ldr	r3, [r7, #4]
-    1e58:	2b00      	cmp	r3, #0
-    1e5a:	da03      	bge.n	1e64 <GPIO_PinRemapConfig+0xcc>
-  {
-    AFIO->MAPR2 = tmpreg;
-    1e5c:	4a05      	ldr	r2, [pc, #20]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1e5e:	697b      	ldr	r3, [r7, #20]
-    1e60:	61d3      	str	r3, [r2, #28]
-  }
-  else
-  {
-    AFIO->MAPR = tmpreg;
-  }  
-}
-    1e62:	e002      	b.n	1e6a <GPIO_PinRemapConfig+0xd2>
-    AFIO->MAPR = tmpreg;
-    1e64:	4a03      	ldr	r2, [pc, #12]	; (1e74 <GPIO_PinRemapConfig+0xdc>)
-    1e66:	697b      	ldr	r3, [r7, #20]
-    1e68:	6053      	str	r3, [r2, #4]
-}
-    1e6a:	bf00      	nop
-    1e6c:	371c      	adds	r7, #28
-    1e6e:	46bd      	mov	sp, r7
-    1e70:	bc80      	pop	{r7}
-    1e72:	4770      	bx	lr
-    1e74:	40010000 	.word	0x40010000
-
-00001e78 <GPIO_EXTILineConfig>:
-  * @param  GPIO_PinSource: specifies the EXTI line to be configured.
-  *   This parameter can be GPIO_PinSourcex where x can be (0..15).
-  * @retval None
-  */
-void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
-{
-    1e78:	b480      	push	{r7}
-    1e7a:	b085      	sub	sp, #20
-    1e7c:	af00      	add	r7, sp, #0
-    1e7e:	4603      	mov	r3, r0
-    1e80:	460a      	mov	r2, r1
-    1e82:	71fb      	strb	r3, [r7, #7]
-    1e84:	4613      	mov	r3, r2
-    1e86:	71bb      	strb	r3, [r7, #6]
-  uint32_t tmp = 0x00;
-    1e88:	2300      	movs	r3, #0
-    1e8a:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
-  assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
-  
-  tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
-    1e8c:	79bb      	ldrb	r3, [r7, #6]
-    1e8e:	f003 0303 	and.w	r3, r3, #3
-    1e92:	009b      	lsls	r3, r3, #2
-    1e94:	220f      	movs	r2, #15
-    1e96:	fa02 f303 	lsl.w	r3, r2, r3
-    1e9a:	60fb      	str	r3, [r7, #12]
-  AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
-    1e9c:	4a15      	ldr	r2, [pc, #84]	; (1ef4 <GPIO_EXTILineConfig+0x7c>)
-    1e9e:	79bb      	ldrb	r3, [r7, #6]
-    1ea0:	089b      	lsrs	r3, r3, #2
-    1ea2:	b2db      	uxtb	r3, r3
-    1ea4:	3302      	adds	r3, #2
-    1ea6:	f852 2023 	ldr.w	r2, [r2, r3, lsl #2]
-    1eaa:	68fb      	ldr	r3, [r7, #12]
-    1eac:	43db      	mvns	r3, r3
-    1eae:	4811      	ldr	r0, [pc, #68]	; (1ef4 <GPIO_EXTILineConfig+0x7c>)
-    1eb0:	79b9      	ldrb	r1, [r7, #6]
-    1eb2:	0889      	lsrs	r1, r1, #2
-    1eb4:	b2c9      	uxtb	r1, r1
-    1eb6:	401a      	ands	r2, r3
-    1eb8:	1c8b      	adds	r3, r1, #2
-    1eba:	f840 2023 	str.w	r2, [r0, r3, lsl #2]
-  AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
-    1ebe:	4a0d      	ldr	r2, [pc, #52]	; (1ef4 <GPIO_EXTILineConfig+0x7c>)
-    1ec0:	79bb      	ldrb	r3, [r7, #6]
-    1ec2:	089b      	lsrs	r3, r3, #2
-    1ec4:	b2db      	uxtb	r3, r3
-    1ec6:	3302      	adds	r3, #2
-    1ec8:	f852 2023 	ldr.w	r2, [r2, r3, lsl #2]
-    1ecc:	79f9      	ldrb	r1, [r7, #7]
-    1ece:	79bb      	ldrb	r3, [r7, #6]
-    1ed0:	f003 0303 	and.w	r3, r3, #3
-    1ed4:	009b      	lsls	r3, r3, #2
-    1ed6:	fa01 f303 	lsl.w	r3, r1, r3
-    1eda:	4806      	ldr	r0, [pc, #24]	; (1ef4 <GPIO_EXTILineConfig+0x7c>)
-    1edc:	79b9      	ldrb	r1, [r7, #6]
-    1ede:	0889      	lsrs	r1, r1, #2
-    1ee0:	b2c9      	uxtb	r1, r1
-    1ee2:	431a      	orrs	r2, r3
-    1ee4:	1c8b      	adds	r3, r1, #2
-    1ee6:	f840 2023 	str.w	r2, [r0, r3, lsl #2]
-}
-    1eea:	bf00      	nop
-    1eec:	3714      	adds	r7, #20
-    1eee:	46bd      	mov	sp, r7
-    1ef0:	bc80      	pop	{r7}
-    1ef2:	4770      	bx	lr
-    1ef4:	40010000 	.word	0x40010000
-
-00001ef8 <GPIO_ETH_MediaInterfaceConfig>:
-  *     @arg GPIO_ETH_MediaInterface_MII: MII mode
-  *     @arg GPIO_ETH_MediaInterface_RMII: RMII mode    
-  * @retval None
-  */
-void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface) 
-{ 
-    1ef8:	b480      	push	{r7}
-    1efa:	b083      	sub	sp, #12
-    1efc:	af00      	add	r7, sp, #0
-    1efe:	6078      	str	r0, [r7, #4]
-  assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface)); 
-
-  /* Configure MII_RMII selection bit */ 
-  *(__IO uint32_t *) MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface; 
-    1f00:	4a03      	ldr	r2, [pc, #12]	; (1f10 <GPIO_ETH_MediaInterfaceConfig+0x18>)
-    1f02:	687b      	ldr	r3, [r7, #4]
-    1f04:	6013      	str	r3, [r2, #0]
-}
-    1f06:	bf00      	nop
-    1f08:	370c      	adds	r7, #12
-    1f0a:	46bd      	mov	sp, r7
-    1f0c:	bc80      	pop	{r7}
-    1f0e:	4770      	bx	lr
-    1f10:	422000dc 	.word	0x422000dc
-
-00001f14 <USART_DeInit>:
-  *   This parameter can be one of the following values: 
-  *      USART1, USART2, USART3, UART4 or UART5.
-  * @retval None
-  */
-void USART_DeInit(USART_TypeDef* USARTx)
-{
-    1f14:	b580      	push	{r7, lr}
-    1f16:	b082      	sub	sp, #8
-    1f18:	af00      	add	r7, sp, #0
-    1f1a:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-
-  if (USARTx == USART1)
-    1f1c:	687b      	ldr	r3, [r7, #4]
-    1f1e:	4a26      	ldr	r2, [pc, #152]	; (1fb8 <USART_DeInit+0xa4>)
-    1f20:	4293      	cmp	r3, r2
-    1f22:	d10a      	bne.n	1f3a <USART_DeInit+0x26>
-  {
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
-    1f24:	2101      	movs	r1, #1
-    1f26:	f44f 4080 	mov.w	r0, #16384	; 0x4000
-    1f2a:	f7ff fc29 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
-    1f2e:	2100      	movs	r1, #0
-    1f30:	f44f 4080 	mov.w	r0, #16384	; 0x4000
-    1f34:	f7ff fc24 	bl	1780 <RCC_APB2PeriphResetCmd>
-    { 
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
-    }
-  }
-}
-    1f38:	e03a      	b.n	1fb0 <USART_DeInit+0x9c>
-  else if (USARTx == USART2)
-    1f3a:	687b      	ldr	r3, [r7, #4]
-    1f3c:	4a1f      	ldr	r2, [pc, #124]	; (1fbc <USART_DeInit+0xa8>)
-    1f3e:	4293      	cmp	r3, r2
-    1f40:	d10a      	bne.n	1f58 <USART_DeInit+0x44>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
-    1f42:	2101      	movs	r1, #1
-    1f44:	f44f 3000 	mov.w	r0, #131072	; 0x20000
-    1f48:	f7ff fc38 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
-    1f4c:	2100      	movs	r1, #0
-    1f4e:	f44f 3000 	mov.w	r0, #131072	; 0x20000
-    1f52:	f7ff fc33 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    1f56:	e02b      	b.n	1fb0 <USART_DeInit+0x9c>
-  else if (USARTx == USART3)
-    1f58:	687b      	ldr	r3, [r7, #4]
-    1f5a:	4a19      	ldr	r2, [pc, #100]	; (1fc0 <USART_DeInit+0xac>)
-    1f5c:	4293      	cmp	r3, r2
-    1f5e:	d10a      	bne.n	1f76 <USART_DeInit+0x62>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
-    1f60:	2101      	movs	r1, #1
-    1f62:	f44f 2080 	mov.w	r0, #262144	; 0x40000
-    1f66:	f7ff fc29 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
-    1f6a:	2100      	movs	r1, #0
-    1f6c:	f44f 2080 	mov.w	r0, #262144	; 0x40000
-    1f70:	f7ff fc24 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    1f74:	e01c      	b.n	1fb0 <USART_DeInit+0x9c>
-  else if (USARTx == UART4)
-    1f76:	687b      	ldr	r3, [r7, #4]
-    1f78:	4a12      	ldr	r2, [pc, #72]	; (1fc4 <USART_DeInit+0xb0>)
-    1f7a:	4293      	cmp	r3, r2
-    1f7c:	d10a      	bne.n	1f94 <USART_DeInit+0x80>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
-    1f7e:	2101      	movs	r1, #1
-    1f80:	f44f 2000 	mov.w	r0, #524288	; 0x80000
-    1f84:	f7ff fc1a 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
-    1f88:	2100      	movs	r1, #0
-    1f8a:	f44f 2000 	mov.w	r0, #524288	; 0x80000
-    1f8e:	f7ff fc15 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    1f92:	e00d      	b.n	1fb0 <USART_DeInit+0x9c>
-    if (USARTx == UART5)
-    1f94:	687b      	ldr	r3, [r7, #4]
-    1f96:	4a0c      	ldr	r2, [pc, #48]	; (1fc8 <USART_DeInit+0xb4>)
-    1f98:	4293      	cmp	r3, r2
-    1f9a:	d109      	bne.n	1fb0 <USART_DeInit+0x9c>
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
-    1f9c:	2101      	movs	r1, #1
-    1f9e:	f44f 1080 	mov.w	r0, #1048576	; 0x100000
-    1fa2:	f7ff fc0b 	bl	17bc <RCC_APB1PeriphResetCmd>
-      RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
-    1fa6:	2100      	movs	r1, #0
-    1fa8:	f44f 1080 	mov.w	r0, #1048576	; 0x100000
-    1fac:	f7ff fc06 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    1fb0:	bf00      	nop
-    1fb2:	3708      	adds	r7, #8
-    1fb4:	46bd      	mov	sp, r7
-    1fb6:	bd80      	pop	{r7, pc}
-    1fb8:	40013800 	.word	0x40013800
-    1fbc:	40004400 	.word	0x40004400
-    1fc0:	40004800 	.word	0x40004800
-    1fc4:	40004c00 	.word	0x40004c00
-    1fc8:	40005000 	.word	0x40005000
-
-00001fcc <USART_Init>:
-  *         that contains the configuration information for the specified USART 
-  *         peripheral.
-  * @retval None
-  */
-void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
-{
-    1fcc:	b580      	push	{r7, lr}
-    1fce:	b08c      	sub	sp, #48	; 0x30
-    1fd0:	af00      	add	r7, sp, #0
-    1fd2:	6078      	str	r0, [r7, #4]
-    1fd4:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg = 0x00, apbclock = 0x00;
-    1fd6:	2300      	movs	r3, #0
-    1fd8:	62fb      	str	r3, [r7, #44]	; 0x2c
-    1fda:	2300      	movs	r3, #0
-    1fdc:	62bb      	str	r3, [r7, #40]	; 0x28
-  uint32_t integerdivider = 0x00;
-    1fde:	2300      	movs	r3, #0
-    1fe0:	627b      	str	r3, [r7, #36]	; 0x24
-  uint32_t fractionaldivider = 0x00;
-    1fe2:	2300      	movs	r3, #0
-    1fe4:	623b      	str	r3, [r7, #32]
-  uint32_t usartxbase = 0;
-    1fe6:	2300      	movs	r3, #0
-    1fe8:	61fb      	str	r3, [r7, #28]
-  if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None)
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  }
-
-  usartxbase = (uint32_t)USARTx;
-    1fea:	687b      	ldr	r3, [r7, #4]
-    1fec:	61fb      	str	r3, [r7, #28]
-
-/*---------------------------- USART CR2 Configuration -----------------------*/
-  tmpreg = USARTx->CR2;
-    1fee:	687b      	ldr	r3, [r7, #4]
-    1ff0:	8a1b      	ldrh	r3, [r3, #16]
-    1ff2:	b29b      	uxth	r3, r3
-    1ff4:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Clear STOP[13:12] bits */
-  tmpreg &= CR2_STOP_CLEAR_Mask;
-    1ff6:	6afa      	ldr	r2, [r7, #44]	; 0x2c
-    1ff8:	f64c 73ff 	movw	r3, #53247	; 0xcfff
-    1ffc:	4013      	ands	r3, r2
-    1ffe:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
-  /* Set STOP[13:12] bits according to USART_StopBits value */
-  tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
-    2000:	683b      	ldr	r3, [r7, #0]
-    2002:	88db      	ldrh	r3, [r3, #6]
-    2004:	461a      	mov	r2, r3
-    2006:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    2008:	4313      	orrs	r3, r2
-    200a:	62fb      	str	r3, [r7, #44]	; 0x2c
-  
-  /* Write to USART CR2 */
-  USARTx->CR2 = (uint16_t)tmpreg;
-    200c:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    200e:	b29a      	uxth	r2, r3
-    2010:	687b      	ldr	r3, [r7, #4]
-    2012:	821a      	strh	r2, [r3, #16]
-
-/*---------------------------- USART CR1 Configuration -----------------------*/
-  tmpreg = USARTx->CR1;
-    2014:	687b      	ldr	r3, [r7, #4]
-    2016:	899b      	ldrh	r3, [r3, #12]
-    2018:	b29b      	uxth	r3, r3
-    201a:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Clear M, PCE, PS, TE and RE bits */
-  tmpreg &= CR1_CLEAR_Mask;
-    201c:	6afa      	ldr	r2, [r7, #44]	; 0x2c
-    201e:	f64e 13f3 	movw	r3, #59891	; 0xe9f3
-    2022:	4013      	ands	r3, r2
-    2024:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Configure the USART Word Length, Parity and mode ----------------------- */
-  /* Set the M bits according to USART_WordLength value */
-  /* Set PCE and PS bits according to USART_Parity value */
-  /* Set TE and RE bits according to USART_Mode value */
-  tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
-    2026:	683b      	ldr	r3, [r7, #0]
-    2028:	889a      	ldrh	r2, [r3, #4]
-    202a:	683b      	ldr	r3, [r7, #0]
-    202c:	891b      	ldrh	r3, [r3, #8]
-    202e:	4313      	orrs	r3, r2
-    2030:	b29a      	uxth	r2, r3
-            USART_InitStruct->USART_Mode;
-    2032:	683b      	ldr	r3, [r7, #0]
-    2034:	895b      	ldrh	r3, [r3, #10]
-  tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
-    2036:	4313      	orrs	r3, r2
-    2038:	b29b      	uxth	r3, r3
-    203a:	461a      	mov	r2, r3
-    203c:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    203e:	4313      	orrs	r3, r2
-    2040:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Write to USART CR1 */
-  USARTx->CR1 = (uint16_t)tmpreg;
-    2042:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    2044:	b29a      	uxth	r2, r3
-    2046:	687b      	ldr	r3, [r7, #4]
-    2048:	819a      	strh	r2, [r3, #12]
-
-/*---------------------------- USART CR3 Configuration -----------------------*/  
-  tmpreg = USARTx->CR3;
-    204a:	687b      	ldr	r3, [r7, #4]
-    204c:	8a9b      	ldrh	r3, [r3, #20]
-    204e:	b29b      	uxth	r3, r3
-    2050:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Clear CTSE and RTSE bits */
-  tmpreg &= CR3_CLEAR_Mask;
-    2052:	6afa      	ldr	r2, [r7, #44]	; 0x2c
-    2054:	f64f 43ff 	movw	r3, #64767	; 0xfcff
-    2058:	4013      	ands	r3, r2
-    205a:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Configure the USART HFC -------------------------------------------------*/
-  /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
-  tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
-    205c:	683b      	ldr	r3, [r7, #0]
-    205e:	899b      	ldrh	r3, [r3, #12]
-    2060:	461a      	mov	r2, r3
-    2062:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    2064:	4313      	orrs	r3, r2
-    2066:	62fb      	str	r3, [r7, #44]	; 0x2c
-  /* Write to USART CR3 */
-  USARTx->CR3 = (uint16_t)tmpreg;
-    2068:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    206a:	b29a      	uxth	r2, r3
-    206c:	687b      	ldr	r3, [r7, #4]
-    206e:	829a      	strh	r2, [r3, #20]
-
-/*---------------------------- USART BRR Configuration -----------------------*/
-  /* Configure the USART Baud Rate -------------------------------------------*/
-  RCC_GetClocksFreq(&RCC_ClocksStatus);
-    2070:	f107 0308 	add.w	r3, r7, #8
-    2074:	4618      	mov	r0, r3
-    2076:	f7ff fa73 	bl	1560 <RCC_GetClocksFreq>
-  if (usartxbase == USART1_BASE)
-    207a:	69fb      	ldr	r3, [r7, #28]
-    207c:	4a2e      	ldr	r2, [pc, #184]	; (2138 <USART_Init+0x16c>)
-    207e:	4293      	cmp	r3, r2
-    2080:	d102      	bne.n	2088 <USART_Init+0xbc>
-  {
-    apbclock = RCC_ClocksStatus.PCLK2_Frequency;
-    2082:	697b      	ldr	r3, [r7, #20]
-    2084:	62bb      	str	r3, [r7, #40]	; 0x28
-    2086:	e001      	b.n	208c <USART_Init+0xc0>
-  }
-  else
-  {
-    apbclock = RCC_ClocksStatus.PCLK1_Frequency;
-    2088:	693b      	ldr	r3, [r7, #16]
-    208a:	62bb      	str	r3, [r7, #40]	; 0x28
-  }
-  
-  /* Determine the integer part */
-  if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
-    208c:	687b      	ldr	r3, [r7, #4]
-    208e:	899b      	ldrh	r3, [r3, #12]
-    2090:	b29b      	uxth	r3, r3
-    2092:	b21b      	sxth	r3, r3
-    2094:	2b00      	cmp	r3, #0
-    2096:	da0c      	bge.n	20b2 <USART_Init+0xe6>
-  {
-    /* Integer part computing in case Oversampling mode is 8 Samples */
-    integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));    
-    2098:	6aba      	ldr	r2, [r7, #40]	; 0x28
-    209a:	4613      	mov	r3, r2
-    209c:	009b      	lsls	r3, r3, #2
-    209e:	4413      	add	r3, r2
-    20a0:	009a      	lsls	r2, r3, #2
-    20a2:	441a      	add	r2, r3
-    20a4:	683b      	ldr	r3, [r7, #0]
-    20a6:	681b      	ldr	r3, [r3, #0]
-    20a8:	005b      	lsls	r3, r3, #1
-    20aa:	fbb2 f3f3 	udiv	r3, r2, r3
-    20ae:	627b      	str	r3, [r7, #36]	; 0x24
-    20b0:	e00b      	b.n	20ca <USART_Init+0xfe>
-  }
-  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
-  {
-    /* Integer part computing in case Oversampling mode is 16 Samples */
-    integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));    
-    20b2:	6aba      	ldr	r2, [r7, #40]	; 0x28
-    20b4:	4613      	mov	r3, r2
-    20b6:	009b      	lsls	r3, r3, #2
-    20b8:	4413      	add	r3, r2
-    20ba:	009a      	lsls	r2, r3, #2
-    20bc:	441a      	add	r2, r3
-    20be:	683b      	ldr	r3, [r7, #0]
-    20c0:	681b      	ldr	r3, [r3, #0]
-    20c2:	009b      	lsls	r3, r3, #2
-    20c4:	fbb2 f3f3 	udiv	r3, r2, r3
-    20c8:	627b      	str	r3, [r7, #36]	; 0x24
-  }
-  tmpreg = (integerdivider / 100) << 4;
-    20ca:	6a7b      	ldr	r3, [r7, #36]	; 0x24
-    20cc:	4a1b      	ldr	r2, [pc, #108]	; (213c <USART_Init+0x170>)
-    20ce:	fba2 2303 	umull	r2, r3, r2, r3
-    20d2:	095b      	lsrs	r3, r3, #5
-    20d4:	011b      	lsls	r3, r3, #4
-    20d6:	62fb      	str	r3, [r7, #44]	; 0x2c
-
-  /* Determine the fractional part */
-  fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
-    20d8:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    20da:	091b      	lsrs	r3, r3, #4
-    20dc:	2264      	movs	r2, #100	; 0x64
-    20de:	fb02 f303 	mul.w	r3, r2, r3
-    20e2:	6a7a      	ldr	r2, [r7, #36]	; 0x24
-    20e4:	1ad3      	subs	r3, r2, r3
-    20e6:	623b      	str	r3, [r7, #32]
-
-  /* Implement the fractional part in the register */
-  if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
-    20e8:	687b      	ldr	r3, [r7, #4]
-    20ea:	899b      	ldrh	r3, [r3, #12]
-    20ec:	b29b      	uxth	r3, r3
-    20ee:	b21b      	sxth	r3, r3
-    20f0:	2b00      	cmp	r3, #0
-    20f2:	da0c      	bge.n	210e <USART_Init+0x142>
-  {
-    tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
-    20f4:	6a3b      	ldr	r3, [r7, #32]
-    20f6:	00db      	lsls	r3, r3, #3
-    20f8:	3332      	adds	r3, #50	; 0x32
-    20fa:	4a10      	ldr	r2, [pc, #64]	; (213c <USART_Init+0x170>)
-    20fc:	fba2 2303 	umull	r2, r3, r2, r3
-    2100:	095b      	lsrs	r3, r3, #5
-    2102:	f003 0307 	and.w	r3, r3, #7
-    2106:	6afa      	ldr	r2, [r7, #44]	; 0x2c
-    2108:	4313      	orrs	r3, r2
-    210a:	62fb      	str	r3, [r7, #44]	; 0x2c
-    210c:	e00b      	b.n	2126 <USART_Init+0x15a>
-  }
-  else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
-  {
-    tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
-    210e:	6a3b      	ldr	r3, [r7, #32]
-    2110:	011b      	lsls	r3, r3, #4
-    2112:	3332      	adds	r3, #50	; 0x32
-    2114:	4a09      	ldr	r2, [pc, #36]	; (213c <USART_Init+0x170>)
-    2116:	fba2 2303 	umull	r2, r3, r2, r3
-    211a:	095b      	lsrs	r3, r3, #5
-    211c:	f003 030f 	and.w	r3, r3, #15
-    2120:	6afa      	ldr	r2, [r7, #44]	; 0x2c
-    2122:	4313      	orrs	r3, r2
-    2124:	62fb      	str	r3, [r7, #44]	; 0x2c
-  }
-  
-  /* Write to USART BRR */
-  USARTx->BRR = (uint16_t)tmpreg;
-    2126:	6afb      	ldr	r3, [r7, #44]	; 0x2c
-    2128:	b29a      	uxth	r2, r3
-    212a:	687b      	ldr	r3, [r7, #4]
-    212c:	811a      	strh	r2, [r3, #8]
-}
-    212e:	bf00      	nop
-    2130:	3730      	adds	r7, #48	; 0x30
-    2132:	46bd      	mov	sp, r7
-    2134:	bd80      	pop	{r7, pc}
-    2136:	bf00      	nop
-    2138:	40013800 	.word	0x40013800
-    213c:	51eb851f 	.word	0x51eb851f
-
-00002140 <USART_StructInit>:
-  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure
-  *         which will be initialized.
-  * @retval None
-  */
-void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
-{
-    2140:	b480      	push	{r7}
-    2142:	b083      	sub	sp, #12
-    2144:	af00      	add	r7, sp, #0
-    2146:	6078      	str	r0, [r7, #4]
-  /* USART_InitStruct members default value */
-  USART_InitStruct->USART_BaudRate = 9600;
-    2148:	687b      	ldr	r3, [r7, #4]
-    214a:	f44f 5216 	mov.w	r2, #9600	; 0x2580
-    214e:	601a      	str	r2, [r3, #0]
-  USART_InitStruct->USART_WordLength = USART_WordLength_8b;
-    2150:	687b      	ldr	r3, [r7, #4]
-    2152:	2200      	movs	r2, #0
-    2154:	809a      	strh	r2, [r3, #4]
-  USART_InitStruct->USART_StopBits = USART_StopBits_1;
-    2156:	687b      	ldr	r3, [r7, #4]
-    2158:	2200      	movs	r2, #0
-    215a:	80da      	strh	r2, [r3, #6]
-  USART_InitStruct->USART_Parity = USART_Parity_No ;
-    215c:	687b      	ldr	r3, [r7, #4]
-    215e:	2200      	movs	r2, #0
-    2160:	811a      	strh	r2, [r3, #8]
-  USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
-    2162:	687b      	ldr	r3, [r7, #4]
-    2164:	220c      	movs	r2, #12
-    2166:	815a      	strh	r2, [r3, #10]
-  USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
-    2168:	687b      	ldr	r3, [r7, #4]
-    216a:	2200      	movs	r2, #0
-    216c:	819a      	strh	r2, [r3, #12]
-}
-    216e:	bf00      	nop
-    2170:	370c      	adds	r7, #12
-    2172:	46bd      	mov	sp, r7
-    2174:	bc80      	pop	{r7}
-    2176:	4770      	bx	lr
-
-00002178 <USART_ClockInit>:
-  *         USART peripheral.  
-  * @note The Smart Card and Synchronous modes are not available for UART4 and UART5.
-  * @retval None
-  */
-void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)
-{
-    2178:	b480      	push	{r7}
-    217a:	b085      	sub	sp, #20
-    217c:	af00      	add	r7, sp, #0
-    217e:	6078      	str	r0, [r7, #4]
-    2180:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg = 0x00;
-    2182:	2300      	movs	r3, #0
-    2184:	60fb      	str	r3, [r7, #12]
-  assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));
-  assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));
-  assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));
-  
-/*---------------------------- USART CR2 Configuration -----------------------*/
-  tmpreg = USARTx->CR2;
-    2186:	687b      	ldr	r3, [r7, #4]
-    2188:	8a1b      	ldrh	r3, [r3, #16]
-    218a:	b29b      	uxth	r3, r3
-    218c:	60fb      	str	r3, [r7, #12]
-  /* Clear CLKEN, CPOL, CPHA and LBCL bits */
-  tmpreg &= CR2_CLOCK_CLEAR_Mask;
-    218e:	68fa      	ldr	r2, [r7, #12]
-    2190:	f24f 03ff 	movw	r3, #61695	; 0xf0ff
-    2194:	4013      	ands	r3, r2
-    2196:	60fb      	str	r3, [r7, #12]
-  /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/
-  /* Set CLKEN bit according to USART_Clock value */
-  /* Set CPOL bit according to USART_CPOL value */
-  /* Set CPHA bit according to USART_CPHA value */
-  /* Set LBCL bit according to USART_LastBit value */
-  tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | 
-    2198:	683b      	ldr	r3, [r7, #0]
-    219a:	881a      	ldrh	r2, [r3, #0]
-    219c:	683b      	ldr	r3, [r7, #0]
-    219e:	885b      	ldrh	r3, [r3, #2]
-                 USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;
-    21a0:	4313      	orrs	r3, r2
-    21a2:	b29a      	uxth	r2, r3
-    21a4:	683b      	ldr	r3, [r7, #0]
-    21a6:	889b      	ldrh	r3, [r3, #4]
-    21a8:	4313      	orrs	r3, r2
-    21aa:	b29a      	uxth	r2, r3
-    21ac:	683b      	ldr	r3, [r7, #0]
-    21ae:	88db      	ldrh	r3, [r3, #6]
-    21b0:	4313      	orrs	r3, r2
-    21b2:	b29b      	uxth	r3, r3
-    21b4:	461a      	mov	r2, r3
-  tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | 
-    21b6:	68fb      	ldr	r3, [r7, #12]
-    21b8:	4313      	orrs	r3, r2
-    21ba:	60fb      	str	r3, [r7, #12]
-  /* Write to USART CR2 */
-  USARTx->CR2 = (uint16_t)tmpreg;
-    21bc:	68fb      	ldr	r3, [r7, #12]
-    21be:	b29a      	uxth	r2, r3
-    21c0:	687b      	ldr	r3, [r7, #4]
-    21c2:	821a      	strh	r2, [r3, #16]
-}
-    21c4:	bf00      	nop
-    21c6:	3714      	adds	r7, #20
-    21c8:	46bd      	mov	sp, r7
-    21ca:	bc80      	pop	{r7}
-    21cc:	4770      	bx	lr
-
-000021ce <USART_ClockStructInit>:
-  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
-  *         structure which will be initialized.
-  * @retval None
-  */
-void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)
-{
-    21ce:	b480      	push	{r7}
-    21d0:	b083      	sub	sp, #12
-    21d2:	af00      	add	r7, sp, #0
-    21d4:	6078      	str	r0, [r7, #4]
-  /* USART_ClockInitStruct members default value */
-  USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;
-    21d6:	687b      	ldr	r3, [r7, #4]
-    21d8:	2200      	movs	r2, #0
-    21da:	801a      	strh	r2, [r3, #0]
-  USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;
-    21dc:	687b      	ldr	r3, [r7, #4]
-    21de:	2200      	movs	r2, #0
-    21e0:	805a      	strh	r2, [r3, #2]
-  USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;
-    21e2:	687b      	ldr	r3, [r7, #4]
-    21e4:	2200      	movs	r2, #0
-    21e6:	809a      	strh	r2, [r3, #4]
-  USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;
-    21e8:	687b      	ldr	r3, [r7, #4]
-    21ea:	2200      	movs	r2, #0
-    21ec:	80da      	strh	r2, [r3, #6]
-}
-    21ee:	bf00      	nop
-    21f0:	370c      	adds	r7, #12
-    21f2:	46bd      	mov	sp, r7
-    21f4:	bc80      	pop	{r7}
-    21f6:	4770      	bx	lr
-
-000021f8 <USART_Cmd>:
-  * @param  NewState: new state of the USARTx peripheral.
-  *         This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    21f8:	b480      	push	{r7}
-    21fa:	b083      	sub	sp, #12
-    21fc:	af00      	add	r7, sp, #0
-    21fe:	6078      	str	r0, [r7, #4]
-    2200:	460b      	mov	r3, r1
-    2202:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    2204:	78fb      	ldrb	r3, [r7, #3]
-    2206:	2b00      	cmp	r3, #0
-    2208:	d008      	beq.n	221c <USART_Cmd+0x24>
-  {
-    /* Enable the selected USART by setting the UE bit in the CR1 register */
-    USARTx->CR1 |= CR1_UE_Set;
-    220a:	687b      	ldr	r3, [r7, #4]
-    220c:	899b      	ldrh	r3, [r3, #12]
-    220e:	b29b      	uxth	r3, r3
-    2210:	f443 5300 	orr.w	r3, r3, #8192	; 0x2000
-    2214:	b29a      	uxth	r2, r3
-    2216:	687b      	ldr	r3, [r7, #4]
-    2218:	819a      	strh	r2, [r3, #12]
-  else
-  {
-    /* Disable the selected USART by clearing the UE bit in the CR1 register */
-    USARTx->CR1 &= CR1_UE_Reset;
-  }
-}
-    221a:	e007      	b.n	222c <USART_Cmd+0x34>
-    USARTx->CR1 &= CR1_UE_Reset;
-    221c:	687b      	ldr	r3, [r7, #4]
-    221e:	899b      	ldrh	r3, [r3, #12]
-    2220:	b29b      	uxth	r3, r3
-    2222:	f423 5300 	bic.w	r3, r3, #8192	; 0x2000
-    2226:	b29a      	uxth	r2, r3
-    2228:	687b      	ldr	r3, [r7, #4]
-    222a:	819a      	strh	r2, [r3, #12]
-}
-    222c:	bf00      	nop
-    222e:	370c      	adds	r7, #12
-    2230:	46bd      	mov	sp, r7
-    2232:	bc80      	pop	{r7}
-    2234:	4770      	bx	lr
-
-00002236 <USART_ITConfig>:
-  * @param  NewState: new state of the specified USARTx interrupts.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
-{
-    2236:	b480      	push	{r7}
-    2238:	b087      	sub	sp, #28
-    223a:	af00      	add	r7, sp, #0
-    223c:	6078      	str	r0, [r7, #4]
-    223e:	460b      	mov	r3, r1
-    2240:	807b      	strh	r3, [r7, #2]
-    2242:	4613      	mov	r3, r2
-    2244:	707b      	strb	r3, [r7, #1]
-  uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
-    2246:	2300      	movs	r3, #0
-    2248:	613b      	str	r3, [r7, #16]
-    224a:	2300      	movs	r3, #0
-    224c:	60fb      	str	r3, [r7, #12]
-    224e:	2300      	movs	r3, #0
-    2250:	60bb      	str	r3, [r7, #8]
-  uint32_t usartxbase = 0x00;
-    2252:	2300      	movs	r3, #0
-    2254:	617b      	str	r3, [r7, #20]
-  if (USART_IT == USART_IT_CTS)
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  }   
-  
-  usartxbase = (uint32_t)USARTx;
-    2256:	687b      	ldr	r3, [r7, #4]
-    2258:	617b      	str	r3, [r7, #20]
-
-  /* Get the USART register index */
-  usartreg = (((uint8_t)USART_IT) >> 0x05);
-    225a:	887b      	ldrh	r3, [r7, #2]
-    225c:	b2db      	uxtb	r3, r3
-    225e:	095b      	lsrs	r3, r3, #5
-    2260:	b2db      	uxtb	r3, r3
-    2262:	613b      	str	r3, [r7, #16]
-
-  /* Get the interrupt position */
-  itpos = USART_IT & IT_Mask;
-    2264:	887b      	ldrh	r3, [r7, #2]
-    2266:	f003 031f 	and.w	r3, r3, #31
-    226a:	60fb      	str	r3, [r7, #12]
-  itmask = (((uint32_t)0x01) << itpos);
-    226c:	2201      	movs	r2, #1
-    226e:	68fb      	ldr	r3, [r7, #12]
-    2270:	fa02 f303 	lsl.w	r3, r2, r3
-    2274:	60bb      	str	r3, [r7, #8]
-    
-  if (usartreg == 0x01) /* The IT is in CR1 register */
-    2276:	693b      	ldr	r3, [r7, #16]
-    2278:	2b01      	cmp	r3, #1
-    227a:	d103      	bne.n	2284 <USART_ITConfig+0x4e>
-  {
-    usartxbase += 0x0C;
-    227c:	697b      	ldr	r3, [r7, #20]
-    227e:	330c      	adds	r3, #12
-    2280:	617b      	str	r3, [r7, #20]
-    2282:	e009      	b.n	2298 <USART_ITConfig+0x62>
-  }
-  else if (usartreg == 0x02) /* The IT is in CR2 register */
-    2284:	693b      	ldr	r3, [r7, #16]
-    2286:	2b02      	cmp	r3, #2
-    2288:	d103      	bne.n	2292 <USART_ITConfig+0x5c>
-  {
-    usartxbase += 0x10;
-    228a:	697b      	ldr	r3, [r7, #20]
-    228c:	3310      	adds	r3, #16
-    228e:	617b      	str	r3, [r7, #20]
-    2290:	e002      	b.n	2298 <USART_ITConfig+0x62>
-  }
-  else /* The IT is in CR3 register */
-  {
-    usartxbase += 0x14; 
-    2292:	697b      	ldr	r3, [r7, #20]
-    2294:	3314      	adds	r3, #20
-    2296:	617b      	str	r3, [r7, #20]
-  }
-  if (NewState != DISABLE)
-    2298:	787b      	ldrb	r3, [r7, #1]
-    229a:	2b00      	cmp	r3, #0
-    229c:	d006      	beq.n	22ac <USART_ITConfig+0x76>
-  {
-    *(__IO uint32_t*)usartxbase  |= itmask;
-    229e:	697b      	ldr	r3, [r7, #20]
-    22a0:	6819      	ldr	r1, [r3, #0]
-    22a2:	697b      	ldr	r3, [r7, #20]
-    22a4:	68ba      	ldr	r2, [r7, #8]
-    22a6:	430a      	orrs	r2, r1
-    22a8:	601a      	str	r2, [r3, #0]
-  }
-  else
-  {
-    *(__IO uint32_t*)usartxbase &= ~itmask;
-  }
-}
-    22aa:	e006      	b.n	22ba <USART_ITConfig+0x84>
-    *(__IO uint32_t*)usartxbase &= ~itmask;
-    22ac:	697b      	ldr	r3, [r7, #20]
-    22ae:	6819      	ldr	r1, [r3, #0]
-    22b0:	68bb      	ldr	r3, [r7, #8]
-    22b2:	43da      	mvns	r2, r3
-    22b4:	697b      	ldr	r3, [r7, #20]
-    22b6:	400a      	ands	r2, r1
-    22b8:	601a      	str	r2, [r3, #0]
-}
-    22ba:	bf00      	nop
-    22bc:	371c      	adds	r7, #28
-    22be:	46bd      	mov	sp, r7
-    22c0:	bc80      	pop	{r7}
-    22c2:	4770      	bx	lr
-
-000022c4 <USART_DMACmd>:
-  * @note The DMA mode is not available for UART5 except in the STM32
-  *       High density value line devices(STM32F10X_HD_VL).  
-  * @retval None
-  */
-void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
-{
-    22c4:	b480      	push	{r7}
-    22c6:	b083      	sub	sp, #12
-    22c8:	af00      	add	r7, sp, #0
-    22ca:	6078      	str	r0, [r7, #4]
-    22cc:	460b      	mov	r3, r1
-    22ce:	807b      	strh	r3, [r7, #2]
-    22d0:	4613      	mov	r3, r2
-    22d2:	707b      	strb	r3, [r7, #1]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_DMAREQ(USART_DMAReq));  
-  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
-  if (NewState != DISABLE)
-    22d4:	787b      	ldrb	r3, [r7, #1]
-    22d6:	2b00      	cmp	r3, #0
-    22d8:	d008      	beq.n	22ec <USART_DMACmd+0x28>
-  {
-    /* Enable the DMA transfer for selected requests by setting the DMAT and/or
-       DMAR bits in the USART CR3 register */
-    USARTx->CR3 |= USART_DMAReq;
-    22da:	687b      	ldr	r3, [r7, #4]
-    22dc:	8a9b      	ldrh	r3, [r3, #20]
-    22de:	b29a      	uxth	r2, r3
-    22e0:	887b      	ldrh	r3, [r7, #2]
-    22e2:	4313      	orrs	r3, r2
-    22e4:	b29a      	uxth	r2, r3
-    22e6:	687b      	ldr	r3, [r7, #4]
-    22e8:	829a      	strh	r2, [r3, #20]
-  {
-    /* Disable the DMA transfer for selected requests by clearing the DMAT and/or
-       DMAR bits in the USART CR3 register */
-    USARTx->CR3 &= (uint16_t)~USART_DMAReq;
-  }
-}
-    22ea:	e009      	b.n	2300 <USART_DMACmd+0x3c>
-    USARTx->CR3 &= (uint16_t)~USART_DMAReq;
-    22ec:	687b      	ldr	r3, [r7, #4]
-    22ee:	8a9b      	ldrh	r3, [r3, #20]
-    22f0:	b29a      	uxth	r2, r3
-    22f2:	887b      	ldrh	r3, [r7, #2]
-    22f4:	43db      	mvns	r3, r3
-    22f6:	b29b      	uxth	r3, r3
-    22f8:	4013      	ands	r3, r2
-    22fa:	b29a      	uxth	r2, r3
-    22fc:	687b      	ldr	r3, [r7, #4]
-    22fe:	829a      	strh	r2, [r3, #20]
-}
-    2300:	bf00      	nop
-    2302:	370c      	adds	r7, #12
-    2304:	46bd      	mov	sp, r7
-    2306:	bc80      	pop	{r7}
-    2308:	4770      	bx	lr
-
-0000230a <USART_SetAddress>:
-  *   USART1, USART2, USART3, UART4 or UART5.
-  * @param  USART_Address: Indicates the address of the USART node.
-  * @retval None
-  */
-void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)
-{
-    230a:	b480      	push	{r7}
-    230c:	b083      	sub	sp, #12
-    230e:	af00      	add	r7, sp, #0
-    2310:	6078      	str	r0, [r7, #4]
-    2312:	460b      	mov	r3, r1
-    2314:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_ADDRESS(USART_Address)); 
-    
-  /* Clear the USART address */
-  USARTx->CR2 &= CR2_Address_Mask;
-    2316:	687b      	ldr	r3, [r7, #4]
-    2318:	8a1b      	ldrh	r3, [r3, #16]
-    231a:	b29b      	uxth	r3, r3
-    231c:	f023 030f 	bic.w	r3, r3, #15
-    2320:	b29a      	uxth	r2, r3
-    2322:	687b      	ldr	r3, [r7, #4]
-    2324:	821a      	strh	r2, [r3, #16]
-  /* Set the USART address node */
-  USARTx->CR2 |= USART_Address;
-    2326:	687b      	ldr	r3, [r7, #4]
-    2328:	8a1b      	ldrh	r3, [r3, #16]
-    232a:	b29a      	uxth	r2, r3
-    232c:	78fb      	ldrb	r3, [r7, #3]
-    232e:	b29b      	uxth	r3, r3
-    2330:	4313      	orrs	r3, r2
-    2332:	b29a      	uxth	r2, r3
-    2334:	687b      	ldr	r3, [r7, #4]
-    2336:	821a      	strh	r2, [r3, #16]
-}
-    2338:	bf00      	nop
-    233a:	370c      	adds	r7, #12
-    233c:	46bd      	mov	sp, r7
-    233e:	bc80      	pop	{r7}
-    2340:	4770      	bx	lr
-
-00002342 <USART_WakeUpConfig>:
-  *     @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection
-  *     @arg USART_WakeUp_AddressMark: WakeUp by an address mark
-  * @retval None
-  */
-void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)
-{
-    2342:	b480      	push	{r7}
-    2344:	b083      	sub	sp, #12
-    2346:	af00      	add	r7, sp, #0
-    2348:	6078      	str	r0, [r7, #4]
-    234a:	460b      	mov	r3, r1
-    234c:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_WAKEUP(USART_WakeUp));
-  
-  USARTx->CR1 &= CR1_WAKE_Mask;
-    234e:	687b      	ldr	r3, [r7, #4]
-    2350:	899b      	ldrh	r3, [r3, #12]
-    2352:	b29b      	uxth	r3, r3
-    2354:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    2358:	b29a      	uxth	r2, r3
-    235a:	687b      	ldr	r3, [r7, #4]
-    235c:	819a      	strh	r2, [r3, #12]
-  USARTx->CR1 |= USART_WakeUp;
-    235e:	687b      	ldr	r3, [r7, #4]
-    2360:	899b      	ldrh	r3, [r3, #12]
-    2362:	b29a      	uxth	r2, r3
-    2364:	887b      	ldrh	r3, [r7, #2]
-    2366:	4313      	orrs	r3, r2
-    2368:	b29a      	uxth	r2, r3
-    236a:	687b      	ldr	r3, [r7, #4]
-    236c:	819a      	strh	r2, [r3, #12]
-}
-    236e:	bf00      	nop
-    2370:	370c      	adds	r7, #12
-    2372:	46bd      	mov	sp, r7
-    2374:	bc80      	pop	{r7}
-    2376:	4770      	bx	lr
-
-00002378 <USART_ReceiverWakeUpCmd>:
-  * @param  NewState: new state of the USART mute mode.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    2378:	b480      	push	{r7}
-    237a:	b083      	sub	sp, #12
-    237c:	af00      	add	r7, sp, #0
-    237e:	6078      	str	r0, [r7, #4]
-    2380:	460b      	mov	r3, r1
-    2382:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
-  
-  if (NewState != DISABLE)
-    2384:	78fb      	ldrb	r3, [r7, #3]
-    2386:	2b00      	cmp	r3, #0
-    2388:	d008      	beq.n	239c <USART_ReceiverWakeUpCmd+0x24>
-  {
-    /* Enable the USART mute mode  by setting the RWU bit in the CR1 register */
-    USARTx->CR1 |= CR1_RWU_Set;
-    238a:	687b      	ldr	r3, [r7, #4]
-    238c:	899b      	ldrh	r3, [r3, #12]
-    238e:	b29b      	uxth	r3, r3
-    2390:	f043 0302 	orr.w	r3, r3, #2
-    2394:	b29a      	uxth	r2, r3
-    2396:	687b      	ldr	r3, [r7, #4]
-    2398:	819a      	strh	r2, [r3, #12]
-  else
-  {
-    /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */
-    USARTx->CR1 &= CR1_RWU_Reset;
-  }
-}
-    239a:	e007      	b.n	23ac <USART_ReceiverWakeUpCmd+0x34>
-    USARTx->CR1 &= CR1_RWU_Reset;
-    239c:	687b      	ldr	r3, [r7, #4]
-    239e:	899b      	ldrh	r3, [r3, #12]
-    23a0:	b29b      	uxth	r3, r3
-    23a2:	f023 0302 	bic.w	r3, r3, #2
-    23a6:	b29a      	uxth	r2, r3
-    23a8:	687b      	ldr	r3, [r7, #4]
-    23aa:	819a      	strh	r2, [r3, #12]
-}
-    23ac:	bf00      	nop
-    23ae:	370c      	adds	r7, #12
-    23b0:	46bd      	mov	sp, r7
-    23b2:	bc80      	pop	{r7}
-    23b4:	4770      	bx	lr
-
-000023b6 <USART_LINBreakDetectLengthConfig>:
-  *     @arg USART_LINBreakDetectLength_10b: 10-bit break detection
-  *     @arg USART_LINBreakDetectLength_11b: 11-bit break detection
-  * @retval None
-  */
-void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)
-{
-    23b6:	b480      	push	{r7}
-    23b8:	b083      	sub	sp, #12
-    23ba:	af00      	add	r7, sp, #0
-    23bc:	6078      	str	r0, [r7, #4]
-    23be:	460b      	mov	r3, r1
-    23c0:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
-  
-  USARTx->CR2 &= CR2_LBDL_Mask;
-    23c2:	687b      	ldr	r3, [r7, #4]
-    23c4:	8a1b      	ldrh	r3, [r3, #16]
-    23c6:	b29b      	uxth	r3, r3
-    23c8:	f023 0320 	bic.w	r3, r3, #32
-    23cc:	b29a      	uxth	r2, r3
-    23ce:	687b      	ldr	r3, [r7, #4]
-    23d0:	821a      	strh	r2, [r3, #16]
-  USARTx->CR2 |= USART_LINBreakDetectLength;  
-    23d2:	687b      	ldr	r3, [r7, #4]
-    23d4:	8a1b      	ldrh	r3, [r3, #16]
-    23d6:	b29a      	uxth	r2, r3
-    23d8:	887b      	ldrh	r3, [r7, #2]
-    23da:	4313      	orrs	r3, r2
-    23dc:	b29a      	uxth	r2, r3
-    23de:	687b      	ldr	r3, [r7, #4]
-    23e0:	821a      	strh	r2, [r3, #16]
-}
-    23e2:	bf00      	nop
-    23e4:	370c      	adds	r7, #12
-    23e6:	46bd      	mov	sp, r7
-    23e8:	bc80      	pop	{r7}
-    23ea:	4770      	bx	lr
-
-000023ec <USART_LINCmd>:
-  * @param  NewState: new state of the USART LIN mode.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    23ec:	b480      	push	{r7}
-    23ee:	b083      	sub	sp, #12
-    23f0:	af00      	add	r7, sp, #0
-    23f2:	6078      	str	r0, [r7, #4]
-    23f4:	460b      	mov	r3, r1
-    23f6:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    23f8:	78fb      	ldrb	r3, [r7, #3]
-    23fa:	2b00      	cmp	r3, #0
-    23fc:	d008      	beq.n	2410 <USART_LINCmd+0x24>
-  {
-    /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
-    USARTx->CR2 |= CR2_LINEN_Set;
-    23fe:	687b      	ldr	r3, [r7, #4]
-    2400:	8a1b      	ldrh	r3, [r3, #16]
-    2402:	b29b      	uxth	r3, r3
-    2404:	f443 4380 	orr.w	r3, r3, #16384	; 0x4000
-    2408:	b29a      	uxth	r2, r3
-    240a:	687b      	ldr	r3, [r7, #4]
-    240c:	821a      	strh	r2, [r3, #16]
-  else
-  {
-    /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */
-    USARTx->CR2 &= CR2_LINEN_Reset;
-  }
-}
-    240e:	e007      	b.n	2420 <USART_LINCmd+0x34>
-    USARTx->CR2 &= CR2_LINEN_Reset;
-    2410:	687b      	ldr	r3, [r7, #4]
-    2412:	8a1b      	ldrh	r3, [r3, #16]
-    2414:	b29b      	uxth	r3, r3
-    2416:	f423 4380 	bic.w	r3, r3, #16384	; 0x4000
-    241a:	b29a      	uxth	r2, r3
-    241c:	687b      	ldr	r3, [r7, #4]
-    241e:	821a      	strh	r2, [r3, #16]
-}
-    2420:	bf00      	nop
-    2422:	370c      	adds	r7, #12
-    2424:	46bd      	mov	sp, r7
-    2426:	bc80      	pop	{r7}
-    2428:	4770      	bx	lr
-
-0000242a <USART_SendData>:
-  *   USART1, USART2, USART3, UART4 or UART5.
-  * @param  Data: the data to transmit.
-  * @retval None
-  */
-void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
-{
-    242a:	b480      	push	{r7}
-    242c:	b083      	sub	sp, #12
-    242e:	af00      	add	r7, sp, #0
-    2430:	6078      	str	r0, [r7, #4]
-    2432:	460b      	mov	r3, r1
-    2434:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_DATA(Data)); 
-    
-  /* Transmit Data */
-  USARTx->DR = (Data & (uint16_t)0x01FF);
-    2436:	887b      	ldrh	r3, [r7, #2]
-    2438:	f3c3 0308 	ubfx	r3, r3, #0, #9
-    243c:	b29a      	uxth	r2, r3
-    243e:	687b      	ldr	r3, [r7, #4]
-    2440:	809a      	strh	r2, [r3, #4]
-}
-    2442:	bf00      	nop
-    2444:	370c      	adds	r7, #12
-    2446:	46bd      	mov	sp, r7
-    2448:	bc80      	pop	{r7}
-    244a:	4770      	bx	lr
-
-0000244c <USART_ReceiveData>:
-  *   This parameter can be one of the following values:
-  *   USART1, USART2, USART3, UART4 or UART5.
-  * @retval The received data.
-  */
-uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
-{
-    244c:	b480      	push	{r7}
-    244e:	b083      	sub	sp, #12
-    2450:	af00      	add	r7, sp, #0
-    2452:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  
-  /* Receive Data */
-  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
-    2454:	687b      	ldr	r3, [r7, #4]
-    2456:	889b      	ldrh	r3, [r3, #4]
-    2458:	b29b      	uxth	r3, r3
-    245a:	f3c3 0308 	ubfx	r3, r3, #0, #9
-    245e:	b29b      	uxth	r3, r3
-}
-    2460:	4618      	mov	r0, r3
-    2462:	370c      	adds	r7, #12
-    2464:	46bd      	mov	sp, r7
-    2466:	bc80      	pop	{r7}
-    2468:	4770      	bx	lr
-
-0000246a <USART_SendBreak>:
-  *   This parameter can be one of the following values:
-  *   USART1, USART2, USART3, UART4 or UART5.
-  * @retval None
-  */
-void USART_SendBreak(USART_TypeDef* USARTx)
-{
-    246a:	b480      	push	{r7}
-    246c:	b083      	sub	sp, #12
-    246e:	af00      	add	r7, sp, #0
-    2470:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  
-  /* Send break characters */
-  USARTx->CR1 |= CR1_SBK_Set;
-    2472:	687b      	ldr	r3, [r7, #4]
-    2474:	899b      	ldrh	r3, [r3, #12]
-    2476:	b29b      	uxth	r3, r3
-    2478:	f043 0301 	orr.w	r3, r3, #1
-    247c:	b29a      	uxth	r2, r3
-    247e:	687b      	ldr	r3, [r7, #4]
-    2480:	819a      	strh	r2, [r3, #12]
-}
-    2482:	bf00      	nop
-    2484:	370c      	adds	r7, #12
-    2486:	46bd      	mov	sp, r7
-    2488:	bc80      	pop	{r7}
-    248a:	4770      	bx	lr
-
-0000248c <USART_SetGuardTime>:
-  * @param  USART_GuardTime: specifies the guard time.
-  * @note The guard time bits are not available for UART4 and UART5.   
-  * @retval None
-  */
-void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)
-{    
-    248c:	b480      	push	{r7}
-    248e:	b083      	sub	sp, #12
-    2490:	af00      	add	r7, sp, #0
-    2492:	6078      	str	r0, [r7, #4]
-    2494:	460b      	mov	r3, r1
-    2496:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_123_PERIPH(USARTx));
-  
-  /* Clear the USART Guard time */
-  USARTx->GTPR &= GTPR_LSB_Mask;
-    2498:	687b      	ldr	r3, [r7, #4]
-    249a:	8b1b      	ldrh	r3, [r3, #24]
-    249c:	b29b      	uxth	r3, r3
-    249e:	b2db      	uxtb	r3, r3
-    24a0:	b29a      	uxth	r2, r3
-    24a2:	687b      	ldr	r3, [r7, #4]
-    24a4:	831a      	strh	r2, [r3, #24]
-  /* Set the USART guard time */
-  USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);
-    24a6:	687b      	ldr	r3, [r7, #4]
-    24a8:	8b1b      	ldrh	r3, [r3, #24]
-    24aa:	b29a      	uxth	r2, r3
-    24ac:	78fb      	ldrb	r3, [r7, #3]
-    24ae:	b29b      	uxth	r3, r3
-    24b0:	021b      	lsls	r3, r3, #8
-    24b2:	b29b      	uxth	r3, r3
-    24b4:	4313      	orrs	r3, r2
-    24b6:	b29a      	uxth	r2, r3
-    24b8:	687b      	ldr	r3, [r7, #4]
-    24ba:	831a      	strh	r2, [r3, #24]
-}
-    24bc:	bf00      	nop
-    24be:	370c      	adds	r7, #12
-    24c0:	46bd      	mov	sp, r7
-    24c2:	bc80      	pop	{r7}
-    24c4:	4770      	bx	lr
-
-000024c6 <USART_SetPrescaler>:
-  * @param  USART_Prescaler: specifies the prescaler clock.  
-  * @note   The function is used for IrDA mode with UART4 and UART5.
-  * @retval None
-  */
-void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)
-{ 
-    24c6:	b480      	push	{r7}
-    24c8:	b083      	sub	sp, #12
-    24ca:	af00      	add	r7, sp, #0
-    24cc:	6078      	str	r0, [r7, #4]
-    24ce:	460b      	mov	r3, r1
-    24d0:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  
-  /* Clear the USART prescaler */
-  USARTx->GTPR &= GTPR_MSB_Mask;
-    24d2:	687b      	ldr	r3, [r7, #4]
-    24d4:	8b1b      	ldrh	r3, [r3, #24]
-    24d6:	b29b      	uxth	r3, r3
-    24d8:	f023 03ff 	bic.w	r3, r3, #255	; 0xff
-    24dc:	b29a      	uxth	r2, r3
-    24de:	687b      	ldr	r3, [r7, #4]
-    24e0:	831a      	strh	r2, [r3, #24]
-  /* Set the USART prescaler */
-  USARTx->GTPR |= USART_Prescaler;
-    24e2:	687b      	ldr	r3, [r7, #4]
-    24e4:	8b1b      	ldrh	r3, [r3, #24]
-    24e6:	b29a      	uxth	r2, r3
-    24e8:	78fb      	ldrb	r3, [r7, #3]
-    24ea:	b29b      	uxth	r3, r3
-    24ec:	4313      	orrs	r3, r2
-    24ee:	b29a      	uxth	r2, r3
-    24f0:	687b      	ldr	r3, [r7, #4]
-    24f2:	831a      	strh	r2, [r3, #24]
-}
-    24f4:	bf00      	nop
-    24f6:	370c      	adds	r7, #12
-    24f8:	46bd      	mov	sp, r7
-    24fa:	bc80      	pop	{r7}
-    24fc:	4770      	bx	lr
-
-000024fe <USART_SmartCardCmd>:
-  *   This parameter can be: ENABLE or DISABLE.     
-  * @note The Smart Card mode is not available for UART4 and UART5. 
-  * @retval None
-  */
-void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    24fe:	b480      	push	{r7}
-    2500:	b083      	sub	sp, #12
-    2502:	af00      	add	r7, sp, #0
-    2504:	6078      	str	r0, [r7, #4]
-    2506:	460b      	mov	r3, r1
-    2508:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_123_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    250a:	78fb      	ldrb	r3, [r7, #3]
-    250c:	2b00      	cmp	r3, #0
-    250e:	d008      	beq.n	2522 <USART_SmartCardCmd+0x24>
-  {
-    /* Enable the SC mode by setting the SCEN bit in the CR3 register */
-    USARTx->CR3 |= CR3_SCEN_Set;
-    2510:	687b      	ldr	r3, [r7, #4]
-    2512:	8a9b      	ldrh	r3, [r3, #20]
-    2514:	b29b      	uxth	r3, r3
-    2516:	f043 0320 	orr.w	r3, r3, #32
-    251a:	b29a      	uxth	r2, r3
-    251c:	687b      	ldr	r3, [r7, #4]
-    251e:	829a      	strh	r2, [r3, #20]
-  else
-  {
-    /* Disable the SC mode by clearing the SCEN bit in the CR3 register */
-    USARTx->CR3 &= CR3_SCEN_Reset;
-  }
-}
-    2520:	e007      	b.n	2532 <USART_SmartCardCmd+0x34>
-    USARTx->CR3 &= CR3_SCEN_Reset;
-    2522:	687b      	ldr	r3, [r7, #4]
-    2524:	8a9b      	ldrh	r3, [r3, #20]
-    2526:	b29b      	uxth	r3, r3
-    2528:	f023 0320 	bic.w	r3, r3, #32
-    252c:	b29a      	uxth	r2, r3
-    252e:	687b      	ldr	r3, [r7, #4]
-    2530:	829a      	strh	r2, [r3, #20]
-}
-    2532:	bf00      	nop
-    2534:	370c      	adds	r7, #12
-    2536:	46bd      	mov	sp, r7
-    2538:	bc80      	pop	{r7}
-    253a:	4770      	bx	lr
-
-0000253c <USART_SmartCardNACKCmd>:
-  *   This parameter can be: ENABLE or DISABLE.  
-  * @note The Smart Card mode is not available for UART4 and UART5.
-  * @retval None
-  */
-void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    253c:	b480      	push	{r7}
-    253e:	b083      	sub	sp, #12
-    2540:	af00      	add	r7, sp, #0
-    2542:	6078      	str	r0, [r7, #4]
-    2544:	460b      	mov	r3, r1
-    2546:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_123_PERIPH(USARTx));  
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2548:	78fb      	ldrb	r3, [r7, #3]
-    254a:	2b00      	cmp	r3, #0
-    254c:	d008      	beq.n	2560 <USART_SmartCardNACKCmd+0x24>
-  {
-    /* Enable the NACK transmission by setting the NACK bit in the CR3 register */
-    USARTx->CR3 |= CR3_NACK_Set;
-    254e:	687b      	ldr	r3, [r7, #4]
-    2550:	8a9b      	ldrh	r3, [r3, #20]
-    2552:	b29b      	uxth	r3, r3
-    2554:	f043 0310 	orr.w	r3, r3, #16
-    2558:	b29a      	uxth	r2, r3
-    255a:	687b      	ldr	r3, [r7, #4]
-    255c:	829a      	strh	r2, [r3, #20]
-  else
-  {
-    /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */
-    USARTx->CR3 &= CR3_NACK_Reset;
-  }
-}
-    255e:	e007      	b.n	2570 <USART_SmartCardNACKCmd+0x34>
-    USARTx->CR3 &= CR3_NACK_Reset;
-    2560:	687b      	ldr	r3, [r7, #4]
-    2562:	8a9b      	ldrh	r3, [r3, #20]
-    2564:	b29b      	uxth	r3, r3
-    2566:	f023 0310 	bic.w	r3, r3, #16
-    256a:	b29a      	uxth	r2, r3
-    256c:	687b      	ldr	r3, [r7, #4]
-    256e:	829a      	strh	r2, [r3, #20]
-}
-    2570:	bf00      	nop
-    2572:	370c      	adds	r7, #12
-    2574:	46bd      	mov	sp, r7
-    2576:	bc80      	pop	{r7}
-    2578:	4770      	bx	lr
-
-0000257a <USART_HalfDuplexCmd>:
-  * @param  NewState: new state of the USART Communication.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    257a:	b480      	push	{r7}
-    257c:	b083      	sub	sp, #12
-    257e:	af00      	add	r7, sp, #0
-    2580:	6078      	str	r0, [r7, #4]
-    2582:	460b      	mov	r3, r1
-    2584:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    2586:	78fb      	ldrb	r3, [r7, #3]
-    2588:	2b00      	cmp	r3, #0
-    258a:	d008      	beq.n	259e <USART_HalfDuplexCmd+0x24>
-  {
-    /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
-    USARTx->CR3 |= CR3_HDSEL_Set;
-    258c:	687b      	ldr	r3, [r7, #4]
-    258e:	8a9b      	ldrh	r3, [r3, #20]
-    2590:	b29b      	uxth	r3, r3
-    2592:	f043 0308 	orr.w	r3, r3, #8
-    2596:	b29a      	uxth	r2, r3
-    2598:	687b      	ldr	r3, [r7, #4]
-    259a:	829a      	strh	r2, [r3, #20]
-  else
-  {
-    /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */
-    USARTx->CR3 &= CR3_HDSEL_Reset;
-  }
-}
-    259c:	e007      	b.n	25ae <USART_HalfDuplexCmd+0x34>
-    USARTx->CR3 &= CR3_HDSEL_Reset;
-    259e:	687b      	ldr	r3, [r7, #4]
-    25a0:	8a9b      	ldrh	r3, [r3, #20]
-    25a2:	b29b      	uxth	r3, r3
-    25a4:	f023 0308 	bic.w	r3, r3, #8
-    25a8:	b29a      	uxth	r2, r3
-    25aa:	687b      	ldr	r3, [r7, #4]
-    25ac:	829a      	strh	r2, [r3, #20]
-}
-    25ae:	bf00      	nop
-    25b0:	370c      	adds	r7, #12
-    25b2:	46bd      	mov	sp, r7
-    25b4:	bc80      	pop	{r7}
-    25b6:	4770      	bx	lr
-
-000025b8 <USART_OverSampling8Cmd>:
-  *     This function has to be called before calling USART_Init()
-  *     function in order to have correct baudrate Divider value.   
-  * @retval None
-  */
-void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    25b8:	b480      	push	{r7}
-    25ba:	b083      	sub	sp, #12
-    25bc:	af00      	add	r7, sp, #0
-    25be:	6078      	str	r0, [r7, #4]
-    25c0:	460b      	mov	r3, r1
-    25c2:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    25c4:	78fb      	ldrb	r3, [r7, #3]
-    25c6:	2b00      	cmp	r3, #0
-    25c8:	d00a      	beq.n	25e0 <USART_OverSampling8Cmd+0x28>
-  {
-    /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */
-    USARTx->CR1 |= CR1_OVER8_Set;
-    25ca:	687b      	ldr	r3, [r7, #4]
-    25cc:	899b      	ldrh	r3, [r3, #12]
-    25ce:	b29b      	uxth	r3, r3
-    25d0:	ea6f 4343 	mvn.w	r3, r3, lsl #17
-    25d4:	ea6f 4353 	mvn.w	r3, r3, lsr #17
-    25d8:	b29a      	uxth	r2, r3
-    25da:	687b      	ldr	r3, [r7, #4]
-    25dc:	819a      	strh	r2, [r3, #12]
-  else
-  {
-    /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */
-    USARTx->CR1 &= CR1_OVER8_Reset;
-  }
-}
-    25de:	e007      	b.n	25f0 <USART_OverSampling8Cmd+0x38>
-    USARTx->CR1 &= CR1_OVER8_Reset;
-    25e0:	687b      	ldr	r3, [r7, #4]
-    25e2:	899b      	ldrh	r3, [r3, #12]
-    25e4:	b29b      	uxth	r3, r3
-    25e6:	f3c3 030e 	ubfx	r3, r3, #0, #15
-    25ea:	b29a      	uxth	r2, r3
-    25ec:	687b      	ldr	r3, [r7, #4]
-    25ee:	819a      	strh	r2, [r3, #12]
-}
-    25f0:	bf00      	nop
-    25f2:	370c      	adds	r7, #12
-    25f4:	46bd      	mov	sp, r7
-    25f6:	bc80      	pop	{r7}
-    25f8:	4770      	bx	lr
-
-000025fa <USART_OneBitMethodCmd>:
-  * @param  NewState: new state of the USART one bit sampling method.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    25fa:	b480      	push	{r7}
-    25fc:	b083      	sub	sp, #12
-    25fe:	af00      	add	r7, sp, #0
-    2600:	6078      	str	r0, [r7, #4]
-    2602:	460b      	mov	r3, r1
-    2604:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    2606:	78fb      	ldrb	r3, [r7, #3]
-    2608:	2b00      	cmp	r3, #0
-    260a:	d008      	beq.n	261e <USART_OneBitMethodCmd+0x24>
-  {
-    /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */
-    USARTx->CR3 |= CR3_ONEBITE_Set;
-    260c:	687b      	ldr	r3, [r7, #4]
-    260e:	8a9b      	ldrh	r3, [r3, #20]
-    2610:	b29b      	uxth	r3, r3
-    2612:	f443 6300 	orr.w	r3, r3, #2048	; 0x800
-    2616:	b29a      	uxth	r2, r3
-    2618:	687b      	ldr	r3, [r7, #4]
-    261a:	829a      	strh	r2, [r3, #20]
-  else
-  {
-    /* Disable tthe one bit method by clearing the ONEBITE bit in the CR3 register */
-    USARTx->CR3 &= CR3_ONEBITE_Reset;
-  }
-}
-    261c:	e007      	b.n	262e <USART_OneBitMethodCmd+0x34>
-    USARTx->CR3 &= CR3_ONEBITE_Reset;
-    261e:	687b      	ldr	r3, [r7, #4]
-    2620:	8a9b      	ldrh	r3, [r3, #20]
-    2622:	b29b      	uxth	r3, r3
-    2624:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    2628:	b29a      	uxth	r2, r3
-    262a:	687b      	ldr	r3, [r7, #4]
-    262c:	829a      	strh	r2, [r3, #20]
-}
-    262e:	bf00      	nop
-    2630:	370c      	adds	r7, #12
-    2632:	46bd      	mov	sp, r7
-    2634:	bc80      	pop	{r7}
-    2636:	4770      	bx	lr
-
-00002638 <USART_IrDAConfig>:
-  *     @arg USART_IrDAMode_LowPower
-  *     @arg USART_IrDAMode_Normal
-  * @retval None
-  */
-void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)
-{
-    2638:	b480      	push	{r7}
-    263a:	b083      	sub	sp, #12
-    263c:	af00      	add	r7, sp, #0
-    263e:	6078      	str	r0, [r7, #4]
-    2640:	460b      	mov	r3, r1
-    2642:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
-    
-  USARTx->CR3 &= CR3_IRLP_Mask;
-    2644:	687b      	ldr	r3, [r7, #4]
-    2646:	8a9b      	ldrh	r3, [r3, #20]
-    2648:	b29b      	uxth	r3, r3
-    264a:	f023 0304 	bic.w	r3, r3, #4
-    264e:	b29a      	uxth	r2, r3
-    2650:	687b      	ldr	r3, [r7, #4]
-    2652:	829a      	strh	r2, [r3, #20]
-  USARTx->CR3 |= USART_IrDAMode;
-    2654:	687b      	ldr	r3, [r7, #4]
-    2656:	8a9b      	ldrh	r3, [r3, #20]
-    2658:	b29a      	uxth	r2, r3
-    265a:	887b      	ldrh	r3, [r7, #2]
-    265c:	4313      	orrs	r3, r2
-    265e:	b29a      	uxth	r2, r3
-    2660:	687b      	ldr	r3, [r7, #4]
-    2662:	829a      	strh	r2, [r3, #20]
-}
-    2664:	bf00      	nop
-    2666:	370c      	adds	r7, #12
-    2668:	46bd      	mov	sp, r7
-    266a:	bc80      	pop	{r7}
-    266c:	4770      	bx	lr
-
-0000266e <USART_IrDACmd>:
-  * @param  NewState: new state of the IrDA mode.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
-{
-    266e:	b480      	push	{r7}
-    2670:	b083      	sub	sp, #12
-    2672:	af00      	add	r7, sp, #0
-    2674:	6078      	str	r0, [r7, #4]
-    2676:	460b      	mov	r3, r1
-    2678:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_USART_ALL_PERIPH(USARTx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-    
-  if (NewState != DISABLE)
-    267a:	78fb      	ldrb	r3, [r7, #3]
-    267c:	2b00      	cmp	r3, #0
-    267e:	d008      	beq.n	2692 <USART_IrDACmd+0x24>
-  {
-    /* Enable the IrDA mode by setting the IREN bit in the CR3 register */
-    USARTx->CR3 |= CR3_IREN_Set;
-    2680:	687b      	ldr	r3, [r7, #4]
-    2682:	8a9b      	ldrh	r3, [r3, #20]
-    2684:	b29b      	uxth	r3, r3
-    2686:	f043 0302 	orr.w	r3, r3, #2
-    268a:	b29a      	uxth	r2, r3
-    268c:	687b      	ldr	r3, [r7, #4]
-    268e:	829a      	strh	r2, [r3, #20]
-  else
-  {
-    /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */
-    USARTx->CR3 &= CR3_IREN_Reset;
-  }
-}
-    2690:	e007      	b.n	26a2 <USART_IrDACmd+0x34>
-    USARTx->CR3 &= CR3_IREN_Reset;
-    2692:	687b      	ldr	r3, [r7, #4]
-    2694:	8a9b      	ldrh	r3, [r3, #20]
-    2696:	b29b      	uxth	r3, r3
-    2698:	f023 0302 	bic.w	r3, r3, #2
-    269c:	b29a      	uxth	r2, r3
-    269e:	687b      	ldr	r3, [r7, #4]
-    26a0:	829a      	strh	r2, [r3, #20]
-}
-    26a2:	bf00      	nop
-    26a4:	370c      	adds	r7, #12
-    26a6:	46bd      	mov	sp, r7
-    26a8:	bc80      	pop	{r7}
-    26aa:	4770      	bx	lr
-
-000026ac <USART_GetFlagStatus>:
-  *     @arg USART_FLAG_FE:   Framing Error flag
-  *     @arg USART_FLAG_PE:   Parity Error flag
-  * @retval The new state of USART_FLAG (SET or RESET).
-  */
-FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
-{
-    26ac:	b480      	push	{r7}
-    26ae:	b085      	sub	sp, #20
-    26b0:	af00      	add	r7, sp, #0
-    26b2:	6078      	str	r0, [r7, #4]
-    26b4:	460b      	mov	r3, r1
-    26b6:	807b      	strh	r3, [r7, #2]
-  FlagStatus bitstatus = RESET;
-    26b8:	2300      	movs	r3, #0
-    26ba:	73fb      	strb	r3, [r7, #15]
-  if (USART_FLAG == USART_FLAG_CTS)
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  }  
-  
-  if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
-    26bc:	687b      	ldr	r3, [r7, #4]
-    26be:	881b      	ldrh	r3, [r3, #0]
-    26c0:	b29a      	uxth	r2, r3
-    26c2:	887b      	ldrh	r3, [r7, #2]
-    26c4:	4013      	ands	r3, r2
-    26c6:	b29b      	uxth	r3, r3
-    26c8:	2b00      	cmp	r3, #0
-    26ca:	d002      	beq.n	26d2 <USART_GetFlagStatus+0x26>
-  {
-    bitstatus = SET;
-    26cc:	2301      	movs	r3, #1
-    26ce:	73fb      	strb	r3, [r7, #15]
-    26d0:	e001      	b.n	26d6 <USART_GetFlagStatus+0x2a>
-  }
-  else
-  {
-    bitstatus = RESET;
-    26d2:	2300      	movs	r3, #0
-    26d4:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    26d6:	7bfb      	ldrb	r3, [r7, #15]
-}
-    26d8:	4618      	mov	r0, r3
-    26da:	3714      	adds	r7, #20
-    26dc:	46bd      	mov	sp, r7
-    26de:	bc80      	pop	{r7}
-    26e0:	4770      	bx	lr
-
-000026e2 <USART_ClearFlag>:
-  *   - TXE flag is cleared only by a write to the USART_DR register 
-  *     (USART_SendData()).
-  * @retval None
-  */
-void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
-{
-    26e2:	b480      	push	{r7}
-    26e4:	b083      	sub	sp, #12
-    26e6:	af00      	add	r7, sp, #0
-    26e8:	6078      	str	r0, [r7, #4]
-    26ea:	460b      	mov	r3, r1
-    26ec:	807b      	strh	r3, [r7, #2]
-  if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  } 
-   
-  USARTx->SR = (uint16_t)~USART_FLAG;
-    26ee:	887b      	ldrh	r3, [r7, #2]
-    26f0:	43db      	mvns	r3, r3
-    26f2:	b29a      	uxth	r2, r3
-    26f4:	687b      	ldr	r3, [r7, #4]
-    26f6:	801a      	strh	r2, [r3, #0]
-}
-    26f8:	bf00      	nop
-    26fa:	370c      	adds	r7, #12
-    26fc:	46bd      	mov	sp, r7
-    26fe:	bc80      	pop	{r7}
-    2700:	4770      	bx	lr
-
-00002702 <USART_GetITStatus>:
-  *     @arg USART_IT_FE:   Framing Error interrupt
-  *     @arg USART_IT_PE:   Parity Error interrupt
-  * @retval The new state of USART_IT (SET or RESET).
-  */
-ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
-{
-    2702:	b480      	push	{r7}
-    2704:	b087      	sub	sp, #28
-    2706:	af00      	add	r7, sp, #0
-    2708:	6078      	str	r0, [r7, #4]
-    270a:	460b      	mov	r3, r1
-    270c:	807b      	strh	r3, [r7, #2]
-  uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
-    270e:	2300      	movs	r3, #0
-    2710:	60fb      	str	r3, [r7, #12]
-    2712:	2300      	movs	r3, #0
-    2714:	617b      	str	r3, [r7, #20]
-    2716:	2300      	movs	r3, #0
-    2718:	60bb      	str	r3, [r7, #8]
-  ITStatus bitstatus = RESET;
-    271a:	2300      	movs	r3, #0
-    271c:	74fb      	strb	r3, [r7, #19]
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  }   
-  
-  /* Get the USART register index */
-  usartreg = (((uint8_t)USART_IT) >> 0x05);
-    271e:	887b      	ldrh	r3, [r7, #2]
-    2720:	b2db      	uxtb	r3, r3
-    2722:	095b      	lsrs	r3, r3, #5
-    2724:	b2db      	uxtb	r3, r3
-    2726:	60bb      	str	r3, [r7, #8]
-  /* Get the interrupt position */
-  itmask = USART_IT & IT_Mask;
-    2728:	887b      	ldrh	r3, [r7, #2]
-    272a:	f003 031f 	and.w	r3, r3, #31
-    272e:	617b      	str	r3, [r7, #20]
-  itmask = (uint32_t)0x01 << itmask;
-    2730:	2201      	movs	r2, #1
-    2732:	697b      	ldr	r3, [r7, #20]
-    2734:	fa02 f303 	lsl.w	r3, r2, r3
-    2738:	617b      	str	r3, [r7, #20]
-  
-  if (usartreg == 0x01) /* The IT  is in CR1 register */
-    273a:	68bb      	ldr	r3, [r7, #8]
-    273c:	2b01      	cmp	r3, #1
-    273e:	d107      	bne.n	2750 <USART_GetITStatus+0x4e>
-  {
-    itmask &= USARTx->CR1;
-    2740:	687b      	ldr	r3, [r7, #4]
-    2742:	899b      	ldrh	r3, [r3, #12]
-    2744:	b29b      	uxth	r3, r3
-    2746:	461a      	mov	r2, r3
-    2748:	697b      	ldr	r3, [r7, #20]
-    274a:	4013      	ands	r3, r2
-    274c:	617b      	str	r3, [r7, #20]
-    274e:	e011      	b.n	2774 <USART_GetITStatus+0x72>
-  }
-  else if (usartreg == 0x02) /* The IT  is in CR2 register */
-    2750:	68bb      	ldr	r3, [r7, #8]
-    2752:	2b02      	cmp	r3, #2
-    2754:	d107      	bne.n	2766 <USART_GetITStatus+0x64>
-  {
-    itmask &= USARTx->CR2;
-    2756:	687b      	ldr	r3, [r7, #4]
-    2758:	8a1b      	ldrh	r3, [r3, #16]
-    275a:	b29b      	uxth	r3, r3
-    275c:	461a      	mov	r2, r3
-    275e:	697b      	ldr	r3, [r7, #20]
-    2760:	4013      	ands	r3, r2
-    2762:	617b      	str	r3, [r7, #20]
-    2764:	e006      	b.n	2774 <USART_GetITStatus+0x72>
-  }
-  else /* The IT  is in CR3 register */
-  {
-    itmask &= USARTx->CR3;
-    2766:	687b      	ldr	r3, [r7, #4]
-    2768:	8a9b      	ldrh	r3, [r3, #20]
-    276a:	b29b      	uxth	r3, r3
-    276c:	461a      	mov	r2, r3
-    276e:	697b      	ldr	r3, [r7, #20]
-    2770:	4013      	ands	r3, r2
-    2772:	617b      	str	r3, [r7, #20]
-  }
-  
-  bitpos = USART_IT >> 0x08;
-    2774:	887b      	ldrh	r3, [r7, #2]
-    2776:	0a1b      	lsrs	r3, r3, #8
-    2778:	b29b      	uxth	r3, r3
-    277a:	60fb      	str	r3, [r7, #12]
-  bitpos = (uint32_t)0x01 << bitpos;
-    277c:	2201      	movs	r2, #1
-    277e:	68fb      	ldr	r3, [r7, #12]
-    2780:	fa02 f303 	lsl.w	r3, r2, r3
-    2784:	60fb      	str	r3, [r7, #12]
-  bitpos &= USARTx->SR;
-    2786:	687b      	ldr	r3, [r7, #4]
-    2788:	881b      	ldrh	r3, [r3, #0]
-    278a:	b29b      	uxth	r3, r3
-    278c:	461a      	mov	r2, r3
-    278e:	68fb      	ldr	r3, [r7, #12]
-    2790:	4013      	ands	r3, r2
-    2792:	60fb      	str	r3, [r7, #12]
-  if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
-    2794:	697b      	ldr	r3, [r7, #20]
-    2796:	2b00      	cmp	r3, #0
-    2798:	d005      	beq.n	27a6 <USART_GetITStatus+0xa4>
-    279a:	68fb      	ldr	r3, [r7, #12]
-    279c:	2b00      	cmp	r3, #0
-    279e:	d002      	beq.n	27a6 <USART_GetITStatus+0xa4>
-  {
-    bitstatus = SET;
-    27a0:	2301      	movs	r3, #1
-    27a2:	74fb      	strb	r3, [r7, #19]
-    27a4:	e001      	b.n	27aa <USART_GetITStatus+0xa8>
-  }
-  else
-  {
-    bitstatus = RESET;
-    27a6:	2300      	movs	r3, #0
-    27a8:	74fb      	strb	r3, [r7, #19]
-  }
-  
-  return bitstatus;  
-    27aa:	7cfb      	ldrb	r3, [r7, #19]
-}
-    27ac:	4618      	mov	r0, r3
-    27ae:	371c      	adds	r7, #28
-    27b0:	46bd      	mov	sp, r7
-    27b2:	bc80      	pop	{r7}
-    27b4:	4770      	bx	lr
-
-000027b6 <USART_ClearITPendingBit>:
-  *   - TXE pending bit is cleared only by a write to the USART_DR register 
-  *     (USART_SendData()).
-  * @retval None
-  */
-void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
-{
-    27b6:	b480      	push	{r7}
-    27b8:	b085      	sub	sp, #20
-    27ba:	af00      	add	r7, sp, #0
-    27bc:	6078      	str	r0, [r7, #4]
-    27be:	460b      	mov	r3, r1
-    27c0:	807b      	strh	r3, [r7, #2]
-  uint16_t bitpos = 0x00, itmask = 0x00;
-    27c2:	2300      	movs	r3, #0
-    27c4:	81fb      	strh	r3, [r7, #14]
-    27c6:	2300      	movs	r3, #0
-    27c8:	81bb      	strh	r3, [r7, #12]
-  if (USART_IT == USART_IT_CTS)
-  {
-    assert_param(IS_USART_123_PERIPH(USARTx));
-  }   
-  
-  bitpos = USART_IT >> 0x08;
-    27ca:	887b      	ldrh	r3, [r7, #2]
-    27cc:	0a1b      	lsrs	r3, r3, #8
-    27ce:	81fb      	strh	r3, [r7, #14]
-  itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
-    27d0:	89fb      	ldrh	r3, [r7, #14]
-    27d2:	2201      	movs	r2, #1
-    27d4:	fa02 f303 	lsl.w	r3, r2, r3
-    27d8:	81bb      	strh	r3, [r7, #12]
-  USARTx->SR = (uint16_t)~itmask;
-    27da:	89bb      	ldrh	r3, [r7, #12]
-    27dc:	43db      	mvns	r3, r3
-    27de:	b29a      	uxth	r2, r3
-    27e0:	687b      	ldr	r3, [r7, #4]
-    27e2:	801a      	strh	r2, [r3, #0]
-}
-    27e4:	bf00      	nop
-    27e6:	3714      	adds	r7, #20
-    27e8:	46bd      	mov	sp, r7
-    27ea:	bc80      	pop	{r7}
-    27ec:	4770      	bx	lr
-    27ee:	bf00      	nop
-
-000027f0 <EXTI_DeInit>:
-  * @brief  Deinitializes the EXTI peripheral registers to their default reset values.
-  * @param  None
-  * @retval None
-  */
-void EXTI_DeInit(void)
-{
-    27f0:	b480      	push	{r7}
-    27f2:	af00      	add	r7, sp, #0
-  EXTI->IMR = 0x00000000;
-    27f4:	4b09      	ldr	r3, [pc, #36]	; (281c <EXTI_DeInit+0x2c>)
-    27f6:	2200      	movs	r2, #0
-    27f8:	601a      	str	r2, [r3, #0]
-  EXTI->EMR = 0x00000000;
-    27fa:	4b08      	ldr	r3, [pc, #32]	; (281c <EXTI_DeInit+0x2c>)
-    27fc:	2200      	movs	r2, #0
-    27fe:	605a      	str	r2, [r3, #4]
-  EXTI->RTSR = 0x00000000; 
-    2800:	4b06      	ldr	r3, [pc, #24]	; (281c <EXTI_DeInit+0x2c>)
-    2802:	2200      	movs	r2, #0
-    2804:	609a      	str	r2, [r3, #8]
-  EXTI->FTSR = 0x00000000; 
-    2806:	4b05      	ldr	r3, [pc, #20]	; (281c <EXTI_DeInit+0x2c>)
-    2808:	2200      	movs	r2, #0
-    280a:	60da      	str	r2, [r3, #12]
-  EXTI->PR = 0x000FFFFF;
-    280c:	4b03      	ldr	r3, [pc, #12]	; (281c <EXTI_DeInit+0x2c>)
-    280e:	4a04      	ldr	r2, [pc, #16]	; (2820 <EXTI_DeInit+0x30>)
-    2810:	615a      	str	r2, [r3, #20]
-}
-    2812:	bf00      	nop
-    2814:	46bd      	mov	sp, r7
-    2816:	bc80      	pop	{r7}
-    2818:	4770      	bx	lr
-    281a:	bf00      	nop
-    281c:	40010400 	.word	0x40010400
-    2820:	000fffff 	.word	0x000fffff
-
-00002824 <EXTI_Init>:
-  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
-  *         that contains the configuration information for the EXTI peripheral.
-  * @retval None
-  */
-void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
-{
-    2824:	b480      	push	{r7}
-    2826:	b085      	sub	sp, #20
-    2828:	af00      	add	r7, sp, #0
-    282a:	6078      	str	r0, [r7, #4]
-  uint32_t tmp = 0;
-    282c:	2300      	movs	r3, #0
-    282e:	60fb      	str	r3, [r7, #12]
-  assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
-  assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
-  assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));  
-  assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
-
-  tmp = (uint32_t)EXTI_BASE;
-    2830:	4b34      	ldr	r3, [pc, #208]	; (2904 <EXTI_Init+0xe0>)
-    2832:	60fb      	str	r3, [r7, #12]
-     
-  if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
-    2834:	687b      	ldr	r3, [r7, #4]
-    2836:	799b      	ldrb	r3, [r3, #6]
-    2838:	2b00      	cmp	r3, #0
-    283a:	d04f      	beq.n	28dc <EXTI_Init+0xb8>
-  {
-    /* Clear EXTI line configuration */
-    EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
-    283c:	4b31      	ldr	r3, [pc, #196]	; (2904 <EXTI_Init+0xe0>)
-    283e:	681a      	ldr	r2, [r3, #0]
-    2840:	687b      	ldr	r3, [r7, #4]
-    2842:	681b      	ldr	r3, [r3, #0]
-    2844:	43db      	mvns	r3, r3
-    2846:	492f      	ldr	r1, [pc, #188]	; (2904 <EXTI_Init+0xe0>)
-    2848:	4013      	ands	r3, r2
-    284a:	600b      	str	r3, [r1, #0]
-    EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
-    284c:	4b2d      	ldr	r3, [pc, #180]	; (2904 <EXTI_Init+0xe0>)
-    284e:	685a      	ldr	r2, [r3, #4]
-    2850:	687b      	ldr	r3, [r7, #4]
-    2852:	681b      	ldr	r3, [r3, #0]
-    2854:	43db      	mvns	r3, r3
-    2856:	492b      	ldr	r1, [pc, #172]	; (2904 <EXTI_Init+0xe0>)
-    2858:	4013      	ands	r3, r2
-    285a:	604b      	str	r3, [r1, #4]
-    
-    tmp += EXTI_InitStruct->EXTI_Mode;
-    285c:	687b      	ldr	r3, [r7, #4]
-    285e:	791b      	ldrb	r3, [r3, #4]
-    2860:	461a      	mov	r2, r3
-    2862:	68fb      	ldr	r3, [r7, #12]
-    2864:	4413      	add	r3, r2
-    2866:	60fb      	str	r3, [r7, #12]
-
-    *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
-    2868:	68fb      	ldr	r3, [r7, #12]
-    286a:	6819      	ldr	r1, [r3, #0]
-    286c:	687b      	ldr	r3, [r7, #4]
-    286e:	681a      	ldr	r2, [r3, #0]
-    2870:	68fb      	ldr	r3, [r7, #12]
-    2872:	430a      	orrs	r2, r1
-    2874:	601a      	str	r2, [r3, #0]
-
-    /* Clear Rising Falling edge configuration */
-    EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
-    2876:	4b23      	ldr	r3, [pc, #140]	; (2904 <EXTI_Init+0xe0>)
-    2878:	689a      	ldr	r2, [r3, #8]
-    287a:	687b      	ldr	r3, [r7, #4]
-    287c:	681b      	ldr	r3, [r3, #0]
-    287e:	43db      	mvns	r3, r3
-    2880:	4920      	ldr	r1, [pc, #128]	; (2904 <EXTI_Init+0xe0>)
-    2882:	4013      	ands	r3, r2
-    2884:	608b      	str	r3, [r1, #8]
-    EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
-    2886:	4b1f      	ldr	r3, [pc, #124]	; (2904 <EXTI_Init+0xe0>)
-    2888:	68da      	ldr	r2, [r3, #12]
-    288a:	687b      	ldr	r3, [r7, #4]
-    288c:	681b      	ldr	r3, [r3, #0]
-    288e:	43db      	mvns	r3, r3
-    2890:	491c      	ldr	r1, [pc, #112]	; (2904 <EXTI_Init+0xe0>)
-    2892:	4013      	ands	r3, r2
-    2894:	60cb      	str	r3, [r1, #12]
-    
-    /* Select the trigger for the selected external interrupts */
-    if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
-    2896:	687b      	ldr	r3, [r7, #4]
-    2898:	795b      	ldrb	r3, [r3, #5]
-    289a:	2b10      	cmp	r3, #16
-    289c:	d10e      	bne.n	28bc <EXTI_Init+0x98>
-    {
-      /* Rising Falling edge */
-      EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
-    289e:	4b19      	ldr	r3, [pc, #100]	; (2904 <EXTI_Init+0xe0>)
-    28a0:	689a      	ldr	r2, [r3, #8]
-    28a2:	687b      	ldr	r3, [r7, #4]
-    28a4:	681b      	ldr	r3, [r3, #0]
-    28a6:	4917      	ldr	r1, [pc, #92]	; (2904 <EXTI_Init+0xe0>)
-    28a8:	4313      	orrs	r3, r2
-    28aa:	608b      	str	r3, [r1, #8]
-      EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
-    28ac:	4b15      	ldr	r3, [pc, #84]	; (2904 <EXTI_Init+0xe0>)
-    28ae:	68da      	ldr	r2, [r3, #12]
-    28b0:	687b      	ldr	r3, [r7, #4]
-    28b2:	681b      	ldr	r3, [r3, #0]
-    28b4:	4913      	ldr	r1, [pc, #76]	; (2904 <EXTI_Init+0xe0>)
-    28b6:	4313      	orrs	r3, r2
-    28b8:	60cb      	str	r3, [r1, #12]
-    tmp += EXTI_InitStruct->EXTI_Mode;
-
-    /* Disable the selected external lines */
-    *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
-  }
-}
-    28ba:	e01d      	b.n	28f8 <EXTI_Init+0xd4>
-      tmp = (uint32_t)EXTI_BASE;
-    28bc:	4b11      	ldr	r3, [pc, #68]	; (2904 <EXTI_Init+0xe0>)
-    28be:	60fb      	str	r3, [r7, #12]
-      tmp += EXTI_InitStruct->EXTI_Trigger;
-    28c0:	687b      	ldr	r3, [r7, #4]
-    28c2:	795b      	ldrb	r3, [r3, #5]
-    28c4:	461a      	mov	r2, r3
-    28c6:	68fb      	ldr	r3, [r7, #12]
-    28c8:	4413      	add	r3, r2
-    28ca:	60fb      	str	r3, [r7, #12]
-      *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
-    28cc:	68fb      	ldr	r3, [r7, #12]
-    28ce:	6819      	ldr	r1, [r3, #0]
-    28d0:	687b      	ldr	r3, [r7, #4]
-    28d2:	681a      	ldr	r2, [r3, #0]
-    28d4:	68fb      	ldr	r3, [r7, #12]
-    28d6:	430a      	orrs	r2, r1
-    28d8:	601a      	str	r2, [r3, #0]
-}
-    28da:	e00d      	b.n	28f8 <EXTI_Init+0xd4>
-    tmp += EXTI_InitStruct->EXTI_Mode;
-    28dc:	687b      	ldr	r3, [r7, #4]
-    28de:	791b      	ldrb	r3, [r3, #4]
-    28e0:	461a      	mov	r2, r3
-    28e2:	68fb      	ldr	r3, [r7, #12]
-    28e4:	4413      	add	r3, r2
-    28e6:	60fb      	str	r3, [r7, #12]
-    *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
-    28e8:	68fb      	ldr	r3, [r7, #12]
-    28ea:	6819      	ldr	r1, [r3, #0]
-    28ec:	687b      	ldr	r3, [r7, #4]
-    28ee:	681b      	ldr	r3, [r3, #0]
-    28f0:	43da      	mvns	r2, r3
-    28f2:	68fb      	ldr	r3, [r7, #12]
-    28f4:	400a      	ands	r2, r1
-    28f6:	601a      	str	r2, [r3, #0]
-}
-    28f8:	bf00      	nop
-    28fa:	3714      	adds	r7, #20
-    28fc:	46bd      	mov	sp, r7
-    28fe:	bc80      	pop	{r7}
-    2900:	4770      	bx	lr
-    2902:	bf00      	nop
-    2904:	40010400 	.word	0x40010400
-
-00002908 <EXTI_StructInit>:
-  * @param  EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
-{
-    2908:	b480      	push	{r7}
-    290a:	b083      	sub	sp, #12
-    290c:	af00      	add	r7, sp, #0
-    290e:	6078      	str	r0, [r7, #4]
-  EXTI_InitStruct->EXTI_Line = EXTI_LINENONE;
-    2910:	687b      	ldr	r3, [r7, #4]
-    2912:	2200      	movs	r2, #0
-    2914:	601a      	str	r2, [r3, #0]
-  EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
-    2916:	687b      	ldr	r3, [r7, #4]
-    2918:	2200      	movs	r2, #0
-    291a:	711a      	strb	r2, [r3, #4]
-  EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
-    291c:	687b      	ldr	r3, [r7, #4]
-    291e:	220c      	movs	r2, #12
-    2920:	715a      	strb	r2, [r3, #5]
-  EXTI_InitStruct->EXTI_LineCmd = DISABLE;
-    2922:	687b      	ldr	r3, [r7, #4]
-    2924:	2200      	movs	r2, #0
-    2926:	719a      	strb	r2, [r3, #6]
-}
-    2928:	bf00      	nop
-    292a:	370c      	adds	r7, #12
-    292c:	46bd      	mov	sp, r7
-    292e:	bc80      	pop	{r7}
-    2930:	4770      	bx	lr
-
-00002932 <EXTI_GenerateSWInterrupt>:
-  * @param  EXTI_Line: specifies the EXTI lines to be enabled or disabled.
-  *   This parameter can be any combination of EXTI_Linex where x can be (0..19).
-  * @retval None
-  */
-void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line)
-{
-    2932:	b480      	push	{r7}
-    2934:	b083      	sub	sp, #12
-    2936:	af00      	add	r7, sp, #0
-    2938:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_EXTI_LINE(EXTI_Line));
-  
-  EXTI->SWIER |= EXTI_Line;
-    293a:	4b05      	ldr	r3, [pc, #20]	; (2950 <EXTI_GenerateSWInterrupt+0x1e>)
-    293c:	691a      	ldr	r2, [r3, #16]
-    293e:	4904      	ldr	r1, [pc, #16]	; (2950 <EXTI_GenerateSWInterrupt+0x1e>)
-    2940:	687b      	ldr	r3, [r7, #4]
-    2942:	4313      	orrs	r3, r2
-    2944:	610b      	str	r3, [r1, #16]
-}
-    2946:	bf00      	nop
-    2948:	370c      	adds	r7, #12
-    294a:	46bd      	mov	sp, r7
-    294c:	bc80      	pop	{r7}
-    294e:	4770      	bx	lr
-    2950:	40010400 	.word	0x40010400
-
-00002954 <EXTI_GetFlagStatus>:
-  *   This parameter can be:
-  *     @arg EXTI_Linex: External interrupt line x where x(0..19)
-  * @retval The new state of EXTI_Line (SET or RESET).
-  */
-FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)
-{
-    2954:	b480      	push	{r7}
-    2956:	b085      	sub	sp, #20
-    2958:	af00      	add	r7, sp, #0
-    295a:	6078      	str	r0, [r7, #4]
-  FlagStatus bitstatus = RESET;
-    295c:	2300      	movs	r3, #0
-    295e:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_GET_EXTI_LINE(EXTI_Line));
-  
-  if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET)
-    2960:	4b08      	ldr	r3, [pc, #32]	; (2984 <EXTI_GetFlagStatus+0x30>)
-    2962:	695a      	ldr	r2, [r3, #20]
-    2964:	687b      	ldr	r3, [r7, #4]
-    2966:	4013      	ands	r3, r2
-    2968:	2b00      	cmp	r3, #0
-    296a:	d002      	beq.n	2972 <EXTI_GetFlagStatus+0x1e>
-  {
-    bitstatus = SET;
-    296c:	2301      	movs	r3, #1
-    296e:	73fb      	strb	r3, [r7, #15]
-    2970:	e001      	b.n	2976 <EXTI_GetFlagStatus+0x22>
-  }
-  else
-  {
-    bitstatus = RESET;
-    2972:	2300      	movs	r3, #0
-    2974:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    2976:	7bfb      	ldrb	r3, [r7, #15]
-}
-    2978:	4618      	mov	r0, r3
-    297a:	3714      	adds	r7, #20
-    297c:	46bd      	mov	sp, r7
-    297e:	bc80      	pop	{r7}
-    2980:	4770      	bx	lr
-    2982:	bf00      	nop
-    2984:	40010400 	.word	0x40010400
-
-00002988 <EXTI_ClearFlag>:
-  * @param  EXTI_Line: specifies the EXTI lines flags to clear.
-  *   This parameter can be any combination of EXTI_Linex where x can be (0..19).
-  * @retval None
-  */
-void EXTI_ClearFlag(uint32_t EXTI_Line)
-{
-    2988:	b480      	push	{r7}
-    298a:	b083      	sub	sp, #12
-    298c:	af00      	add	r7, sp, #0
-    298e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_EXTI_LINE(EXTI_Line));
-  
-  EXTI->PR = EXTI_Line;
-    2990:	4a03      	ldr	r2, [pc, #12]	; (29a0 <EXTI_ClearFlag+0x18>)
-    2992:	687b      	ldr	r3, [r7, #4]
-    2994:	6153      	str	r3, [r2, #20]
-}
-    2996:	bf00      	nop
-    2998:	370c      	adds	r7, #12
-    299a:	46bd      	mov	sp, r7
-    299c:	bc80      	pop	{r7}
-    299e:	4770      	bx	lr
-    29a0:	40010400 	.word	0x40010400
-
-000029a4 <EXTI_GetITStatus>:
-  *   This parameter can be:
-  *     @arg EXTI_Linex: External interrupt line x where x(0..19)
-  * @retval The new state of EXTI_Line (SET or RESET).
-  */
-ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)
-{
-    29a4:	b480      	push	{r7}
-    29a6:	b085      	sub	sp, #20
-    29a8:	af00      	add	r7, sp, #0
-    29aa:	6078      	str	r0, [r7, #4]
-  ITStatus bitstatus = RESET;
-    29ac:	2300      	movs	r3, #0
-    29ae:	73fb      	strb	r3, [r7, #15]
-  uint32_t enablestatus = 0;
-    29b0:	2300      	movs	r3, #0
-    29b2:	60bb      	str	r3, [r7, #8]
-  /* Check the parameters */
-  assert_param(IS_GET_EXTI_LINE(EXTI_Line));
-  
-  enablestatus =  EXTI->IMR & EXTI_Line;
-    29b4:	4b0c      	ldr	r3, [pc, #48]	; (29e8 <EXTI_GetITStatus+0x44>)
-    29b6:	681b      	ldr	r3, [r3, #0]
-    29b8:	687a      	ldr	r2, [r7, #4]
-    29ba:	4013      	ands	r3, r2
-    29bc:	60bb      	str	r3, [r7, #8]
-  if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET))
-    29be:	4b0a      	ldr	r3, [pc, #40]	; (29e8 <EXTI_GetITStatus+0x44>)
-    29c0:	695a      	ldr	r2, [r3, #20]
-    29c2:	687b      	ldr	r3, [r7, #4]
-    29c4:	4013      	ands	r3, r2
-    29c6:	2b00      	cmp	r3, #0
-    29c8:	d005      	beq.n	29d6 <EXTI_GetITStatus+0x32>
-    29ca:	68bb      	ldr	r3, [r7, #8]
-    29cc:	2b00      	cmp	r3, #0
-    29ce:	d002      	beq.n	29d6 <EXTI_GetITStatus+0x32>
-  {
-    bitstatus = SET;
-    29d0:	2301      	movs	r3, #1
-    29d2:	73fb      	strb	r3, [r7, #15]
-    29d4:	e001      	b.n	29da <EXTI_GetITStatus+0x36>
-  }
-  else
-  {
-    bitstatus = RESET;
-    29d6:	2300      	movs	r3, #0
-    29d8:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    29da:	7bfb      	ldrb	r3, [r7, #15]
-}
-    29dc:	4618      	mov	r0, r3
-    29de:	3714      	adds	r7, #20
-    29e0:	46bd      	mov	sp, r7
-    29e2:	bc80      	pop	{r7}
-    29e4:	4770      	bx	lr
-    29e6:	bf00      	nop
-    29e8:	40010400 	.word	0x40010400
-
-000029ec <EXTI_ClearITPendingBit>:
-  * @param  EXTI_Line: specifies the EXTI lines to clear.
-  *   This parameter can be any combination of EXTI_Linex where x can be (0..19).
-  * @retval None
-  */
-void EXTI_ClearITPendingBit(uint32_t EXTI_Line)
-{
-    29ec:	b480      	push	{r7}
-    29ee:	b083      	sub	sp, #12
-    29f0:	af00      	add	r7, sp, #0
-    29f2:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_EXTI_LINE(EXTI_Line));
-  
-  EXTI->PR = EXTI_Line;
-    29f4:	4a03      	ldr	r2, [pc, #12]	; (2a04 <EXTI_ClearITPendingBit+0x18>)
-    29f6:	687b      	ldr	r3, [r7, #4]
-    29f8:	6153      	str	r3, [r2, #20]
-}
-    29fa:	bf00      	nop
-    29fc:	370c      	adds	r7, #12
-    29fe:	46bd      	mov	sp, r7
-    2a00:	bc80      	pop	{r7}
-    2a02:	4770      	bx	lr
-    2a04:	40010400 	.word	0x40010400
-
-00002a08 <ADC_DeInit>:
-  * @brief  Deinitializes the ADCx peripheral registers to their default reset values.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval None
-  */
-void ADC_DeInit(ADC_TypeDef* ADCx)
-{
-    2a08:	b580      	push	{r7, lr}
-    2a0a:	b082      	sub	sp, #8
-    2a0c:	af00      	add	r7, sp, #0
-    2a0e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  
-  if (ADCx == ADC1)
-    2a10:	687b      	ldr	r3, [r7, #4]
-    2a12:	4a17      	ldr	r2, [pc, #92]	; (2a70 <ADC_DeInit+0x68>)
-    2a14:	4293      	cmp	r3, r2
-    2a16:	d10a      	bne.n	2a2e <ADC_DeInit+0x26>
-  {
-    /* Enable ADC1 reset state */
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, ENABLE);
-    2a18:	2101      	movs	r1, #1
-    2a1a:	f44f 7000 	mov.w	r0, #512	; 0x200
-    2a1e:	f7fe feaf 	bl	1780 <RCC_APB2PeriphResetCmd>
-    /* Release ADC1 from reset state */
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1, DISABLE);
-    2a22:	2100      	movs	r1, #0
-    2a24:	f44f 7000 	mov.w	r0, #512	; 0x200
-    2a28:	f7fe feaa 	bl	1780 <RCC_APB2PeriphResetCmd>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
-      /* Release ADC3 from reset state */
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
-    }
-  }
-}
-    2a2c:	e01c      	b.n	2a68 <ADC_DeInit+0x60>
-  else if (ADCx == ADC2)
-    2a2e:	687b      	ldr	r3, [r7, #4]
-    2a30:	4a10      	ldr	r2, [pc, #64]	; (2a74 <ADC_DeInit+0x6c>)
-    2a32:	4293      	cmp	r3, r2
-    2a34:	d10a      	bne.n	2a4c <ADC_DeInit+0x44>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, ENABLE);
-    2a36:	2101      	movs	r1, #1
-    2a38:	f44f 6080 	mov.w	r0, #1024	; 0x400
-    2a3c:	f7fe fea0 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC2, DISABLE);
-    2a40:	2100      	movs	r1, #0
-    2a42:	f44f 6080 	mov.w	r0, #1024	; 0x400
-    2a46:	f7fe fe9b 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    2a4a:	e00d      	b.n	2a68 <ADC_DeInit+0x60>
-    if (ADCx == ADC3)
-    2a4c:	687b      	ldr	r3, [r7, #4]
-    2a4e:	4a0a      	ldr	r2, [pc, #40]	; (2a78 <ADC_DeInit+0x70>)
-    2a50:	4293      	cmp	r3, r2
-    2a52:	d109      	bne.n	2a68 <ADC_DeInit+0x60>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, ENABLE);
-    2a54:	2101      	movs	r1, #1
-    2a56:	f44f 4000 	mov.w	r0, #32768	; 0x8000
-    2a5a:	f7fe fe91 	bl	1780 <RCC_APB2PeriphResetCmd>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC3, DISABLE);
-    2a5e:	2100      	movs	r1, #0
-    2a60:	f44f 4000 	mov.w	r0, #32768	; 0x8000
-    2a64:	f7fe fe8c 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    2a68:	bf00      	nop
-    2a6a:	3708      	adds	r7, #8
-    2a6c:	46bd      	mov	sp, r7
-    2a6e:	bd80      	pop	{r7, pc}
-    2a70:	40012400 	.word	0x40012400
-    2a74:	40012800 	.word	0x40012800
-    2a78:	40013c00 	.word	0x40013c00
-
-00002a7c <ADC_Init>:
-  * @param  ADC_InitStruct: pointer to an ADC_InitTypeDef structure that contains
-  *         the configuration information for the specified ADC peripheral.
-  * @retval None
-  */
-void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct)
-{
-    2a7c:	b480      	push	{r7}
-    2a7e:	b085      	sub	sp, #20
-    2a80:	af00      	add	r7, sp, #0
-    2a82:	6078      	str	r0, [r7, #4]
-    2a84:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg1 = 0;
-    2a86:	2300      	movs	r3, #0
-    2a88:	60fb      	str	r3, [r7, #12]
-  uint8_t tmpreg2 = 0;
-    2a8a:	2300      	movs	r3, #0
-    2a8c:	72fb      	strb	r3, [r7, #11]
-  assert_param(IS_ADC_DATA_ALIGN(ADC_InitStruct->ADC_DataAlign)); 
-  assert_param(IS_ADC_REGULAR_LENGTH(ADC_InitStruct->ADC_NbrOfChannel));
-
-  /*---------------------------- ADCx CR1 Configuration -----------------*/
-  /* Get the ADCx CR1 value */
-  tmpreg1 = ADCx->CR1;
-    2a8e:	687b      	ldr	r3, [r7, #4]
-    2a90:	685b      	ldr	r3, [r3, #4]
-    2a92:	60fb      	str	r3, [r7, #12]
-  /* Clear DUALMOD and SCAN bits */
-  tmpreg1 &= CR1_CLEAR_Mask;
-    2a94:	68fb      	ldr	r3, [r7, #12]
-    2a96:	f423 2370 	bic.w	r3, r3, #983040	; 0xf0000
-    2a9a:	f423 7380 	bic.w	r3, r3, #256	; 0x100
-    2a9e:	60fb      	str	r3, [r7, #12]
-  /* Configure ADCx: Dual mode and scan conversion mode */
-  /* Set DUALMOD bits according to ADC_Mode value */
-  /* Set SCAN bit according to ADC_ScanConvMode value */
-  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_Mode | ((uint32_t)ADC_InitStruct->ADC_ScanConvMode << 8));
-    2aa0:	683b      	ldr	r3, [r7, #0]
-    2aa2:	681a      	ldr	r2, [r3, #0]
-    2aa4:	683b      	ldr	r3, [r7, #0]
-    2aa6:	791b      	ldrb	r3, [r3, #4]
-    2aa8:	021b      	lsls	r3, r3, #8
-    2aaa:	4313      	orrs	r3, r2
-    2aac:	68fa      	ldr	r2, [r7, #12]
-    2aae:	4313      	orrs	r3, r2
-    2ab0:	60fb      	str	r3, [r7, #12]
-  /* Write to ADCx CR1 */
-  ADCx->CR1 = tmpreg1;
-    2ab2:	687b      	ldr	r3, [r7, #4]
-    2ab4:	68fa      	ldr	r2, [r7, #12]
-    2ab6:	605a      	str	r2, [r3, #4]
-
-  /*---------------------------- ADCx CR2 Configuration -----------------*/
-  /* Get the ADCx CR2 value */
-  tmpreg1 = ADCx->CR2;
-    2ab8:	687b      	ldr	r3, [r7, #4]
-    2aba:	689b      	ldr	r3, [r3, #8]
-    2abc:	60fb      	str	r3, [r7, #12]
-  /* Clear CONT, ALIGN and EXTSEL bits */
-  tmpreg1 &= CR2_CLEAR_Mask;
-    2abe:	68fa      	ldr	r2, [r7, #12]
-    2ac0:	4b16      	ldr	r3, [pc, #88]	; (2b1c <ADC_Init+0xa0>)
-    2ac2:	4013      	ands	r3, r2
-    2ac4:	60fb      	str	r3, [r7, #12]
-  /* Configure ADCx: external trigger event and continuous conversion mode */
-  /* Set ALIGN bit according to ADC_DataAlign value */
-  /* Set EXTSEL bits according to ADC_ExternalTrigConv value */
-  /* Set CONT bit according to ADC_ContinuousConvMode value */
-  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
-    2ac6:	683b      	ldr	r3, [r7, #0]
-    2ac8:	68da      	ldr	r2, [r3, #12]
-    2aca:	683b      	ldr	r3, [r7, #0]
-    2acc:	689b      	ldr	r3, [r3, #8]
-    2ace:	431a      	orrs	r2, r3
-            ((uint32_t)ADC_InitStruct->ADC_ContinuousConvMode << 1));
-    2ad0:	683b      	ldr	r3, [r7, #0]
-    2ad2:	795b      	ldrb	r3, [r3, #5]
-    2ad4:	005b      	lsls	r3, r3, #1
-  tmpreg1 |= (uint32_t)(ADC_InitStruct->ADC_DataAlign | ADC_InitStruct->ADC_ExternalTrigConv |
-    2ad6:	4313      	orrs	r3, r2
-    2ad8:	68fa      	ldr	r2, [r7, #12]
-    2ada:	4313      	orrs	r3, r2
-    2adc:	60fb      	str	r3, [r7, #12]
-  /* Write to ADCx CR2 */
-  ADCx->CR2 = tmpreg1;
-    2ade:	687b      	ldr	r3, [r7, #4]
-    2ae0:	68fa      	ldr	r2, [r7, #12]
-    2ae2:	609a      	str	r2, [r3, #8]
-
-  /*---------------------------- ADCx SQR1 Configuration -----------------*/
-  /* Get the ADCx SQR1 value */
-  tmpreg1 = ADCx->SQR1;
-    2ae4:	687b      	ldr	r3, [r7, #4]
-    2ae6:	6adb      	ldr	r3, [r3, #44]	; 0x2c
-    2ae8:	60fb      	str	r3, [r7, #12]
-  /* Clear L bits */
-  tmpreg1 &= SQR1_CLEAR_Mask;
-    2aea:	68fb      	ldr	r3, [r7, #12]
-    2aec:	f423 0370 	bic.w	r3, r3, #15728640	; 0xf00000
-    2af0:	60fb      	str	r3, [r7, #12]
-  /* Configure ADCx: regular channel sequence length */
-  /* Set L bits according to ADC_NbrOfChannel value */
-  tmpreg2 |= (uint8_t) (ADC_InitStruct->ADC_NbrOfChannel - (uint8_t)1);
-    2af2:	683b      	ldr	r3, [r7, #0]
-    2af4:	7c1b      	ldrb	r3, [r3, #16]
-    2af6:	3b01      	subs	r3, #1
-    2af8:	b2da      	uxtb	r2, r3
-    2afa:	7afb      	ldrb	r3, [r7, #11]
-    2afc:	4313      	orrs	r3, r2
-    2afe:	72fb      	strb	r3, [r7, #11]
-  tmpreg1 |= (uint32_t)tmpreg2 << 20;
-    2b00:	7afb      	ldrb	r3, [r7, #11]
-    2b02:	051b      	lsls	r3, r3, #20
-    2b04:	68fa      	ldr	r2, [r7, #12]
-    2b06:	4313      	orrs	r3, r2
-    2b08:	60fb      	str	r3, [r7, #12]
-  /* Write to ADCx SQR1 */
-  ADCx->SQR1 = tmpreg1;
-    2b0a:	687b      	ldr	r3, [r7, #4]
-    2b0c:	68fa      	ldr	r2, [r7, #12]
-    2b0e:	62da      	str	r2, [r3, #44]	; 0x2c
-}
-    2b10:	bf00      	nop
-    2b12:	3714      	adds	r7, #20
-    2b14:	46bd      	mov	sp, r7
-    2b16:	bc80      	pop	{r7}
-    2b18:	4770      	bx	lr
-    2b1a:	bf00      	nop
-    2b1c:	fff1f7fd 	.word	0xfff1f7fd
-
-00002b20 <ADC_StructInit>:
-  * @brief  Fills each ADC_InitStruct member with its default value.
-  * @param  ADC_InitStruct : pointer to an ADC_InitTypeDef structure which will be initialized.
-  * @retval None
-  */
-void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct)
-{
-    2b20:	b480      	push	{r7}
-    2b22:	b083      	sub	sp, #12
-    2b24:	af00      	add	r7, sp, #0
-    2b26:	6078      	str	r0, [r7, #4]
-  /* Reset ADC init structure parameters values */
-  /* Initialize the ADC_Mode member */
-  ADC_InitStruct->ADC_Mode = ADC_Mode_Independent;
-    2b28:	687b      	ldr	r3, [r7, #4]
-    2b2a:	2200      	movs	r2, #0
-    2b2c:	601a      	str	r2, [r3, #0]
-  /* initialize the ADC_ScanConvMode member */
-  ADC_InitStruct->ADC_ScanConvMode = DISABLE;
-    2b2e:	687b      	ldr	r3, [r7, #4]
-    2b30:	2200      	movs	r2, #0
-    2b32:	711a      	strb	r2, [r3, #4]
-  /* Initialize the ADC_ContinuousConvMode member */
-  ADC_InitStruct->ADC_ContinuousConvMode = DISABLE;
-    2b34:	687b      	ldr	r3, [r7, #4]
-    2b36:	2200      	movs	r2, #0
-    2b38:	715a      	strb	r2, [r3, #5]
-  /* Initialize the ADC_ExternalTrigConv member */
-  ADC_InitStruct->ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
-    2b3a:	687b      	ldr	r3, [r7, #4]
-    2b3c:	2200      	movs	r2, #0
-    2b3e:	609a      	str	r2, [r3, #8]
-  /* Initialize the ADC_DataAlign member */
-  ADC_InitStruct->ADC_DataAlign = ADC_DataAlign_Right;
-    2b40:	687b      	ldr	r3, [r7, #4]
-    2b42:	2200      	movs	r2, #0
-    2b44:	60da      	str	r2, [r3, #12]
-  /* Initialize the ADC_NbrOfChannel member */
-  ADC_InitStruct->ADC_NbrOfChannel = 1;
-    2b46:	687b      	ldr	r3, [r7, #4]
-    2b48:	2201      	movs	r2, #1
-    2b4a:	741a      	strb	r2, [r3, #16]
-}
-    2b4c:	bf00      	nop
-    2b4e:	370c      	adds	r7, #12
-    2b50:	46bd      	mov	sp, r7
-    2b52:	bc80      	pop	{r7}
-    2b54:	4770      	bx	lr
-
-00002b56 <ADC_Cmd>:
-  * @param  NewState: new state of the ADCx peripheral.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2b56:	b480      	push	{r7}
-    2b58:	b083      	sub	sp, #12
-    2b5a:	af00      	add	r7, sp, #0
-    2b5c:	6078      	str	r0, [r7, #4]
-    2b5e:	460b      	mov	r3, r1
-    2b60:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2b62:	78fb      	ldrb	r3, [r7, #3]
-    2b64:	2b00      	cmp	r3, #0
-    2b66:	d006      	beq.n	2b76 <ADC_Cmd+0x20>
-  {
-    /* Set the ADON bit to wake up the ADC from power down mode */
-    ADCx->CR2 |= CR2_ADON_Set;
-    2b68:	687b      	ldr	r3, [r7, #4]
-    2b6a:	689b      	ldr	r3, [r3, #8]
-    2b6c:	f043 0201 	orr.w	r2, r3, #1
-    2b70:	687b      	ldr	r3, [r7, #4]
-    2b72:	609a      	str	r2, [r3, #8]
-  else
-  {
-    /* Disable the selected ADC peripheral */
-    ADCx->CR2 &= CR2_ADON_Reset;
-  }
-}
-    2b74:	e005      	b.n	2b82 <ADC_Cmd+0x2c>
-    ADCx->CR2 &= CR2_ADON_Reset;
-    2b76:	687b      	ldr	r3, [r7, #4]
-    2b78:	689b      	ldr	r3, [r3, #8]
-    2b7a:	f023 0201 	bic.w	r2, r3, #1
-    2b7e:	687b      	ldr	r3, [r7, #4]
-    2b80:	609a      	str	r2, [r3, #8]
-}
-    2b82:	bf00      	nop
-    2b84:	370c      	adds	r7, #12
-    2b86:	46bd      	mov	sp, r7
-    2b88:	bc80      	pop	{r7}
-    2b8a:	4770      	bx	lr
-
-00002b8c <ADC_DMACmd>:
-  * @param  NewState: new state of the selected ADC DMA transfer.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2b8c:	b480      	push	{r7}
-    2b8e:	b083      	sub	sp, #12
-    2b90:	af00      	add	r7, sp, #0
-    2b92:	6078      	str	r0, [r7, #4]
-    2b94:	460b      	mov	r3, r1
-    2b96:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_DMA_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2b98:	78fb      	ldrb	r3, [r7, #3]
-    2b9a:	2b00      	cmp	r3, #0
-    2b9c:	d006      	beq.n	2bac <ADC_DMACmd+0x20>
-  {
-    /* Enable the selected ADC DMA request */
-    ADCx->CR2 |= CR2_DMA_Set;
-    2b9e:	687b      	ldr	r3, [r7, #4]
-    2ba0:	689b      	ldr	r3, [r3, #8]
-    2ba2:	f443 7280 	orr.w	r2, r3, #256	; 0x100
-    2ba6:	687b      	ldr	r3, [r7, #4]
-    2ba8:	609a      	str	r2, [r3, #8]
-  else
-  {
-    /* Disable the selected ADC DMA request */
-    ADCx->CR2 &= CR2_DMA_Reset;
-  }
-}
-    2baa:	e005      	b.n	2bb8 <ADC_DMACmd+0x2c>
-    ADCx->CR2 &= CR2_DMA_Reset;
-    2bac:	687b      	ldr	r3, [r7, #4]
-    2bae:	689b      	ldr	r3, [r3, #8]
-    2bb0:	f423 7280 	bic.w	r2, r3, #256	; 0x100
-    2bb4:	687b      	ldr	r3, [r7, #4]
-    2bb6:	609a      	str	r2, [r3, #8]
-}
-    2bb8:	bf00      	nop
-    2bba:	370c      	adds	r7, #12
-    2bbc:	46bd      	mov	sp, r7
-    2bbe:	bc80      	pop	{r7}
-    2bc0:	4770      	bx	lr
-
-00002bc2 <ADC_ITConfig>:
-  * @param  NewState: new state of the specified ADC interrupts.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState)
-{
-    2bc2:	b480      	push	{r7}
-    2bc4:	b085      	sub	sp, #20
-    2bc6:	af00      	add	r7, sp, #0
-    2bc8:	6078      	str	r0, [r7, #4]
-    2bca:	460b      	mov	r3, r1
-    2bcc:	807b      	strh	r3, [r7, #2]
-    2bce:	4613      	mov	r3, r2
-    2bd0:	707b      	strb	r3, [r7, #1]
-  uint8_t itmask = 0;
-    2bd2:	2300      	movs	r3, #0
-    2bd4:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  assert_param(IS_ADC_IT(ADC_IT));
-  /* Get the ADC IT index */
-  itmask = (uint8_t)ADC_IT;
-    2bd6:	887b      	ldrh	r3, [r7, #2]
-    2bd8:	73fb      	strb	r3, [r7, #15]
-  if (NewState != DISABLE)
-    2bda:	787b      	ldrb	r3, [r7, #1]
-    2bdc:	2b00      	cmp	r3, #0
-    2bde:	d006      	beq.n	2bee <ADC_ITConfig+0x2c>
-  {
-    /* Enable the selected ADC interrupts */
-    ADCx->CR1 |= itmask;
-    2be0:	687b      	ldr	r3, [r7, #4]
-    2be2:	685a      	ldr	r2, [r3, #4]
-    2be4:	7bfb      	ldrb	r3, [r7, #15]
-    2be6:	431a      	orrs	r2, r3
-    2be8:	687b      	ldr	r3, [r7, #4]
-    2bea:	605a      	str	r2, [r3, #4]
-  else
-  {
-    /* Disable the selected ADC interrupts */
-    ADCx->CR1 &= (~(uint32_t)itmask);
-  }
-}
-    2bec:	e006      	b.n	2bfc <ADC_ITConfig+0x3a>
-    ADCx->CR1 &= (~(uint32_t)itmask);
-    2bee:	687b      	ldr	r3, [r7, #4]
-    2bf0:	685a      	ldr	r2, [r3, #4]
-    2bf2:	7bfb      	ldrb	r3, [r7, #15]
-    2bf4:	43db      	mvns	r3, r3
-    2bf6:	401a      	ands	r2, r3
-    2bf8:	687b      	ldr	r3, [r7, #4]
-    2bfa:	605a      	str	r2, [r3, #4]
-}
-    2bfc:	bf00      	nop
-    2bfe:	3714      	adds	r7, #20
-    2c00:	46bd      	mov	sp, r7
-    2c02:	bc80      	pop	{r7}
-    2c04:	4770      	bx	lr
-
-00002c06 <ADC_ResetCalibration>:
-  * @brief  Resets the selected ADC calibration registers.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval None
-  */
-void ADC_ResetCalibration(ADC_TypeDef* ADCx)
-{
-    2c06:	b480      	push	{r7}
-    2c08:	b083      	sub	sp, #12
-    2c0a:	af00      	add	r7, sp, #0
-    2c0c:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Resets the selected ADC calibration registers */  
-  ADCx->CR2 |= CR2_RSTCAL_Set;
-    2c0e:	687b      	ldr	r3, [r7, #4]
-    2c10:	689b      	ldr	r3, [r3, #8]
-    2c12:	f043 0208 	orr.w	r2, r3, #8
-    2c16:	687b      	ldr	r3, [r7, #4]
-    2c18:	609a      	str	r2, [r3, #8]
-}
-    2c1a:	bf00      	nop
-    2c1c:	370c      	adds	r7, #12
-    2c1e:	46bd      	mov	sp, r7
-    2c20:	bc80      	pop	{r7}
-    2c22:	4770      	bx	lr
-
-00002c24 <ADC_GetResetCalibrationStatus>:
-  * @brief  Gets the selected ADC reset calibration registers status.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval The new state of ADC reset calibration registers (SET or RESET).
-  */
-FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx)
-{
-    2c24:	b480      	push	{r7}
-    2c26:	b085      	sub	sp, #20
-    2c28:	af00      	add	r7, sp, #0
-    2c2a:	6078      	str	r0, [r7, #4]
-  FlagStatus bitstatus = RESET;
-    2c2c:	2300      	movs	r3, #0
-    2c2e:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Check the status of RSTCAL bit */
-  if ((ADCx->CR2 & CR2_RSTCAL_Set) != (uint32_t)RESET)
-    2c30:	687b      	ldr	r3, [r7, #4]
-    2c32:	689b      	ldr	r3, [r3, #8]
-    2c34:	f003 0308 	and.w	r3, r3, #8
-    2c38:	2b00      	cmp	r3, #0
-    2c3a:	d002      	beq.n	2c42 <ADC_GetResetCalibrationStatus+0x1e>
-  {
-    /* RSTCAL bit is set */
-    bitstatus = SET;
-    2c3c:	2301      	movs	r3, #1
-    2c3e:	73fb      	strb	r3, [r7, #15]
-    2c40:	e001      	b.n	2c46 <ADC_GetResetCalibrationStatus+0x22>
-  }
-  else
-  {
-    /* RSTCAL bit is reset */
-    bitstatus = RESET;
-    2c42:	2300      	movs	r3, #0
-    2c44:	73fb      	strb	r3, [r7, #15]
-  }
-  /* Return the RSTCAL bit status */
-  return  bitstatus;
-    2c46:	7bfb      	ldrb	r3, [r7, #15]
-}
-    2c48:	4618      	mov	r0, r3
-    2c4a:	3714      	adds	r7, #20
-    2c4c:	46bd      	mov	sp, r7
-    2c4e:	bc80      	pop	{r7}
-    2c50:	4770      	bx	lr
-
-00002c52 <ADC_StartCalibration>:
-  * @brief  Starts the selected ADC calibration process.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval None
-  */
-void ADC_StartCalibration(ADC_TypeDef* ADCx)
-{
-    2c52:	b480      	push	{r7}
-    2c54:	b083      	sub	sp, #12
-    2c56:	af00      	add	r7, sp, #0
-    2c58:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Enable the selected ADC calibration process */  
-  ADCx->CR2 |= CR2_CAL_Set;
-    2c5a:	687b      	ldr	r3, [r7, #4]
-    2c5c:	689b      	ldr	r3, [r3, #8]
-    2c5e:	f043 0204 	orr.w	r2, r3, #4
-    2c62:	687b      	ldr	r3, [r7, #4]
-    2c64:	609a      	str	r2, [r3, #8]
-}
-    2c66:	bf00      	nop
-    2c68:	370c      	adds	r7, #12
-    2c6a:	46bd      	mov	sp, r7
-    2c6c:	bc80      	pop	{r7}
-    2c6e:	4770      	bx	lr
-
-00002c70 <ADC_GetCalibrationStatus>:
-  * @brief  Gets the selected ADC calibration status.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval The new state of ADC calibration (SET or RESET).
-  */
-FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx)
-{
-    2c70:	b480      	push	{r7}
-    2c72:	b085      	sub	sp, #20
-    2c74:	af00      	add	r7, sp, #0
-    2c76:	6078      	str	r0, [r7, #4]
-  FlagStatus bitstatus = RESET;
-    2c78:	2300      	movs	r3, #0
-    2c7a:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Check the status of CAL bit */
-  if ((ADCx->CR2 & CR2_CAL_Set) != (uint32_t)RESET)
-    2c7c:	687b      	ldr	r3, [r7, #4]
-    2c7e:	689b      	ldr	r3, [r3, #8]
-    2c80:	f003 0304 	and.w	r3, r3, #4
-    2c84:	2b00      	cmp	r3, #0
-    2c86:	d002      	beq.n	2c8e <ADC_GetCalibrationStatus+0x1e>
-  {
-    /* CAL bit is set: calibration on going */
-    bitstatus = SET;
-    2c88:	2301      	movs	r3, #1
-    2c8a:	73fb      	strb	r3, [r7, #15]
-    2c8c:	e001      	b.n	2c92 <ADC_GetCalibrationStatus+0x22>
-  }
-  else
-  {
-    /* CAL bit is reset: end of calibration */
-    bitstatus = RESET;
-    2c8e:	2300      	movs	r3, #0
-    2c90:	73fb      	strb	r3, [r7, #15]
-  }
-  /* Return the CAL bit status */
-  return  bitstatus;
-    2c92:	7bfb      	ldrb	r3, [r7, #15]
-}
-    2c94:	4618      	mov	r0, r3
-    2c96:	3714      	adds	r7, #20
-    2c98:	46bd      	mov	sp, r7
-    2c9a:	bc80      	pop	{r7}
-    2c9c:	4770      	bx	lr
-
-00002c9e <ADC_SoftwareStartConvCmd>:
-  * @param  NewState: new state of the selected ADC software start conversion.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2c9e:	b480      	push	{r7}
-    2ca0:	b083      	sub	sp, #12
-    2ca2:	af00      	add	r7, sp, #0
-    2ca4:	6078      	str	r0, [r7, #4]
-    2ca6:	460b      	mov	r3, r1
-    2ca8:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2caa:	78fb      	ldrb	r3, [r7, #3]
-    2cac:	2b00      	cmp	r3, #0
-    2cae:	d006      	beq.n	2cbe <ADC_SoftwareStartConvCmd+0x20>
-  {
-    /* Enable the selected ADC conversion on external event and start the selected
-       ADC conversion */
-    ADCx->CR2 |= CR2_EXTTRIG_SWSTART_Set;
-    2cb0:	687b      	ldr	r3, [r7, #4]
-    2cb2:	689b      	ldr	r3, [r3, #8]
-    2cb4:	f443 02a0 	orr.w	r2, r3, #5242880	; 0x500000
-    2cb8:	687b      	ldr	r3, [r7, #4]
-    2cba:	609a      	str	r2, [r3, #8]
-  {
-    /* Disable the selected ADC conversion on external event and stop the selected
-       ADC conversion */
-    ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
-  }
-}
-    2cbc:	e005      	b.n	2cca <ADC_SoftwareStartConvCmd+0x2c>
-    ADCx->CR2 &= CR2_EXTTRIG_SWSTART_Reset;
-    2cbe:	687b      	ldr	r3, [r7, #4]
-    2cc0:	689b      	ldr	r3, [r3, #8]
-    2cc2:	f423 02a0 	bic.w	r2, r3, #5242880	; 0x500000
-    2cc6:	687b      	ldr	r3, [r7, #4]
-    2cc8:	609a      	str	r2, [r3, #8]
-}
-    2cca:	bf00      	nop
-    2ccc:	370c      	adds	r7, #12
-    2cce:	46bd      	mov	sp, r7
-    2cd0:	bc80      	pop	{r7}
-    2cd2:	4770      	bx	lr
-
-00002cd4 <ADC_GetSoftwareStartConvStatus>:
-  * @brief  Gets the selected ADC Software start conversion Status.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval The new state of ADC software start conversion (SET or RESET).
-  */
-FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx)
-{
-    2cd4:	b480      	push	{r7}
-    2cd6:	b085      	sub	sp, #20
-    2cd8:	af00      	add	r7, sp, #0
-    2cda:	6078      	str	r0, [r7, #4]
-  FlagStatus bitstatus = RESET;
-    2cdc:	2300      	movs	r3, #0
-    2cde:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Check the status of SWSTART bit */
-  if ((ADCx->CR2 & CR2_SWSTART_Set) != (uint32_t)RESET)
-    2ce0:	687b      	ldr	r3, [r7, #4]
-    2ce2:	689b      	ldr	r3, [r3, #8]
-    2ce4:	f403 0380 	and.w	r3, r3, #4194304	; 0x400000
-    2ce8:	2b00      	cmp	r3, #0
-    2cea:	d002      	beq.n	2cf2 <ADC_GetSoftwareStartConvStatus+0x1e>
-  {
-    /* SWSTART bit is set */
-    bitstatus = SET;
-    2cec:	2301      	movs	r3, #1
-    2cee:	73fb      	strb	r3, [r7, #15]
-    2cf0:	e001      	b.n	2cf6 <ADC_GetSoftwareStartConvStatus+0x22>
-  }
-  else
-  {
-    /* SWSTART bit is reset */
-    bitstatus = RESET;
-    2cf2:	2300      	movs	r3, #0
-    2cf4:	73fb      	strb	r3, [r7, #15]
-  }
-  /* Return the SWSTART bit status */
-  return  bitstatus;
-    2cf6:	7bfb      	ldrb	r3, [r7, #15]
-}
-    2cf8:	4618      	mov	r0, r3
-    2cfa:	3714      	adds	r7, #20
-    2cfc:	46bd      	mov	sp, r7
-    2cfe:	bc80      	pop	{r7}
-    2d00:	4770      	bx	lr
-
-00002d02 <ADC_DiscModeChannelCountConfig>:
-  * @param  Number: specifies the discontinuous mode regular channel
-  *         count value. This number must be between 1 and 8.
-  * @retval None
-  */
-void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number)
-{
-    2d02:	b480      	push	{r7}
-    2d04:	b085      	sub	sp, #20
-    2d06:	af00      	add	r7, sp, #0
-    2d08:	6078      	str	r0, [r7, #4]
-    2d0a:	460b      	mov	r3, r1
-    2d0c:	70fb      	strb	r3, [r7, #3]
-  uint32_t tmpreg1 = 0;
-    2d0e:	2300      	movs	r3, #0
-    2d10:	60fb      	str	r3, [r7, #12]
-  uint32_t tmpreg2 = 0;
-    2d12:	2300      	movs	r3, #0
-    2d14:	60bb      	str	r3, [r7, #8]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_REGULAR_DISC_NUMBER(Number));
-  /* Get the old register value */
-  tmpreg1 = ADCx->CR1;
-    2d16:	687b      	ldr	r3, [r7, #4]
-    2d18:	685b      	ldr	r3, [r3, #4]
-    2d1a:	60fb      	str	r3, [r7, #12]
-  /* Clear the old discontinuous mode channel count */
-  tmpreg1 &= CR1_DISCNUM_Reset;
-    2d1c:	68fb      	ldr	r3, [r7, #12]
-    2d1e:	f423 4360 	bic.w	r3, r3, #57344	; 0xe000
-    2d22:	60fb      	str	r3, [r7, #12]
-  /* Set the discontinuous mode channel count */
-  tmpreg2 = Number - 1;
-    2d24:	78fb      	ldrb	r3, [r7, #3]
-    2d26:	3b01      	subs	r3, #1
-    2d28:	60bb      	str	r3, [r7, #8]
-  tmpreg1 |= tmpreg2 << 13;
-    2d2a:	68bb      	ldr	r3, [r7, #8]
-    2d2c:	035b      	lsls	r3, r3, #13
-    2d2e:	68fa      	ldr	r2, [r7, #12]
-    2d30:	4313      	orrs	r3, r2
-    2d32:	60fb      	str	r3, [r7, #12]
-  /* Store the new register value */
-  ADCx->CR1 = tmpreg1;
-    2d34:	687b      	ldr	r3, [r7, #4]
-    2d36:	68fa      	ldr	r2, [r7, #12]
-    2d38:	605a      	str	r2, [r3, #4]
-}
-    2d3a:	bf00      	nop
-    2d3c:	3714      	adds	r7, #20
-    2d3e:	46bd      	mov	sp, r7
-    2d40:	bc80      	pop	{r7}
-    2d42:	4770      	bx	lr
-
-00002d44 <ADC_DiscModeCmd>:
-  *         on regular group channel.
-  *         This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2d44:	b480      	push	{r7}
-    2d46:	b083      	sub	sp, #12
-    2d48:	af00      	add	r7, sp, #0
-    2d4a:	6078      	str	r0, [r7, #4]
-    2d4c:	460b      	mov	r3, r1
-    2d4e:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2d50:	78fb      	ldrb	r3, [r7, #3]
-    2d52:	2b00      	cmp	r3, #0
-    2d54:	d006      	beq.n	2d64 <ADC_DiscModeCmd+0x20>
-  {
-    /* Enable the selected ADC regular discontinuous mode */
-    ADCx->CR1 |= CR1_DISCEN_Set;
-    2d56:	687b      	ldr	r3, [r7, #4]
-    2d58:	685b      	ldr	r3, [r3, #4]
-    2d5a:	f443 6200 	orr.w	r2, r3, #2048	; 0x800
-    2d5e:	687b      	ldr	r3, [r7, #4]
-    2d60:	605a      	str	r2, [r3, #4]
-  else
-  {
-    /* Disable the selected ADC regular discontinuous mode */
-    ADCx->CR1 &= CR1_DISCEN_Reset;
-  }
-}
-    2d62:	e005      	b.n	2d70 <ADC_DiscModeCmd+0x2c>
-    ADCx->CR1 &= CR1_DISCEN_Reset;
-    2d64:	687b      	ldr	r3, [r7, #4]
-    2d66:	685b      	ldr	r3, [r3, #4]
-    2d68:	f423 6200 	bic.w	r2, r3, #2048	; 0x800
-    2d6c:	687b      	ldr	r3, [r7, #4]
-    2d6e:	605a      	str	r2, [r3, #4]
-}
-    2d70:	bf00      	nop
-    2d72:	370c      	adds	r7, #12
-    2d74:	46bd      	mov	sp, r7
-    2d76:	bc80      	pop	{r7}
-    2d78:	4770      	bx	lr
-
-00002d7a <ADC_RegularChannelConfig>:
-  *     @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles	
-  *     @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles	
-  * @retval None
-  */
-void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
-{
-    2d7a:	b480      	push	{r7}
-    2d7c:	b085      	sub	sp, #20
-    2d7e:	af00      	add	r7, sp, #0
-    2d80:	6078      	str	r0, [r7, #4]
-    2d82:	4608      	mov	r0, r1
-    2d84:	4611      	mov	r1, r2
-    2d86:	461a      	mov	r2, r3
-    2d88:	4603      	mov	r3, r0
-    2d8a:	70fb      	strb	r3, [r7, #3]
-    2d8c:	460b      	mov	r3, r1
-    2d8e:	70bb      	strb	r3, [r7, #2]
-    2d90:	4613      	mov	r3, r2
-    2d92:	707b      	strb	r3, [r7, #1]
-  uint32_t tmpreg1 = 0, tmpreg2 = 0;
-    2d94:	2300      	movs	r3, #0
-    2d96:	60fb      	str	r3, [r7, #12]
-    2d98:	2300      	movs	r3, #0
-    2d9a:	60bb      	str	r3, [r7, #8]
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_CHANNEL(ADC_Channel));
-  assert_param(IS_ADC_REGULAR_RANK(Rank));
-  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
-  /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
-  if (ADC_Channel > ADC_Channel_9)
-    2d9c:	78fb      	ldrb	r3, [r7, #3]
-    2d9e:	2b09      	cmp	r3, #9
-    2da0:	d923      	bls.n	2dea <ADC_RegularChannelConfig+0x70>
-  {
-    /* Get the old register value */
-    tmpreg1 = ADCx->SMPR1;
-    2da2:	687b      	ldr	r3, [r7, #4]
-    2da4:	68db      	ldr	r3, [r3, #12]
-    2da6:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to clear */
-    tmpreg2 = SMPR1_SMP_Set << (3 * (ADC_Channel - 10));
-    2da8:	78fb      	ldrb	r3, [r7, #3]
-    2daa:	f1a3 020a 	sub.w	r2, r3, #10
-    2dae:	4613      	mov	r3, r2
-    2db0:	005b      	lsls	r3, r3, #1
-    2db2:	4413      	add	r3, r2
-    2db4:	2207      	movs	r2, #7
-    2db6:	fa02 f303 	lsl.w	r3, r2, r3
-    2dba:	60bb      	str	r3, [r7, #8]
-    /* Clear the old channel sample time */
-    tmpreg1 &= ~tmpreg2;
-    2dbc:	68bb      	ldr	r3, [r7, #8]
-    2dbe:	43db      	mvns	r3, r3
-    2dc0:	68fa      	ldr	r2, [r7, #12]
-    2dc2:	4013      	ands	r3, r2
-    2dc4:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to set */
-    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * (ADC_Channel - 10));
-    2dc6:	7879      	ldrb	r1, [r7, #1]
-    2dc8:	78fb      	ldrb	r3, [r7, #3]
-    2dca:	f1a3 020a 	sub.w	r2, r3, #10
-    2dce:	4613      	mov	r3, r2
-    2dd0:	005b      	lsls	r3, r3, #1
-    2dd2:	4413      	add	r3, r2
-    2dd4:	fa01 f303 	lsl.w	r3, r1, r3
-    2dd8:	60bb      	str	r3, [r7, #8]
-    /* Set the new channel sample time */
-    tmpreg1 |= tmpreg2;
-    2dda:	68fa      	ldr	r2, [r7, #12]
-    2ddc:	68bb      	ldr	r3, [r7, #8]
-    2dde:	4313      	orrs	r3, r2
-    2de0:	60fb      	str	r3, [r7, #12]
-    /* Store the new register value */
-    ADCx->SMPR1 = tmpreg1;
-    2de2:	687b      	ldr	r3, [r7, #4]
-    2de4:	68fa      	ldr	r2, [r7, #12]
-    2de6:	60da      	str	r2, [r3, #12]
-    2de8:	e01e      	b.n	2e28 <ADC_RegularChannelConfig+0xae>
-  }
-  else /* ADC_Channel include in ADC_Channel_[0..9] */
-  {
-    /* Get the old register value */
-    tmpreg1 = ADCx->SMPR2;
-    2dea:	687b      	ldr	r3, [r7, #4]
-    2dec:	691b      	ldr	r3, [r3, #16]
-    2dee:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to clear */
-    tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
-    2df0:	78fa      	ldrb	r2, [r7, #3]
-    2df2:	4613      	mov	r3, r2
-    2df4:	005b      	lsls	r3, r3, #1
-    2df6:	4413      	add	r3, r2
-    2df8:	2207      	movs	r2, #7
-    2dfa:	fa02 f303 	lsl.w	r3, r2, r3
-    2dfe:	60bb      	str	r3, [r7, #8]
-    /* Clear the old channel sample time */
-    tmpreg1 &= ~tmpreg2;
-    2e00:	68bb      	ldr	r3, [r7, #8]
-    2e02:	43db      	mvns	r3, r3
-    2e04:	68fa      	ldr	r2, [r7, #12]
-    2e06:	4013      	ands	r3, r2
-    2e08:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to set */
-    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
-    2e0a:	7879      	ldrb	r1, [r7, #1]
-    2e0c:	78fa      	ldrb	r2, [r7, #3]
-    2e0e:	4613      	mov	r3, r2
-    2e10:	005b      	lsls	r3, r3, #1
-    2e12:	4413      	add	r3, r2
-    2e14:	fa01 f303 	lsl.w	r3, r1, r3
-    2e18:	60bb      	str	r3, [r7, #8]
-    /* Set the new channel sample time */
-    tmpreg1 |= tmpreg2;
-    2e1a:	68fa      	ldr	r2, [r7, #12]
-    2e1c:	68bb      	ldr	r3, [r7, #8]
-    2e1e:	4313      	orrs	r3, r2
-    2e20:	60fb      	str	r3, [r7, #12]
-    /* Store the new register value */
-    ADCx->SMPR2 = tmpreg1;
-    2e22:	687b      	ldr	r3, [r7, #4]
-    2e24:	68fa      	ldr	r2, [r7, #12]
-    2e26:	611a      	str	r2, [r3, #16]
-  }
-  /* For Rank 1 to 6 */
-  if (Rank < 7)
-    2e28:	78bb      	ldrb	r3, [r7, #2]
-    2e2a:	2b06      	cmp	r3, #6
-    2e2c:	d821      	bhi.n	2e72 <ADC_RegularChannelConfig+0xf8>
-  {
-    /* Get the old register value */
-    tmpreg1 = ADCx->SQR3;
-    2e2e:	687b      	ldr	r3, [r7, #4]
-    2e30:	6b5b      	ldr	r3, [r3, #52]	; 0x34
-    2e32:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to clear */
-    tmpreg2 = SQR3_SQ_Set << (5 * (Rank - 1));
-    2e34:	78bb      	ldrb	r3, [r7, #2]
-    2e36:	1e5a      	subs	r2, r3, #1
-    2e38:	4613      	mov	r3, r2
-    2e3a:	009b      	lsls	r3, r3, #2
-    2e3c:	4413      	add	r3, r2
-    2e3e:	221f      	movs	r2, #31
-    2e40:	fa02 f303 	lsl.w	r3, r2, r3
-    2e44:	60bb      	str	r3, [r7, #8]
-    /* Clear the old SQx bits for the selected rank */
-    tmpreg1 &= ~tmpreg2;
-    2e46:	68bb      	ldr	r3, [r7, #8]
-    2e48:	43db      	mvns	r3, r3
-    2e4a:	68fa      	ldr	r2, [r7, #12]
-    2e4c:	4013      	ands	r3, r2
-    2e4e:	60fb      	str	r3, [r7, #12]
-    /* Calculate the mask to set */
-    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 1));
-    2e50:	78f9      	ldrb	r1, [r7, #3]
-    2e52:	78bb      	ldrb	r3, [r7, #2]
-    2e54:	1e5a      	subs	r2, r3, #1
-    2e56:	4613      	mov	r3, r2
-    2e58:	009b      	lsls	r3, r3, #2
-    2e5a:	4413      	add	r3, r2
-    2e5c:	fa01 f303 	lsl.w	r3, r1, r3
-    2e60:	60bb      	str	r3, [r7, #8]
-    /* Set the SQx bits for the selected rank */
-    tmpreg1 |= tmpreg2;
-    2e62:	68fa      	ldr	r2, [r7, #12]
-    2e64:	68bb      	ldr	r3, [r7, #8]
-    2e66:	4313      	orrs	r3, r2
-    2e68:	60fb      	str	r3, [r7, #12]
-    /* Store the new register value */
-    ADCx->SQR3 = tmpreg1;
-    2e6a:	687b      	ldr	r3, [r7, #4]
-    2e6c:	68fa      	ldr	r2, [r7, #12]
-    2e6e:	635a      	str	r2, [r3, #52]	; 0x34
-    /* Set the SQx bits for the selected rank */
-    tmpreg1 |= tmpreg2;
-    /* Store the new register value */
-    ADCx->SQR1 = tmpreg1;
-  }
-}
-    2e70:	e047      	b.n	2f02 <ADC_RegularChannelConfig+0x188>
-  else if (Rank < 13)
-    2e72:	78bb      	ldrb	r3, [r7, #2]
-    2e74:	2b0c      	cmp	r3, #12
-    2e76:	d821      	bhi.n	2ebc <ADC_RegularChannelConfig+0x142>
-    tmpreg1 = ADCx->SQR2;
-    2e78:	687b      	ldr	r3, [r7, #4]
-    2e7a:	6b1b      	ldr	r3, [r3, #48]	; 0x30
-    2e7c:	60fb      	str	r3, [r7, #12]
-    tmpreg2 = SQR2_SQ_Set << (5 * (Rank - 7));
-    2e7e:	78bb      	ldrb	r3, [r7, #2]
-    2e80:	1fda      	subs	r2, r3, #7
-    2e82:	4613      	mov	r3, r2
-    2e84:	009b      	lsls	r3, r3, #2
-    2e86:	4413      	add	r3, r2
-    2e88:	221f      	movs	r2, #31
-    2e8a:	fa02 f303 	lsl.w	r3, r2, r3
-    2e8e:	60bb      	str	r3, [r7, #8]
-    tmpreg1 &= ~tmpreg2;
-    2e90:	68bb      	ldr	r3, [r7, #8]
-    2e92:	43db      	mvns	r3, r3
-    2e94:	68fa      	ldr	r2, [r7, #12]
-    2e96:	4013      	ands	r3, r2
-    2e98:	60fb      	str	r3, [r7, #12]
-    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 7));
-    2e9a:	78f9      	ldrb	r1, [r7, #3]
-    2e9c:	78bb      	ldrb	r3, [r7, #2]
-    2e9e:	1fda      	subs	r2, r3, #7
-    2ea0:	4613      	mov	r3, r2
-    2ea2:	009b      	lsls	r3, r3, #2
-    2ea4:	4413      	add	r3, r2
-    2ea6:	fa01 f303 	lsl.w	r3, r1, r3
-    2eaa:	60bb      	str	r3, [r7, #8]
-    tmpreg1 |= tmpreg2;
-    2eac:	68fa      	ldr	r2, [r7, #12]
-    2eae:	68bb      	ldr	r3, [r7, #8]
-    2eb0:	4313      	orrs	r3, r2
-    2eb2:	60fb      	str	r3, [r7, #12]
-    ADCx->SQR2 = tmpreg1;
-    2eb4:	687b      	ldr	r3, [r7, #4]
-    2eb6:	68fa      	ldr	r2, [r7, #12]
-    2eb8:	631a      	str	r2, [r3, #48]	; 0x30
-}
-    2eba:	e022      	b.n	2f02 <ADC_RegularChannelConfig+0x188>
-    tmpreg1 = ADCx->SQR1;
-    2ebc:	687b      	ldr	r3, [r7, #4]
-    2ebe:	6adb      	ldr	r3, [r3, #44]	; 0x2c
-    2ec0:	60fb      	str	r3, [r7, #12]
-    tmpreg2 = SQR1_SQ_Set << (5 * (Rank - 13));
-    2ec2:	78bb      	ldrb	r3, [r7, #2]
-    2ec4:	f1a3 020d 	sub.w	r2, r3, #13
-    2ec8:	4613      	mov	r3, r2
-    2eca:	009b      	lsls	r3, r3, #2
-    2ecc:	4413      	add	r3, r2
-    2ece:	221f      	movs	r2, #31
-    2ed0:	fa02 f303 	lsl.w	r3, r2, r3
-    2ed4:	60bb      	str	r3, [r7, #8]
-    tmpreg1 &= ~tmpreg2;
-    2ed6:	68bb      	ldr	r3, [r7, #8]
-    2ed8:	43db      	mvns	r3, r3
-    2eda:	68fa      	ldr	r2, [r7, #12]
-    2edc:	4013      	ands	r3, r2
-    2ede:	60fb      	str	r3, [r7, #12]
-    tmpreg2 = (uint32_t)ADC_Channel << (5 * (Rank - 13));
-    2ee0:	78f9      	ldrb	r1, [r7, #3]
-    2ee2:	78bb      	ldrb	r3, [r7, #2]
-    2ee4:	f1a3 020d 	sub.w	r2, r3, #13
-    2ee8:	4613      	mov	r3, r2
-    2eea:	009b      	lsls	r3, r3, #2
-    2eec:	4413      	add	r3, r2
-    2eee:	fa01 f303 	lsl.w	r3, r1, r3
-    2ef2:	60bb      	str	r3, [r7, #8]
-    tmpreg1 |= tmpreg2;
-    2ef4:	68fa      	ldr	r2, [r7, #12]
-    2ef6:	68bb      	ldr	r3, [r7, #8]
-    2ef8:	4313      	orrs	r3, r2
-    2efa:	60fb      	str	r3, [r7, #12]
-    ADCx->SQR1 = tmpreg1;
-    2efc:	687b      	ldr	r3, [r7, #4]
-    2efe:	68fa      	ldr	r2, [r7, #12]
-    2f00:	62da      	str	r2, [r3, #44]	; 0x2c
-}
-    2f02:	bf00      	nop
-    2f04:	3714      	adds	r7, #20
-    2f06:	46bd      	mov	sp, r7
-    2f08:	bc80      	pop	{r7}
-    2f0a:	4770      	bx	lr
-
-00002f0c <ADC_ExternalTrigConvCmd>:
-  * @param  NewState: new state of the selected ADC external trigger start of conversion.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2f0c:	b480      	push	{r7}
-    2f0e:	b083      	sub	sp, #12
-    2f10:	af00      	add	r7, sp, #0
-    2f12:	6078      	str	r0, [r7, #4]
-    2f14:	460b      	mov	r3, r1
-    2f16:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2f18:	78fb      	ldrb	r3, [r7, #3]
-    2f1a:	2b00      	cmp	r3, #0
-    2f1c:	d006      	beq.n	2f2c <ADC_ExternalTrigConvCmd+0x20>
-  {
-    /* Enable the selected ADC conversion on external event */
-    ADCx->CR2 |= CR2_EXTTRIG_Set;
-    2f1e:	687b      	ldr	r3, [r7, #4]
-    2f20:	689b      	ldr	r3, [r3, #8]
-    2f22:	f443 1280 	orr.w	r2, r3, #1048576	; 0x100000
-    2f26:	687b      	ldr	r3, [r7, #4]
-    2f28:	609a      	str	r2, [r3, #8]
-  else
-  {
-    /* Disable the selected ADC conversion on external event */
-    ADCx->CR2 &= CR2_EXTTRIG_Reset;
-  }
-}
-    2f2a:	e005      	b.n	2f38 <ADC_ExternalTrigConvCmd+0x2c>
-    ADCx->CR2 &= CR2_EXTTRIG_Reset;
-    2f2c:	687b      	ldr	r3, [r7, #4]
-    2f2e:	689b      	ldr	r3, [r3, #8]
-    2f30:	f423 1280 	bic.w	r2, r3, #1048576	; 0x100000
-    2f34:	687b      	ldr	r3, [r7, #4]
-    2f36:	609a      	str	r2, [r3, #8]
-}
-    2f38:	bf00      	nop
-    2f3a:	370c      	adds	r7, #12
-    2f3c:	46bd      	mov	sp, r7
-    2f3e:	bc80      	pop	{r7}
-    2f40:	4770      	bx	lr
-
-00002f42 <ADC_GetConversionValue>:
-  * @brief  Returns the last ADCx conversion result data for regular channel.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval The Data conversion value.
-  */
-uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx)
-{
-    2f42:	b480      	push	{r7}
-    2f44:	b083      	sub	sp, #12
-    2f46:	af00      	add	r7, sp, #0
-    2f48:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Return the selected ADC conversion value */
-  return (uint16_t) ADCx->DR;
-    2f4a:	687b      	ldr	r3, [r7, #4]
-    2f4c:	6cdb      	ldr	r3, [r3, #76]	; 0x4c
-    2f4e:	b29b      	uxth	r3, r3
-}
-    2f50:	4618      	mov	r0, r3
-    2f52:	370c      	adds	r7, #12
-    2f54:	46bd      	mov	sp, r7
-    2f56:	bc80      	pop	{r7}
-    2f58:	4770      	bx	lr
-
-00002f5a <ADC_GetDualModeConversionValue>:
-/**
-  * @brief  Returns the last ADC1 and ADC2 conversion result data in dual mode.
-  * @retval The Data conversion value.
-  */
-uint32_t ADC_GetDualModeConversionValue(void)
-{
-    2f5a:	b480      	push	{r7}
-    2f5c:	af00      	add	r7, sp, #0
-  /* Return the dual mode conversion value */
-  return (*(__IO uint32_t *) DR_ADDRESS);
-    2f5e:	4b03      	ldr	r3, [pc, #12]	; (2f6c <ADC_GetDualModeConversionValue+0x12>)
-    2f60:	681b      	ldr	r3, [r3, #0]
-}
-    2f62:	4618      	mov	r0, r3
-    2f64:	46bd      	mov	sp, r7
-    2f66:	bc80      	pop	{r7}
-    2f68:	4770      	bx	lr
-    2f6a:	bf00      	nop
-    2f6c:	4001244c 	.word	0x4001244c
-
-00002f70 <ADC_AutoInjectedConvCmd>:
-  * @param  NewState: new state of the selected ADC auto injected conversion
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2f70:	b480      	push	{r7}
-    2f72:	b083      	sub	sp, #12
-    2f74:	af00      	add	r7, sp, #0
-    2f76:	6078      	str	r0, [r7, #4]
-    2f78:	460b      	mov	r3, r1
-    2f7a:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2f7c:	78fb      	ldrb	r3, [r7, #3]
-    2f7e:	2b00      	cmp	r3, #0
-    2f80:	d006      	beq.n	2f90 <ADC_AutoInjectedConvCmd+0x20>
-  {
-    /* Enable the selected ADC automatic injected group conversion */
-    ADCx->CR1 |= CR1_JAUTO_Set;
-    2f82:	687b      	ldr	r3, [r7, #4]
-    2f84:	685b      	ldr	r3, [r3, #4]
-    2f86:	f443 6280 	orr.w	r2, r3, #1024	; 0x400
-    2f8a:	687b      	ldr	r3, [r7, #4]
-    2f8c:	605a      	str	r2, [r3, #4]
-  else
-  {
-    /* Disable the selected ADC automatic injected group conversion */
-    ADCx->CR1 &= CR1_JAUTO_Reset;
-  }
-}
-    2f8e:	e005      	b.n	2f9c <ADC_AutoInjectedConvCmd+0x2c>
-    ADCx->CR1 &= CR1_JAUTO_Reset;
-    2f90:	687b      	ldr	r3, [r7, #4]
-    2f92:	685b      	ldr	r3, [r3, #4]
-    2f94:	f423 6280 	bic.w	r2, r3, #1024	; 0x400
-    2f98:	687b      	ldr	r3, [r7, #4]
-    2f9a:	605a      	str	r2, [r3, #4]
-}
-    2f9c:	bf00      	nop
-    2f9e:	370c      	adds	r7, #12
-    2fa0:	46bd      	mov	sp, r7
-    2fa2:	bc80      	pop	{r7}
-    2fa4:	4770      	bx	lr
-
-00002fa6 <ADC_InjectedDiscModeCmd>:
-  *         on injected group channel.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    2fa6:	b480      	push	{r7}
-    2fa8:	b083      	sub	sp, #12
-    2faa:	af00      	add	r7, sp, #0
-    2fac:	6078      	str	r0, [r7, #4]
-    2fae:	460b      	mov	r3, r1
-    2fb0:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    2fb2:	78fb      	ldrb	r3, [r7, #3]
-    2fb4:	2b00      	cmp	r3, #0
-    2fb6:	d006      	beq.n	2fc6 <ADC_InjectedDiscModeCmd+0x20>
-  {
-    /* Enable the selected ADC injected discontinuous mode */
-    ADCx->CR1 |= CR1_JDISCEN_Set;
-    2fb8:	687b      	ldr	r3, [r7, #4]
-    2fba:	685b      	ldr	r3, [r3, #4]
-    2fbc:	f443 5280 	orr.w	r2, r3, #4096	; 0x1000
-    2fc0:	687b      	ldr	r3, [r7, #4]
-    2fc2:	605a      	str	r2, [r3, #4]
-  else
-  {
-    /* Disable the selected ADC injected discontinuous mode */
-    ADCx->CR1 &= CR1_JDISCEN_Reset;
-  }
-}
-    2fc4:	e005      	b.n	2fd2 <ADC_InjectedDiscModeCmd+0x2c>
-    ADCx->CR1 &= CR1_JDISCEN_Reset;
-    2fc6:	687b      	ldr	r3, [r7, #4]
-    2fc8:	685b      	ldr	r3, [r3, #4]
-    2fca:	f423 5280 	bic.w	r2, r3, #4096	; 0x1000
-    2fce:	687b      	ldr	r3, [r7, #4]
-    2fd0:	605a      	str	r2, [r3, #4]
-}
-    2fd2:	bf00      	nop
-    2fd4:	370c      	adds	r7, #12
-    2fd6:	46bd      	mov	sp, r7
-    2fd8:	bc80      	pop	{r7}
-    2fda:	4770      	bx	lr
-
-00002fdc <ADC_ExternalTrigInjectedConvConfig>:
-  *     @arg ADC_ExternalTrigInjecConv_None: Injected conversion started by software and not
-  *                                          by external trigger (for ADC1, ADC2 and ADC3)
-  * @retval None
-  */
-void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv)
-{
-    2fdc:	b480      	push	{r7}
-    2fde:	b085      	sub	sp, #20
-    2fe0:	af00      	add	r7, sp, #0
-    2fe2:	6078      	str	r0, [r7, #4]
-    2fe4:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg = 0;
-    2fe6:	2300      	movs	r3, #0
-    2fe8:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_EXT_INJEC_TRIG(ADC_ExternalTrigInjecConv));
-  /* Get the old register value */
-  tmpreg = ADCx->CR2;
-    2fea:	687b      	ldr	r3, [r7, #4]
-    2fec:	689b      	ldr	r3, [r3, #8]
-    2fee:	60fb      	str	r3, [r7, #12]
-  /* Clear the old external event selection for injected group */
-  tmpreg &= CR2_JEXTSEL_Reset;
-    2ff0:	68fb      	ldr	r3, [r7, #12]
-    2ff2:	f423 43e0 	bic.w	r3, r3, #28672	; 0x7000
-    2ff6:	60fb      	str	r3, [r7, #12]
-  /* Set the external event selection for injected group */
-  tmpreg |= ADC_ExternalTrigInjecConv;
-    2ff8:	68fa      	ldr	r2, [r7, #12]
-    2ffa:	683b      	ldr	r3, [r7, #0]
-    2ffc:	4313      	orrs	r3, r2
-    2ffe:	60fb      	str	r3, [r7, #12]
-  /* Store the new register value */
-  ADCx->CR2 = tmpreg;
-    3000:	687b      	ldr	r3, [r7, #4]
-    3002:	68fa      	ldr	r2, [r7, #12]
-    3004:	609a      	str	r2, [r3, #8]
-}
-    3006:	bf00      	nop
-    3008:	3714      	adds	r7, #20
-    300a:	46bd      	mov	sp, r7
-    300c:	bc80      	pop	{r7}
-    300e:	4770      	bx	lr
-
-00003010 <ADC_ExternalTrigInjectedConvCmd>:
-  *         injected conversion.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    3010:	b480      	push	{r7}
-    3012:	b083      	sub	sp, #12
-    3014:	af00      	add	r7, sp, #0
-    3016:	6078      	str	r0, [r7, #4]
-    3018:	460b      	mov	r3, r1
-    301a:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    301c:	78fb      	ldrb	r3, [r7, #3]
-    301e:	2b00      	cmp	r3, #0
-    3020:	d006      	beq.n	3030 <ADC_ExternalTrigInjectedConvCmd+0x20>
-  {
-    /* Enable the selected ADC external event selection for injected group */
-    ADCx->CR2 |= CR2_JEXTTRIG_Set;
-    3022:	687b      	ldr	r3, [r7, #4]
-    3024:	689b      	ldr	r3, [r3, #8]
-    3026:	f443 4200 	orr.w	r2, r3, #32768	; 0x8000
-    302a:	687b      	ldr	r3, [r7, #4]
-    302c:	609a      	str	r2, [r3, #8]
-  else
-  {
-    /* Disable the selected ADC external event selection for injected group */
-    ADCx->CR2 &= CR2_JEXTTRIG_Reset;
-  }
-}
-    302e:	e005      	b.n	303c <ADC_ExternalTrigInjectedConvCmd+0x2c>
-    ADCx->CR2 &= CR2_JEXTTRIG_Reset;
-    3030:	687b      	ldr	r3, [r7, #4]
-    3032:	689b      	ldr	r3, [r3, #8]
-    3034:	f423 4200 	bic.w	r2, r3, #32768	; 0x8000
-    3038:	687b      	ldr	r3, [r7, #4]
-    303a:	609a      	str	r2, [r3, #8]
-}
-    303c:	bf00      	nop
-    303e:	370c      	adds	r7, #12
-    3040:	46bd      	mov	sp, r7
-    3042:	bc80      	pop	{r7}
-    3044:	4770      	bx	lr
-
-00003046 <ADC_SoftwareStartInjectedConvCmd>:
-  * @param  NewState: new state of the selected ADC software start injected conversion.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState)
-{
-    3046:	b480      	push	{r7}
-    3048:	b083      	sub	sp, #12
-    304a:	af00      	add	r7, sp, #0
-    304c:	6078      	str	r0, [r7, #4]
-    304e:	460b      	mov	r3, r1
-    3050:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    3052:	78fb      	ldrb	r3, [r7, #3]
-    3054:	2b00      	cmp	r3, #0
-    3056:	d006      	beq.n	3066 <ADC_SoftwareStartInjectedConvCmd+0x20>
-  {
-    /* Enable the selected ADC conversion for injected group on external event and start the selected
-       ADC injected conversion */
-    ADCx->CR2 |= CR2_JEXTTRIG_JSWSTART_Set;
-    3058:	687b      	ldr	r3, [r7, #4]
-    305a:	689b      	ldr	r3, [r3, #8]
-    305c:	f443 1202 	orr.w	r2, r3, #2129920	; 0x208000
-    3060:	687b      	ldr	r3, [r7, #4]
-    3062:	609a      	str	r2, [r3, #8]
-  {
-    /* Disable the selected ADC conversion on external event for injected group and stop the selected
-       ADC injected conversion */
-    ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
-  }
-}
-    3064:	e005      	b.n	3072 <ADC_SoftwareStartInjectedConvCmd+0x2c>
-    ADCx->CR2 &= CR2_JEXTTRIG_JSWSTART_Reset;
-    3066:	687b      	ldr	r3, [r7, #4]
-    3068:	689b      	ldr	r3, [r3, #8]
-    306a:	f423 1202 	bic.w	r2, r3, #2129920	; 0x208000
-    306e:	687b      	ldr	r3, [r7, #4]
-    3070:	609a      	str	r2, [r3, #8]
-}
-    3072:	bf00      	nop
-    3074:	370c      	adds	r7, #12
-    3076:	46bd      	mov	sp, r7
-    3078:	bc80      	pop	{r7}
-    307a:	4770      	bx	lr
-
-0000307c <ADC_GetSoftwareStartInjectedConvCmdStatus>:
-  * @brief  Gets the selected ADC Software start injected conversion Status.
-  * @param  ADCx: where x can be 1, 2 or 3 to select the ADC peripheral.
-  * @retval The new state of ADC software start injected conversion (SET or RESET).
-  */
-FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx)
-{
-    307c:	b480      	push	{r7}
-    307e:	b085      	sub	sp, #20
-    3080:	af00      	add	r7, sp, #0
-    3082:	6078      	str	r0, [r7, #4]
-  FlagStatus bitstatus = RESET;
-    3084:	2300      	movs	r3, #0
-    3086:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  /* Check the status of JSWSTART bit */
-  if ((ADCx->CR2 & CR2_JSWSTART_Set) != (uint32_t)RESET)
-    3088:	687b      	ldr	r3, [r7, #4]
-    308a:	689b      	ldr	r3, [r3, #8]
-    308c:	f403 1300 	and.w	r3, r3, #2097152	; 0x200000
-    3090:	2b00      	cmp	r3, #0
-    3092:	d002      	beq.n	309a <ADC_GetSoftwareStartInjectedConvCmdStatus+0x1e>
-  {
-    /* JSWSTART bit is set */
-    bitstatus = SET;
-    3094:	2301      	movs	r3, #1
-    3096:	73fb      	strb	r3, [r7, #15]
-    3098:	e001      	b.n	309e <ADC_GetSoftwareStartInjectedConvCmdStatus+0x22>
-  }
-  else
-  {
-    /* JSWSTART bit is reset */
-    bitstatus = RESET;
-    309a:	2300      	movs	r3, #0
-    309c:	73fb      	strb	r3, [r7, #15]
-  }
-  /* Return the JSWSTART bit status */
-  return  bitstatus;
-    309e:	7bfb      	ldrb	r3, [r7, #15]
-}
-    30a0:	4618      	mov	r0, r3
-    30a2:	3714      	adds	r7, #20
-    30a4:	46bd      	mov	sp, r7
-    30a6:	bc80      	pop	{r7}
-    30a8:	4770      	bx	lr
-
-000030aa <ADC_InjectedChannelConfig>:
-  *     @arg ADC_SampleTime_71Cycles5: Sample time equal to 71.5 cycles	
-  *     @arg ADC_SampleTime_239Cycles5: Sample time equal to 239.5 cycles	
-  * @retval None
-  */
-void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)
-{
-    30aa:	b480      	push	{r7}
-    30ac:	b087      	sub	sp, #28
-    30ae:	af00      	add	r7, sp, #0
-    30b0:	6078      	str	r0, [r7, #4]
-    30b2:	4608      	mov	r0, r1
-    30b4:	4611      	mov	r1, r2
-    30b6:	461a      	mov	r2, r3
-    30b8:	4603      	mov	r3, r0
-    30ba:	70fb      	strb	r3, [r7, #3]
-    30bc:	460b      	mov	r3, r1
-    30be:	70bb      	strb	r3, [r7, #2]
-    30c0:	4613      	mov	r3, r2
-    30c2:	707b      	strb	r3, [r7, #1]
-  uint32_t tmpreg1 = 0, tmpreg2 = 0, tmpreg3 = 0;
-    30c4:	2300      	movs	r3, #0
-    30c6:	617b      	str	r3, [r7, #20]
-    30c8:	2300      	movs	r3, #0
-    30ca:	613b      	str	r3, [r7, #16]
-    30cc:	2300      	movs	r3, #0
-    30ce:	60fb      	str	r3, [r7, #12]
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_CHANNEL(ADC_Channel));
-  assert_param(IS_ADC_INJECTED_RANK(Rank));
-  assert_param(IS_ADC_SAMPLE_TIME(ADC_SampleTime));
-  /* if ADC_Channel_10 ... ADC_Channel_17 is selected */
-  if (ADC_Channel > ADC_Channel_9)
-    30d0:	78fb      	ldrb	r3, [r7, #3]
-    30d2:	2b09      	cmp	r3, #9
-    30d4:	d923      	bls.n	311e <ADC_InjectedChannelConfig+0x74>
-  {
-    /* Get the old register value */
-    tmpreg1 = ADCx->SMPR1;
-    30d6:	687b      	ldr	r3, [r7, #4]
-    30d8:	68db      	ldr	r3, [r3, #12]
-    30da:	617b      	str	r3, [r7, #20]
-    /* Calculate the mask to clear */
-    tmpreg2 = SMPR1_SMP_Set << (3*(ADC_Channel - 10));
-    30dc:	78fb      	ldrb	r3, [r7, #3]
-    30de:	f1a3 020a 	sub.w	r2, r3, #10
-    30e2:	4613      	mov	r3, r2
-    30e4:	005b      	lsls	r3, r3, #1
-    30e6:	4413      	add	r3, r2
-    30e8:	2207      	movs	r2, #7
-    30ea:	fa02 f303 	lsl.w	r3, r2, r3
-    30ee:	613b      	str	r3, [r7, #16]
-    /* Clear the old channel sample time */
-    tmpreg1 &= ~tmpreg2;
-    30f0:	693b      	ldr	r3, [r7, #16]
-    30f2:	43db      	mvns	r3, r3
-    30f4:	697a      	ldr	r2, [r7, #20]
-    30f6:	4013      	ands	r3, r2
-    30f8:	617b      	str	r3, [r7, #20]
-    /* Calculate the mask to set */
-    tmpreg2 = (uint32_t)ADC_SampleTime << (3*(ADC_Channel - 10));
-    30fa:	7879      	ldrb	r1, [r7, #1]
-    30fc:	78fb      	ldrb	r3, [r7, #3]
-    30fe:	f1a3 020a 	sub.w	r2, r3, #10
-    3102:	4613      	mov	r3, r2
-    3104:	005b      	lsls	r3, r3, #1
-    3106:	4413      	add	r3, r2
-    3108:	fa01 f303 	lsl.w	r3, r1, r3
-    310c:	613b      	str	r3, [r7, #16]
-    /* Set the new channel sample time */
-    tmpreg1 |= tmpreg2;
-    310e:	697a      	ldr	r2, [r7, #20]
-    3110:	693b      	ldr	r3, [r7, #16]
-    3112:	4313      	orrs	r3, r2
-    3114:	617b      	str	r3, [r7, #20]
-    /* Store the new register value */
-    ADCx->SMPR1 = tmpreg1;
-    3116:	687b      	ldr	r3, [r7, #4]
-    3118:	697a      	ldr	r2, [r7, #20]
-    311a:	60da      	str	r2, [r3, #12]
-    311c:	e01e      	b.n	315c <ADC_InjectedChannelConfig+0xb2>
-  }
-  else /* ADC_Channel include in ADC_Channel_[0..9] */
-  {
-    /* Get the old register value */
-    tmpreg1 = ADCx->SMPR2;
-    311e:	687b      	ldr	r3, [r7, #4]
-    3120:	691b      	ldr	r3, [r3, #16]
-    3122:	617b      	str	r3, [r7, #20]
-    /* Calculate the mask to clear */
-    tmpreg2 = SMPR2_SMP_Set << (3 * ADC_Channel);
-    3124:	78fa      	ldrb	r2, [r7, #3]
-    3126:	4613      	mov	r3, r2
-    3128:	005b      	lsls	r3, r3, #1
-    312a:	4413      	add	r3, r2
-    312c:	2207      	movs	r2, #7
-    312e:	fa02 f303 	lsl.w	r3, r2, r3
-    3132:	613b      	str	r3, [r7, #16]
-    /* Clear the old channel sample time */
-    tmpreg1 &= ~tmpreg2;
-    3134:	693b      	ldr	r3, [r7, #16]
-    3136:	43db      	mvns	r3, r3
-    3138:	697a      	ldr	r2, [r7, #20]
-    313a:	4013      	ands	r3, r2
-    313c:	617b      	str	r3, [r7, #20]
-    /* Calculate the mask to set */
-    tmpreg2 = (uint32_t)ADC_SampleTime << (3 * ADC_Channel);
-    313e:	7879      	ldrb	r1, [r7, #1]
-    3140:	78fa      	ldrb	r2, [r7, #3]
-    3142:	4613      	mov	r3, r2
-    3144:	005b      	lsls	r3, r3, #1
-    3146:	4413      	add	r3, r2
-    3148:	fa01 f303 	lsl.w	r3, r1, r3
-    314c:	613b      	str	r3, [r7, #16]
-    /* Set the new channel sample time */
-    tmpreg1 |= tmpreg2;
-    314e:	697a      	ldr	r2, [r7, #20]
-    3150:	693b      	ldr	r3, [r7, #16]
-    3152:	4313      	orrs	r3, r2
-    3154:	617b      	str	r3, [r7, #20]
-    /* Store the new register value */
-    ADCx->SMPR2 = tmpreg1;
-    3156:	687b      	ldr	r3, [r7, #4]
-    3158:	697a      	ldr	r2, [r7, #20]
-    315a:	611a      	str	r2, [r3, #16]
-  }
-  /* Rank configuration */
-  /* Get the old register value */
-  tmpreg1 = ADCx->JSQR;
-    315c:	687b      	ldr	r3, [r7, #4]
-    315e:	6b9b      	ldr	r3, [r3, #56]	; 0x38
-    3160:	617b      	str	r3, [r7, #20]
-  /* Get JL value: Number = JL+1 */
-  tmpreg3 =  (tmpreg1 & JSQR_JL_Set)>> 20;
-    3162:	697b      	ldr	r3, [r7, #20]
-    3164:	0d1b      	lsrs	r3, r3, #20
-    3166:	f003 0303 	and.w	r3, r3, #3
-    316a:	60fb      	str	r3, [r7, #12]
-  /* Calculate the mask to clear: ((Rank-1)+(4-JL-1)) */
-  tmpreg2 = JSQR_JSQ_Set << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
-    316c:	68fb      	ldr	r3, [r7, #12]
-    316e:	b2db      	uxtb	r3, r3
-    3170:	78ba      	ldrb	r2, [r7, #2]
-    3172:	1ad3      	subs	r3, r2, r3
-    3174:	b2db      	uxtb	r3, r3
-    3176:	3302      	adds	r3, #2
-    3178:	b2db      	uxtb	r3, r3
-    317a:	461a      	mov	r2, r3
-    317c:	4613      	mov	r3, r2
-    317e:	009b      	lsls	r3, r3, #2
-    3180:	4413      	add	r3, r2
-    3182:	221f      	movs	r2, #31
-    3184:	fa02 f303 	lsl.w	r3, r2, r3
-    3188:	613b      	str	r3, [r7, #16]
-  /* Clear the old JSQx bits for the selected rank */
-  tmpreg1 &= ~tmpreg2;
-    318a:	693b      	ldr	r3, [r7, #16]
-    318c:	43db      	mvns	r3, r3
-    318e:	697a      	ldr	r2, [r7, #20]
-    3190:	4013      	ands	r3, r2
-    3192:	617b      	str	r3, [r7, #20]
-  /* Calculate the mask to set: ((Rank-1)+(4-JL-1)) */
-  tmpreg2 = (uint32_t)ADC_Channel << (5 * (uint8_t)((Rank + 3) - (tmpreg3 + 1)));
-    3194:	78fa      	ldrb	r2, [r7, #3]
-    3196:	68fb      	ldr	r3, [r7, #12]
-    3198:	b2db      	uxtb	r3, r3
-    319a:	78b9      	ldrb	r1, [r7, #2]
-    319c:	1acb      	subs	r3, r1, r3
-    319e:	b2db      	uxtb	r3, r3
-    31a0:	3302      	adds	r3, #2
-    31a2:	b2db      	uxtb	r3, r3
-    31a4:	4619      	mov	r1, r3
-    31a6:	460b      	mov	r3, r1
-    31a8:	009b      	lsls	r3, r3, #2
-    31aa:	440b      	add	r3, r1
-    31ac:	fa02 f303 	lsl.w	r3, r2, r3
-    31b0:	613b      	str	r3, [r7, #16]
-  /* Set the JSQx bits for the selected rank */
-  tmpreg1 |= tmpreg2;
-    31b2:	697a      	ldr	r2, [r7, #20]
-    31b4:	693b      	ldr	r3, [r7, #16]
-    31b6:	4313      	orrs	r3, r2
-    31b8:	617b      	str	r3, [r7, #20]
-  /* Store the new register value */
-  ADCx->JSQR = tmpreg1;
-    31ba:	687b      	ldr	r3, [r7, #4]
-    31bc:	697a      	ldr	r2, [r7, #20]
-    31be:	639a      	str	r2, [r3, #56]	; 0x38
-}
-    31c0:	bf00      	nop
-    31c2:	371c      	adds	r7, #28
-    31c4:	46bd      	mov	sp, r7
-    31c6:	bc80      	pop	{r7}
-    31c8:	4770      	bx	lr
-
-000031ca <ADC_InjectedSequencerLengthConfig>:
-  * @param  Length: The sequencer length. 
-  *   This parameter must be a number between 1 to 4.
-  * @retval None
-  */
-void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length)
-{
-    31ca:	b480      	push	{r7}
-    31cc:	b085      	sub	sp, #20
-    31ce:	af00      	add	r7, sp, #0
-    31d0:	6078      	str	r0, [r7, #4]
-    31d2:	460b      	mov	r3, r1
-    31d4:	70fb      	strb	r3, [r7, #3]
-  uint32_t tmpreg1 = 0;
-    31d6:	2300      	movs	r3, #0
-    31d8:	60fb      	str	r3, [r7, #12]
-  uint32_t tmpreg2 = 0;
-    31da:	2300      	movs	r3, #0
-    31dc:	60bb      	str	r3, [r7, #8]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_INJECTED_LENGTH(Length));
-  
-  /* Get the old register value */
-  tmpreg1 = ADCx->JSQR;
-    31de:	687b      	ldr	r3, [r7, #4]
-    31e0:	6b9b      	ldr	r3, [r3, #56]	; 0x38
-    31e2:	60fb      	str	r3, [r7, #12]
-  /* Clear the old injected sequnence lenght JL bits */
-  tmpreg1 &= JSQR_JL_Reset;
-    31e4:	68fb      	ldr	r3, [r7, #12]
-    31e6:	f423 1340 	bic.w	r3, r3, #3145728	; 0x300000
-    31ea:	60fb      	str	r3, [r7, #12]
-  /* Set the injected sequnence lenght JL bits */
-  tmpreg2 = Length - 1; 
-    31ec:	78fb      	ldrb	r3, [r7, #3]
-    31ee:	3b01      	subs	r3, #1
-    31f0:	60bb      	str	r3, [r7, #8]
-  tmpreg1 |= tmpreg2 << 20;
-    31f2:	68bb      	ldr	r3, [r7, #8]
-    31f4:	051b      	lsls	r3, r3, #20
-    31f6:	68fa      	ldr	r2, [r7, #12]
-    31f8:	4313      	orrs	r3, r2
-    31fa:	60fb      	str	r3, [r7, #12]
-  /* Store the new register value */
-  ADCx->JSQR = tmpreg1;
-    31fc:	687b      	ldr	r3, [r7, #4]
-    31fe:	68fa      	ldr	r2, [r7, #12]
-    3200:	639a      	str	r2, [r3, #56]	; 0x38
-}
-    3202:	bf00      	nop
-    3204:	3714      	adds	r7, #20
-    3206:	46bd      	mov	sp, r7
-    3208:	bc80      	pop	{r7}
-    320a:	4770      	bx	lr
-
-0000320c <ADC_SetInjectedOffset>:
-  * @param  Offset: the offset value for the selected ADC injected channel
-  *   This parameter must be a 12bit value.
-  * @retval None
-  */
-void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset)
-{
-    320c:	b480      	push	{r7}
-    320e:	b085      	sub	sp, #20
-    3210:	af00      	add	r7, sp, #0
-    3212:	6078      	str	r0, [r7, #4]
-    3214:	460b      	mov	r3, r1
-    3216:	70fb      	strb	r3, [r7, #3]
-    3218:	4613      	mov	r3, r2
-    321a:	803b      	strh	r3, [r7, #0]
-  __IO uint32_t tmp = 0;
-    321c:	2300      	movs	r3, #0
-    321e:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
-  assert_param(IS_ADC_OFFSET(Offset));  
-  
-  tmp = (uint32_t)ADCx;
-    3220:	687b      	ldr	r3, [r7, #4]
-    3222:	60fb      	str	r3, [r7, #12]
-  tmp += ADC_InjectedChannel;
-    3224:	78fa      	ldrb	r2, [r7, #3]
-    3226:	68fb      	ldr	r3, [r7, #12]
-    3228:	4413      	add	r3, r2
-    322a:	60fb      	str	r3, [r7, #12]
-  
-  /* Set the selected injected channel data offset */
-  *(__IO uint32_t *) tmp = (uint32_t)Offset;
-    322c:	68fb      	ldr	r3, [r7, #12]
-    322e:	461a      	mov	r2, r3
-    3230:	883b      	ldrh	r3, [r7, #0]
-    3232:	6013      	str	r3, [r2, #0]
-}
-    3234:	bf00      	nop
-    3236:	3714      	adds	r7, #20
-    3238:	46bd      	mov	sp, r7
-    323a:	bc80      	pop	{r7}
-    323c:	4770      	bx	lr
-
-0000323e <ADC_GetInjectedConversionValue>:
-  *     @arg ADC_InjectedChannel_3: Injected Channel3 selected
-  *     @arg ADC_InjectedChannel_4: Injected Channel4 selected
-  * @retval The Data conversion value.
-  */
-uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel)
-{
-    323e:	b480      	push	{r7}
-    3240:	b085      	sub	sp, #20
-    3242:	af00      	add	r7, sp, #0
-    3244:	6078      	str	r0, [r7, #4]
-    3246:	460b      	mov	r3, r1
-    3248:	70fb      	strb	r3, [r7, #3]
-  __IO uint32_t tmp = 0;
-    324a:	2300      	movs	r3, #0
-    324c:	60fb      	str	r3, [r7, #12]
-  
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_INJECTED_CHANNEL(ADC_InjectedChannel));
-
-  tmp = (uint32_t)ADCx;
-    324e:	687b      	ldr	r3, [r7, #4]
-    3250:	60fb      	str	r3, [r7, #12]
-  tmp += ADC_InjectedChannel + JDR_Offset;
-    3252:	78fa      	ldrb	r2, [r7, #3]
-    3254:	68fb      	ldr	r3, [r7, #12]
-    3256:	4413      	add	r3, r2
-    3258:	3328      	adds	r3, #40	; 0x28
-    325a:	60fb      	str	r3, [r7, #12]
-  
-  /* Returns the selected injected channel conversion data value */
-  return (uint16_t) (*(__IO uint32_t*)  tmp);   
-    325c:	68fb      	ldr	r3, [r7, #12]
-    325e:	681b      	ldr	r3, [r3, #0]
-    3260:	b29b      	uxth	r3, r3
-}
-    3262:	4618      	mov	r0, r3
-    3264:	3714      	adds	r7, #20
-    3266:	46bd      	mov	sp, r7
-    3268:	bc80      	pop	{r7}
-    326a:	4770      	bx	lr
-
-0000326c <ADC_AnalogWatchdogCmd>:
-  *     @arg ADC_AnalogWatchdog_AllRegAllInjecEnable: Analog watchdog on all regular and injected channels
-  *     @arg ADC_AnalogWatchdog_None: No channel guarded by the analog watchdog
-  * @retval None	  
-  */
-void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog)
-{
-    326c:	b480      	push	{r7}
-    326e:	b085      	sub	sp, #20
-    3270:	af00      	add	r7, sp, #0
-    3272:	6078      	str	r0, [r7, #4]
-    3274:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg = 0;
-    3276:	2300      	movs	r3, #0
-    3278:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_ANALOG_WATCHDOG(ADC_AnalogWatchdog));
-  /* Get the old register value */
-  tmpreg = ADCx->CR1;
-    327a:	687b      	ldr	r3, [r7, #4]
-    327c:	685b      	ldr	r3, [r3, #4]
-    327e:	60fb      	str	r3, [r7, #12]
-  /* Clear AWDEN, AWDENJ and AWDSGL bits */
-  tmpreg &= CR1_AWDMode_Reset;
-    3280:	68fb      	ldr	r3, [r7, #12]
-    3282:	f423 0340 	bic.w	r3, r3, #12582912	; 0xc00000
-    3286:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    328a:	60fb      	str	r3, [r7, #12]
-  /* Set the analog watchdog enable mode */
-  tmpreg |= ADC_AnalogWatchdog;
-    328c:	68fa      	ldr	r2, [r7, #12]
-    328e:	683b      	ldr	r3, [r7, #0]
-    3290:	4313      	orrs	r3, r2
-    3292:	60fb      	str	r3, [r7, #12]
-  /* Store the new register value */
-  ADCx->CR1 = tmpreg;
-    3294:	687b      	ldr	r3, [r7, #4]
-    3296:	68fa      	ldr	r2, [r7, #12]
-    3298:	605a      	str	r2, [r3, #4]
-}
-    329a:	bf00      	nop
-    329c:	3714      	adds	r7, #20
-    329e:	46bd      	mov	sp, r7
-    32a0:	bc80      	pop	{r7}
-    32a2:	4770      	bx	lr
-
-000032a4 <ADC_AnalogWatchdogThresholdsConfig>:
-  *   This parameter must be a 12bit value.
-  * @retval None
-  */
-void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold,
-                                        uint16_t LowThreshold)
-{
-    32a4:	b480      	push	{r7}
-    32a6:	b083      	sub	sp, #12
-    32a8:	af00      	add	r7, sp, #0
-    32aa:	6078      	str	r0, [r7, #4]
-    32ac:	460b      	mov	r3, r1
-    32ae:	807b      	strh	r3, [r7, #2]
-    32b0:	4613      	mov	r3, r2
-    32b2:	803b      	strh	r3, [r7, #0]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_THRESHOLD(HighThreshold));
-  assert_param(IS_ADC_THRESHOLD(LowThreshold));
-  /* Set the ADCx high threshold */
-  ADCx->HTR = HighThreshold;
-    32b4:	887a      	ldrh	r2, [r7, #2]
-    32b6:	687b      	ldr	r3, [r7, #4]
-    32b8:	625a      	str	r2, [r3, #36]	; 0x24
-  /* Set the ADCx low threshold */
-  ADCx->LTR = LowThreshold;
-    32ba:	883a      	ldrh	r2, [r7, #0]
-    32bc:	687b      	ldr	r3, [r7, #4]
-    32be:	629a      	str	r2, [r3, #40]	; 0x28
-}
-    32c0:	bf00      	nop
-    32c2:	370c      	adds	r7, #12
-    32c4:	46bd      	mov	sp, r7
-    32c6:	bc80      	pop	{r7}
-    32c8:	4770      	bx	lr
-
-000032ca <ADC_AnalogWatchdogSingleChannelConfig>:
-  *     @arg ADC_Channel_16: ADC Channel16 selected
-  *     @arg ADC_Channel_17: ADC Channel17 selected
-  * @retval None
-  */
-void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel)
-{
-    32ca:	b480      	push	{r7}
-    32cc:	b085      	sub	sp, #20
-    32ce:	af00      	add	r7, sp, #0
-    32d0:	6078      	str	r0, [r7, #4]
-    32d2:	460b      	mov	r3, r1
-    32d4:	70fb      	strb	r3, [r7, #3]
-  uint32_t tmpreg = 0;
-    32d6:	2300      	movs	r3, #0
-    32d8:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_CHANNEL(ADC_Channel));
-  /* Get the old register value */
-  tmpreg = ADCx->CR1;
-    32da:	687b      	ldr	r3, [r7, #4]
-    32dc:	685b      	ldr	r3, [r3, #4]
-    32de:	60fb      	str	r3, [r7, #12]
-  /* Clear the Analog watchdog channel select bits */
-  tmpreg &= CR1_AWDCH_Reset;
-    32e0:	68fb      	ldr	r3, [r7, #12]
-    32e2:	f023 031f 	bic.w	r3, r3, #31
-    32e6:	60fb      	str	r3, [r7, #12]
-  /* Set the Analog watchdog channel */
-  tmpreg |= ADC_Channel;
-    32e8:	78fb      	ldrb	r3, [r7, #3]
-    32ea:	68fa      	ldr	r2, [r7, #12]
-    32ec:	4313      	orrs	r3, r2
-    32ee:	60fb      	str	r3, [r7, #12]
-  /* Store the new register value */
-  ADCx->CR1 = tmpreg;
-    32f0:	687b      	ldr	r3, [r7, #4]
-    32f2:	68fa      	ldr	r2, [r7, #12]
-    32f4:	605a      	str	r2, [r3, #4]
-}
-    32f6:	bf00      	nop
-    32f8:	3714      	adds	r7, #20
-    32fa:	46bd      	mov	sp, r7
-    32fc:	bc80      	pop	{r7}
-    32fe:	4770      	bx	lr
-
-00003300 <ADC_TempSensorVrefintCmd>:
-  * @param  NewState: new state of the temperature sensor.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void ADC_TempSensorVrefintCmd(FunctionalState NewState)
-{
-    3300:	b480      	push	{r7}
-    3302:	b083      	sub	sp, #12
-    3304:	af00      	add	r7, sp, #0
-    3306:	4603      	mov	r3, r0
-    3308:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    330a:	79fb      	ldrb	r3, [r7, #7]
-    330c:	2b00      	cmp	r3, #0
-    330e:	d006      	beq.n	331e <ADC_TempSensorVrefintCmd+0x1e>
-  {
-    /* Enable the temperature sensor and Vrefint channel*/
-    ADC1->CR2 |= CR2_TSVREFE_Set;
-    3310:	4b08      	ldr	r3, [pc, #32]	; (3334 <ADC_TempSensorVrefintCmd+0x34>)
-    3312:	689b      	ldr	r3, [r3, #8]
-    3314:	4a07      	ldr	r2, [pc, #28]	; (3334 <ADC_TempSensorVrefintCmd+0x34>)
-    3316:	f443 0300 	orr.w	r3, r3, #8388608	; 0x800000
-    331a:	6093      	str	r3, [r2, #8]
-  else
-  {
-    /* Disable the temperature sensor and Vrefint channel*/
-    ADC1->CR2 &= CR2_TSVREFE_Reset;
-  }
-}
-    331c:	e005      	b.n	332a <ADC_TempSensorVrefintCmd+0x2a>
-    ADC1->CR2 &= CR2_TSVREFE_Reset;
-    331e:	4b05      	ldr	r3, [pc, #20]	; (3334 <ADC_TempSensorVrefintCmd+0x34>)
-    3320:	689b      	ldr	r3, [r3, #8]
-    3322:	4a04      	ldr	r2, [pc, #16]	; (3334 <ADC_TempSensorVrefintCmd+0x34>)
-    3324:	f423 0300 	bic.w	r3, r3, #8388608	; 0x800000
-    3328:	6093      	str	r3, [r2, #8]
-}
-    332a:	bf00      	nop
-    332c:	370c      	adds	r7, #12
-    332e:	46bd      	mov	sp, r7
-    3330:	bc80      	pop	{r7}
-    3332:	4770      	bx	lr
-    3334:	40012400 	.word	0x40012400
-
-00003338 <ADC_GetFlagStatus>:
-  *     @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
-  *     @arg ADC_FLAG_STRT: Start of regular group conversion flag
-  * @retval The new state of ADC_FLAG (SET or RESET).
-  */
-FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
-{
-    3338:	b480      	push	{r7}
-    333a:	b085      	sub	sp, #20
-    333c:	af00      	add	r7, sp, #0
-    333e:	6078      	str	r0, [r7, #4]
-    3340:	460b      	mov	r3, r1
-    3342:	70fb      	strb	r3, [r7, #3]
-  FlagStatus bitstatus = RESET;
-    3344:	2300      	movs	r3, #0
-    3346:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_GET_FLAG(ADC_FLAG));
-  /* Check the status of the specified ADC flag */
-  if ((ADCx->SR & ADC_FLAG) != (uint8_t)RESET)
-    3348:	687b      	ldr	r3, [r7, #4]
-    334a:	681a      	ldr	r2, [r3, #0]
-    334c:	78fb      	ldrb	r3, [r7, #3]
-    334e:	4013      	ands	r3, r2
-    3350:	2b00      	cmp	r3, #0
-    3352:	d002      	beq.n	335a <ADC_GetFlagStatus+0x22>
-  {
-    /* ADC_FLAG is set */
-    bitstatus = SET;
-    3354:	2301      	movs	r3, #1
-    3356:	73fb      	strb	r3, [r7, #15]
-    3358:	e001      	b.n	335e <ADC_GetFlagStatus+0x26>
-  }
-  else
-  {
-    /* ADC_FLAG is reset */
-    bitstatus = RESET;
-    335a:	2300      	movs	r3, #0
-    335c:	73fb      	strb	r3, [r7, #15]
-  }
-  /* Return the ADC_FLAG status */
-  return  bitstatus;
-    335e:	7bfb      	ldrb	r3, [r7, #15]
-}
-    3360:	4618      	mov	r0, r3
-    3362:	3714      	adds	r7, #20
-    3364:	46bd      	mov	sp, r7
-    3366:	bc80      	pop	{r7}
-    3368:	4770      	bx	lr
-
-0000336a <ADC_ClearFlag>:
-  *     @arg ADC_FLAG_JSTRT: Start of injected group conversion flag
-  *     @arg ADC_FLAG_STRT: Start of regular group conversion flag
-  * @retval None
-  */
-void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
-{
-    336a:	b480      	push	{r7}
-    336c:	b083      	sub	sp, #12
-    336e:	af00      	add	r7, sp, #0
-    3370:	6078      	str	r0, [r7, #4]
-    3372:	460b      	mov	r3, r1
-    3374:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
-  /* Clear the selected ADC flags */
-  ADCx->SR = ~(uint32_t)ADC_FLAG;
-    3376:	78fb      	ldrb	r3, [r7, #3]
-    3378:	43da      	mvns	r2, r3
-    337a:	687b      	ldr	r3, [r7, #4]
-    337c:	601a      	str	r2, [r3, #0]
-}
-    337e:	bf00      	nop
-    3380:	370c      	adds	r7, #12
-    3382:	46bd      	mov	sp, r7
-    3384:	bc80      	pop	{r7}
-    3386:	4770      	bx	lr
-
-00003388 <ADC_GetITStatus>:
-  *     @arg ADC_IT_AWD: Analog watchdog interrupt mask
-  *     @arg ADC_IT_JEOC: End of injected conversion interrupt mask
-  * @retval The new state of ADC_IT (SET or RESET).
-  */
-ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT)
-{
-    3388:	b480      	push	{r7}
-    338a:	b087      	sub	sp, #28
-    338c:	af00      	add	r7, sp, #0
-    338e:	6078      	str	r0, [r7, #4]
-    3390:	460b      	mov	r3, r1
-    3392:	807b      	strh	r3, [r7, #2]
-  ITStatus bitstatus = RESET;
-    3394:	2300      	movs	r3, #0
-    3396:	75fb      	strb	r3, [r7, #23]
-  uint32_t itmask = 0, enablestatus = 0;
-    3398:	2300      	movs	r3, #0
-    339a:	613b      	str	r3, [r7, #16]
-    339c:	2300      	movs	r3, #0
-    339e:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_GET_IT(ADC_IT));
-  /* Get the ADC IT index */
-  itmask = ADC_IT >> 8;
-    33a0:	887b      	ldrh	r3, [r7, #2]
-    33a2:	0a1b      	lsrs	r3, r3, #8
-    33a4:	b29b      	uxth	r3, r3
-    33a6:	613b      	str	r3, [r7, #16]
-  /* Get the ADC_IT enable bit status */
-  enablestatus = (ADCx->CR1 & (uint8_t)ADC_IT) ;
-    33a8:	687b      	ldr	r3, [r7, #4]
-    33aa:	685b      	ldr	r3, [r3, #4]
-    33ac:	887a      	ldrh	r2, [r7, #2]
-    33ae:	b2d2      	uxtb	r2, r2
-    33b0:	4013      	ands	r3, r2
-    33b2:	60fb      	str	r3, [r7, #12]
-  /* Check the status of the specified ADC interrupt */
-  if (((ADCx->SR & itmask) != (uint32_t)RESET) && enablestatus)
-    33b4:	687b      	ldr	r3, [r7, #4]
-    33b6:	681a      	ldr	r2, [r3, #0]
-    33b8:	693b      	ldr	r3, [r7, #16]
-    33ba:	4013      	ands	r3, r2
-    33bc:	2b00      	cmp	r3, #0
-    33be:	d005      	beq.n	33cc <ADC_GetITStatus+0x44>
-    33c0:	68fb      	ldr	r3, [r7, #12]
-    33c2:	2b00      	cmp	r3, #0
-    33c4:	d002      	beq.n	33cc <ADC_GetITStatus+0x44>
-  {
-    /* ADC_IT is set */
-    bitstatus = SET;
-    33c6:	2301      	movs	r3, #1
-    33c8:	75fb      	strb	r3, [r7, #23]
-    33ca:	e001      	b.n	33d0 <ADC_GetITStatus+0x48>
-  }
-  else
-  {
-    /* ADC_IT is reset */
-    bitstatus = RESET;
-    33cc:	2300      	movs	r3, #0
-    33ce:	75fb      	strb	r3, [r7, #23]
-  }
-  /* Return the ADC_IT status */
-  return  bitstatus;
-    33d0:	7dfb      	ldrb	r3, [r7, #23]
-}
-    33d2:	4618      	mov	r0, r3
-    33d4:	371c      	adds	r7, #28
-    33d6:	46bd      	mov	sp, r7
-    33d8:	bc80      	pop	{r7}
-    33da:	4770      	bx	lr
-
-000033dc <ADC_ClearITPendingBit>:
-  *     @arg ADC_IT_AWD: Analog watchdog interrupt mask
-  *     @arg ADC_IT_JEOC: End of injected conversion interrupt mask
-  * @retval None
-  */
-void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT)
-{
-    33dc:	b480      	push	{r7}
-    33de:	b085      	sub	sp, #20
-    33e0:	af00      	add	r7, sp, #0
-    33e2:	6078      	str	r0, [r7, #4]
-    33e4:	460b      	mov	r3, r1
-    33e6:	807b      	strh	r3, [r7, #2]
-  uint8_t itmask = 0;
-    33e8:	2300      	movs	r3, #0
-    33ea:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_ADC_ALL_PERIPH(ADCx));
-  assert_param(IS_ADC_IT(ADC_IT));
-  /* Get the ADC IT index */
-  itmask = (uint8_t)(ADC_IT >> 8);
-    33ec:	887b      	ldrh	r3, [r7, #2]
-    33ee:	0a1b      	lsrs	r3, r3, #8
-    33f0:	b29b      	uxth	r3, r3
-    33f2:	73fb      	strb	r3, [r7, #15]
-  /* Clear the selected ADC interrupt pending bits */
-  ADCx->SR = ~(uint32_t)itmask;
-    33f4:	7bfb      	ldrb	r3, [r7, #15]
-    33f6:	43da      	mvns	r2, r3
-    33f8:	687b      	ldr	r3, [r7, #4]
-    33fa:	601a      	str	r2, [r3, #0]
-}
-    33fc:	bf00      	nop
-    33fe:	3714      	adds	r7, #20
-    3400:	46bd      	mov	sp, r7
-    3402:	bc80      	pop	{r7}
-    3404:	4770      	bx	lr
-    3406:	bf00      	nop
-
-00003408 <TIM_DeInit>:
-  * @brief  Deinitializes the TIMx peripheral registers to their default reset values.
-  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.
-  * @retval None
-  */
-void TIM_DeInit(TIM_TypeDef* TIMx)
-{
-    3408:	b580      	push	{r7, lr}
-    340a:	b082      	sub	sp, #8
-    340c:	af00      	add	r7, sp, #0
-    340e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx)); 
- 
-  if (TIMx == TIM1)
-    3410:	687b      	ldr	r3, [r7, #4]
-    3412:	4a78      	ldr	r2, [pc, #480]	; (35f4 <TIM_DeInit+0x1ec>)
-    3414:	4293      	cmp	r3, r2
-    3416:	d10a      	bne.n	342e <TIM_DeInit+0x26>
-  {
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE);
-    3418:	2101      	movs	r1, #1
-    341a:	f44f 6000 	mov.w	r0, #2048	; 0x800
-    341e:	f7fe f9af 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE);  
-    3422:	2100      	movs	r1, #0
-    3424:	f44f 6000 	mov.w	r0, #2048	; 0x800
-    3428:	f7fe f9aa 	bl	1780 <RCC_APB2PeriphResetCmd>
-    {
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE);
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE);
-    }  
-  }
-}
-    342c:	e0de      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM2)
-    342e:	687b      	ldr	r3, [r7, #4]
-    3430:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    3434:	d108      	bne.n	3448 <TIM_DeInit+0x40>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, ENABLE);
-    3436:	2101      	movs	r1, #1
-    3438:	2001      	movs	r0, #1
-    343a:	f7fe f9bf 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM2, DISABLE);
-    343e:	2100      	movs	r1, #0
-    3440:	2001      	movs	r0, #1
-    3442:	f7fe f9bb 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    3446:	e0d1      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM3)
-    3448:	687b      	ldr	r3, [r7, #4]
-    344a:	4a6b      	ldr	r2, [pc, #428]	; (35f8 <TIM_DeInit+0x1f0>)
-    344c:	4293      	cmp	r3, r2
-    344e:	d108      	bne.n	3462 <TIM_DeInit+0x5a>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, ENABLE);
-    3450:	2101      	movs	r1, #1
-    3452:	2002      	movs	r0, #2
-    3454:	f7fe f9b2 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3, DISABLE);
-    3458:	2100      	movs	r1, #0
-    345a:	2002      	movs	r0, #2
-    345c:	f7fe f9ae 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    3460:	e0c4      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM4)
-    3462:	687b      	ldr	r3, [r7, #4]
-    3464:	4a65      	ldr	r2, [pc, #404]	; (35fc <TIM_DeInit+0x1f4>)
-    3466:	4293      	cmp	r3, r2
-    3468:	d108      	bne.n	347c <TIM_DeInit+0x74>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);
-    346a:	2101      	movs	r1, #1
-    346c:	2004      	movs	r0, #4
-    346e:	f7fe f9a5 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE);
-    3472:	2100      	movs	r1, #0
-    3474:	2004      	movs	r0, #4
-    3476:	f7fe f9a1 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    347a:	e0b7      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM5)
-    347c:	687b      	ldr	r3, [r7, #4]
-    347e:	4a60      	ldr	r2, [pc, #384]	; (3600 <TIM_DeInit+0x1f8>)
-    3480:	4293      	cmp	r3, r2
-    3482:	d108      	bne.n	3496 <TIM_DeInit+0x8e>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, ENABLE);
-    3484:	2101      	movs	r1, #1
-    3486:	2008      	movs	r0, #8
-    3488:	f7fe f998 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM5, DISABLE);
-    348c:	2100      	movs	r1, #0
-    348e:	2008      	movs	r0, #8
-    3490:	f7fe f994 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    3494:	e0aa      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM6)
-    3496:	687b      	ldr	r3, [r7, #4]
-    3498:	4a5a      	ldr	r2, [pc, #360]	; (3604 <TIM_DeInit+0x1fc>)
-    349a:	4293      	cmp	r3, r2
-    349c:	d108      	bne.n	34b0 <TIM_DeInit+0xa8>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, ENABLE);
-    349e:	2101      	movs	r1, #1
-    34a0:	2010      	movs	r0, #16
-    34a2:	f7fe f98b 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM6, DISABLE);
-    34a6:	2100      	movs	r1, #0
-    34a8:	2010      	movs	r0, #16
-    34aa:	f7fe f987 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    34ae:	e09d      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM7)
-    34b0:	687b      	ldr	r3, [r7, #4]
-    34b2:	4a55      	ldr	r2, [pc, #340]	; (3608 <TIM_DeInit+0x200>)
-    34b4:	4293      	cmp	r3, r2
-    34b6:	d108      	bne.n	34ca <TIM_DeInit+0xc2>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, ENABLE);
-    34b8:	2101      	movs	r1, #1
-    34ba:	2020      	movs	r0, #32
-    34bc:	f7fe f97e 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM7, DISABLE);
-    34c0:	2100      	movs	r1, #0
-    34c2:	2020      	movs	r0, #32
-    34c4:	f7fe f97a 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    34c8:	e090      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM8)
-    34ca:	687b      	ldr	r3, [r7, #4]
-    34cc:	4a4f      	ldr	r2, [pc, #316]	; (360c <TIM_DeInit+0x204>)
-    34ce:	4293      	cmp	r3, r2
-    34d0:	d10a      	bne.n	34e8 <TIM_DeInit+0xe0>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, ENABLE);
-    34d2:	2101      	movs	r1, #1
-    34d4:	f44f 5000 	mov.w	r0, #8192	; 0x2000
-    34d8:	f7fe f952 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM8, DISABLE);
-    34dc:	2100      	movs	r1, #0
-    34de:	f44f 5000 	mov.w	r0, #8192	; 0x2000
-    34e2:	f7fe f94d 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    34e6:	e081      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM9)
-    34e8:	687b      	ldr	r3, [r7, #4]
-    34ea:	4a49      	ldr	r2, [pc, #292]	; (3610 <TIM_DeInit+0x208>)
-    34ec:	4293      	cmp	r3, r2
-    34ee:	d10a      	bne.n	3506 <TIM_DeInit+0xfe>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, ENABLE);
-    34f0:	2101      	movs	r1, #1
-    34f2:	f44f 2000 	mov.w	r0, #524288	; 0x80000
-    34f6:	f7fe f943 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM9, DISABLE);  
-    34fa:	2100      	movs	r1, #0
-    34fc:	f44f 2000 	mov.w	r0, #524288	; 0x80000
-    3500:	f7fe f93e 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    3504:	e072      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM10)
-    3506:	687b      	ldr	r3, [r7, #4]
-    3508:	4a42      	ldr	r2, [pc, #264]	; (3614 <TIM_DeInit+0x20c>)
-    350a:	4293      	cmp	r3, r2
-    350c:	d10a      	bne.n	3524 <TIM_DeInit+0x11c>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, ENABLE);
-    350e:	2101      	movs	r1, #1
-    3510:	f44f 1080 	mov.w	r0, #1048576	; 0x100000
-    3514:	f7fe f934 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM10, DISABLE);  
-    3518:	2100      	movs	r1, #0
-    351a:	f44f 1080 	mov.w	r0, #1048576	; 0x100000
-    351e:	f7fe f92f 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    3522:	e063      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM11) 
-    3524:	687b      	ldr	r3, [r7, #4]
-    3526:	4a3c      	ldr	r2, [pc, #240]	; (3618 <TIM_DeInit+0x210>)
-    3528:	4293      	cmp	r3, r2
-    352a:	d10a      	bne.n	3542 <TIM_DeInit+0x13a>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, ENABLE);
-    352c:	2101      	movs	r1, #1
-    352e:	f44f 1000 	mov.w	r0, #2097152	; 0x200000
-    3532:	f7fe f925 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM11, DISABLE);  
-    3536:	2100      	movs	r1, #0
-    3538:	f44f 1000 	mov.w	r0, #2097152	; 0x200000
-    353c:	f7fe f920 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    3540:	e054      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM12)
-    3542:	687b      	ldr	r3, [r7, #4]
-    3544:	4a35      	ldr	r2, [pc, #212]	; (361c <TIM_DeInit+0x214>)
-    3546:	4293      	cmp	r3, r2
-    3548:	d108      	bne.n	355c <TIM_DeInit+0x154>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, ENABLE);
-    354a:	2101      	movs	r1, #1
-    354c:	2040      	movs	r0, #64	; 0x40
-    354e:	f7fe f935 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM12, DISABLE);  
-    3552:	2100      	movs	r1, #0
-    3554:	2040      	movs	r0, #64	; 0x40
-    3556:	f7fe f931 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    355a:	e047      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM13) 
-    355c:	687b      	ldr	r3, [r7, #4]
-    355e:	4a30      	ldr	r2, [pc, #192]	; (3620 <TIM_DeInit+0x218>)
-    3560:	4293      	cmp	r3, r2
-    3562:	d108      	bne.n	3576 <TIM_DeInit+0x16e>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, ENABLE);
-    3564:	2101      	movs	r1, #1
-    3566:	2080      	movs	r0, #128	; 0x80
-    3568:	f7fe f928 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM13, DISABLE);  
-    356c:	2100      	movs	r1, #0
-    356e:	2080      	movs	r0, #128	; 0x80
-    3570:	f7fe f924 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    3574:	e03a      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM14) 
-    3576:	687b      	ldr	r3, [r7, #4]
-    3578:	4a2a      	ldr	r2, [pc, #168]	; (3624 <TIM_DeInit+0x21c>)
-    357a:	4293      	cmp	r3, r2
-    357c:	d10a      	bne.n	3594 <TIM_DeInit+0x18c>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, ENABLE);
-    357e:	2101      	movs	r1, #1
-    3580:	f44f 7080 	mov.w	r0, #256	; 0x100
-    3584:	f7fe f91a 	bl	17bc <RCC_APB1PeriphResetCmd>
-    RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM14, DISABLE);  
-    3588:	2100      	movs	r1, #0
-    358a:	f44f 7080 	mov.w	r0, #256	; 0x100
-    358e:	f7fe f915 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    3592:	e02b      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM15)
-    3594:	687b      	ldr	r3, [r7, #4]
-    3596:	4a24      	ldr	r2, [pc, #144]	; (3628 <TIM_DeInit+0x220>)
-    3598:	4293      	cmp	r3, r2
-    359a:	d10a      	bne.n	35b2 <TIM_DeInit+0x1aa>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, ENABLE);
-    359c:	2101      	movs	r1, #1
-    359e:	f44f 3080 	mov.w	r0, #65536	; 0x10000
-    35a2:	f7fe f8ed 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM15, DISABLE);
-    35a6:	2100      	movs	r1, #0
-    35a8:	f44f 3080 	mov.w	r0, #65536	; 0x10000
-    35ac:	f7fe f8e8 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    35b0:	e01c      	b.n	35ec <TIM_DeInit+0x1e4>
-  else if (TIMx == TIM16)
-    35b2:	687b      	ldr	r3, [r7, #4]
-    35b4:	4a1d      	ldr	r2, [pc, #116]	; (362c <TIM_DeInit+0x224>)
-    35b6:	4293      	cmp	r3, r2
-    35b8:	d10a      	bne.n	35d0 <TIM_DeInit+0x1c8>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, ENABLE);
-    35ba:	2101      	movs	r1, #1
-    35bc:	f44f 3000 	mov.w	r0, #131072	; 0x20000
-    35c0:	f7fe f8de 	bl	1780 <RCC_APB2PeriphResetCmd>
-    RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM16, DISABLE);
-    35c4:	2100      	movs	r1, #0
-    35c6:	f44f 3000 	mov.w	r0, #131072	; 0x20000
-    35ca:	f7fe f8d9 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    35ce:	e00d      	b.n	35ec <TIM_DeInit+0x1e4>
-    if (TIMx == TIM17)
-    35d0:	687b      	ldr	r3, [r7, #4]
-    35d2:	4a17      	ldr	r2, [pc, #92]	; (3630 <TIM_DeInit+0x228>)
-    35d4:	4293      	cmp	r3, r2
-    35d6:	d109      	bne.n	35ec <TIM_DeInit+0x1e4>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, ENABLE);
-    35d8:	2101      	movs	r1, #1
-    35da:	f44f 2080 	mov.w	r0, #262144	; 0x40000
-    35de:	f7fe f8cf 	bl	1780 <RCC_APB2PeriphResetCmd>
-      RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM17, DISABLE);
-    35e2:	2100      	movs	r1, #0
-    35e4:	f44f 2080 	mov.w	r0, #262144	; 0x40000
-    35e8:	f7fe f8ca 	bl	1780 <RCC_APB2PeriphResetCmd>
-}
-    35ec:	bf00      	nop
-    35ee:	3708      	adds	r7, #8
-    35f0:	46bd      	mov	sp, r7
-    35f2:	bd80      	pop	{r7, pc}
-    35f4:	40012c00 	.word	0x40012c00
-    35f8:	40000400 	.word	0x40000400
-    35fc:	40000800 	.word	0x40000800
-    3600:	40000c00 	.word	0x40000c00
-    3604:	40001000 	.word	0x40001000
-    3608:	40001400 	.word	0x40001400
-    360c:	40013400 	.word	0x40013400
-    3610:	40014c00 	.word	0x40014c00
-    3614:	40015000 	.word	0x40015000
-    3618:	40015400 	.word	0x40015400
-    361c:	40001800 	.word	0x40001800
-    3620:	40001c00 	.word	0x40001c00
-    3624:	40002000 	.word	0x40002000
-    3628:	40014000 	.word	0x40014000
-    362c:	40014400 	.word	0x40014400
-    3630:	40014800 	.word	0x40014800
-
-00003634 <TIM_TimeBaseInit>:
-  *         structure that contains the configuration information for the 
-  *         specified TIM peripheral.
-  * @retval None
-  */
-void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
-{
-    3634:	b480      	push	{r7}
-    3636:	b085      	sub	sp, #20
-    3638:	af00      	add	r7, sp, #0
-    363a:	6078      	str	r0, [r7, #4]
-    363c:	6039      	str	r1, [r7, #0]
-  uint16_t tmpcr1 = 0;
-    363e:	2300      	movs	r3, #0
-    3640:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx)); 
-  assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode));
-  assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision));
-
-  tmpcr1 = TIMx->CR1;  
-    3642:	687b      	ldr	r3, [r7, #4]
-    3644:	881b      	ldrh	r3, [r3, #0]
-    3646:	81fb      	strh	r3, [r7, #14]
-
-  if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM2) || (TIMx == TIM3)||
-    3648:	687b      	ldr	r3, [r7, #4]
-    364a:	4a2e      	ldr	r2, [pc, #184]	; (3704 <TIM_TimeBaseInit+0xd0>)
-    364c:	4293      	cmp	r3, r2
-    364e:	d013      	beq.n	3678 <TIM_TimeBaseInit+0x44>
-    3650:	687b      	ldr	r3, [r7, #4]
-    3652:	4a2d      	ldr	r2, [pc, #180]	; (3708 <TIM_TimeBaseInit+0xd4>)
-    3654:	4293      	cmp	r3, r2
-    3656:	d00f      	beq.n	3678 <TIM_TimeBaseInit+0x44>
-    3658:	687b      	ldr	r3, [r7, #4]
-    365a:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    365e:	d00b      	beq.n	3678 <TIM_TimeBaseInit+0x44>
-    3660:	687b      	ldr	r3, [r7, #4]
-    3662:	4a2a      	ldr	r2, [pc, #168]	; (370c <TIM_TimeBaseInit+0xd8>)
-    3664:	4293      	cmp	r3, r2
-    3666:	d007      	beq.n	3678 <TIM_TimeBaseInit+0x44>
-    3668:	687b      	ldr	r3, [r7, #4]
-    366a:	4a29      	ldr	r2, [pc, #164]	; (3710 <TIM_TimeBaseInit+0xdc>)
-    366c:	4293      	cmp	r3, r2
-    366e:	d003      	beq.n	3678 <TIM_TimeBaseInit+0x44>
-     (TIMx == TIM4) || (TIMx == TIM5)) 
-    3670:	687b      	ldr	r3, [r7, #4]
-    3672:	4a28      	ldr	r2, [pc, #160]	; (3714 <TIM_TimeBaseInit+0xe0>)
-    3674:	4293      	cmp	r3, r2
-    3676:	d108      	bne.n	368a <TIM_TimeBaseInit+0x56>
-  {
-    /* Select the Counter Mode */
-    tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS)));
-    3678:	89fb      	ldrh	r3, [r7, #14]
-    367a:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    367e:	81fb      	strh	r3, [r7, #14]
-    tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_CounterMode;
-    3680:	683b      	ldr	r3, [r7, #0]
-    3682:	885a      	ldrh	r2, [r3, #2]
-    3684:	89fb      	ldrh	r3, [r7, #14]
-    3686:	4313      	orrs	r3, r2
-    3688:	81fb      	strh	r3, [r7, #14]
-  }
- 
-  if((TIMx != TIM6) && (TIMx != TIM7))
-    368a:	687b      	ldr	r3, [r7, #4]
-    368c:	4a22      	ldr	r2, [pc, #136]	; (3718 <TIM_TimeBaseInit+0xe4>)
-    368e:	4293      	cmp	r3, r2
-    3690:	d00c      	beq.n	36ac <TIM_TimeBaseInit+0x78>
-    3692:	687b      	ldr	r3, [r7, #4]
-    3694:	4a21      	ldr	r2, [pc, #132]	; (371c <TIM_TimeBaseInit+0xe8>)
-    3696:	4293      	cmp	r3, r2
-    3698:	d008      	beq.n	36ac <TIM_TimeBaseInit+0x78>
-  {
-    /* Set the clock division */
-    tmpcr1 &= (uint16_t)(~((uint16_t)TIM_CR1_CKD));
-    369a:	89fb      	ldrh	r3, [r7, #14]
-    369c:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    36a0:	81fb      	strh	r3, [r7, #14]
-    tmpcr1 |= (uint32_t)TIM_TimeBaseInitStruct->TIM_ClockDivision;
-    36a2:	683b      	ldr	r3, [r7, #0]
-    36a4:	88da      	ldrh	r2, [r3, #6]
-    36a6:	89fb      	ldrh	r3, [r7, #14]
-    36a8:	4313      	orrs	r3, r2
-    36aa:	81fb      	strh	r3, [r7, #14]
-  }
-
-  TIMx->CR1 = tmpcr1;
-    36ac:	687b      	ldr	r3, [r7, #4]
-    36ae:	89fa      	ldrh	r2, [r7, #14]
-    36b0:	801a      	strh	r2, [r3, #0]
-
-  /* Set the Autoreload value */
-  TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ;
-    36b2:	683b      	ldr	r3, [r7, #0]
-    36b4:	889a      	ldrh	r2, [r3, #4]
-    36b6:	687b      	ldr	r3, [r7, #4]
-    36b8:	859a      	strh	r2, [r3, #44]	; 0x2c
- 
-  /* Set the Prescaler value */
-  TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler;
-    36ba:	683b      	ldr	r3, [r7, #0]
-    36bc:	881a      	ldrh	r2, [r3, #0]
-    36be:	687b      	ldr	r3, [r7, #4]
-    36c0:	851a      	strh	r2, [r3, #40]	; 0x28
-    
-  if ((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)|| (TIMx == TIM16) || (TIMx == TIM17))  
-    36c2:	687b      	ldr	r3, [r7, #4]
-    36c4:	4a0f      	ldr	r2, [pc, #60]	; (3704 <TIM_TimeBaseInit+0xd0>)
-    36c6:	4293      	cmp	r3, r2
-    36c8:	d00f      	beq.n	36ea <TIM_TimeBaseInit+0xb6>
-    36ca:	687b      	ldr	r3, [r7, #4]
-    36cc:	4a0e      	ldr	r2, [pc, #56]	; (3708 <TIM_TimeBaseInit+0xd4>)
-    36ce:	4293      	cmp	r3, r2
-    36d0:	d00b      	beq.n	36ea <TIM_TimeBaseInit+0xb6>
-    36d2:	687b      	ldr	r3, [r7, #4]
-    36d4:	4a12      	ldr	r2, [pc, #72]	; (3720 <TIM_TimeBaseInit+0xec>)
-    36d6:	4293      	cmp	r3, r2
-    36d8:	d007      	beq.n	36ea <TIM_TimeBaseInit+0xb6>
-    36da:	687b      	ldr	r3, [r7, #4]
-    36dc:	4a11      	ldr	r2, [pc, #68]	; (3724 <TIM_TimeBaseInit+0xf0>)
-    36de:	4293      	cmp	r3, r2
-    36e0:	d003      	beq.n	36ea <TIM_TimeBaseInit+0xb6>
-    36e2:	687b      	ldr	r3, [r7, #4]
-    36e4:	4a10      	ldr	r2, [pc, #64]	; (3728 <TIM_TimeBaseInit+0xf4>)
-    36e6:	4293      	cmp	r3, r2
-    36e8:	d104      	bne.n	36f4 <TIM_TimeBaseInit+0xc0>
-  {
-    /* Set the Repetition Counter value */
-    TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
-    36ea:	683b      	ldr	r3, [r7, #0]
-    36ec:	7a1b      	ldrb	r3, [r3, #8]
-    36ee:	b29a      	uxth	r2, r3
-    36f0:	687b      	ldr	r3, [r7, #4]
-    36f2:	861a      	strh	r2, [r3, #48]	; 0x30
-  }
-
-  /* Generate an update event to reload the Prescaler and the Repetition counter
-     values immediately */
-  TIMx->EGR = TIM_PSCReloadMode_Immediate;           
-    36f4:	687b      	ldr	r3, [r7, #4]
-    36f6:	2201      	movs	r2, #1
-    36f8:	829a      	strh	r2, [r3, #20]
-}
-    36fa:	bf00      	nop
-    36fc:	3714      	adds	r7, #20
-    36fe:	46bd      	mov	sp, r7
-    3700:	bc80      	pop	{r7}
-    3702:	4770      	bx	lr
-    3704:	40012c00 	.word	0x40012c00
-    3708:	40013400 	.word	0x40013400
-    370c:	40000400 	.word	0x40000400
-    3710:	40000800 	.word	0x40000800
-    3714:	40000c00 	.word	0x40000c00
-    3718:	40001000 	.word	0x40001000
-    371c:	40001400 	.word	0x40001400
-    3720:	40014000 	.word	0x40014000
-    3724:	40014400 	.word	0x40014400
-    3728:	40014800 	.word	0x40014800
-
-0000372c <TIM_OC1Init>:
-  * @param  TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
-{
-    372c:	b480      	push	{r7}
-    372e:	b085      	sub	sp, #20
-    3730:	af00      	add	r7, sp, #0
-    3732:	6078      	str	r0, [r7, #4]
-    3734:	6039      	str	r1, [r7, #0]
-  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
-    3736:	2300      	movs	r3, #0
-    3738:	817b      	strh	r3, [r7, #10]
-    373a:	2300      	movs	r3, #0
-    373c:	81fb      	strh	r3, [r7, #14]
-    373e:	2300      	movs	r3, #0
-    3740:	81bb      	strh	r3, [r7, #12]
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
-  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
- /* Disable the Channel 1: Reset the CC1E Bit */
-  TIMx->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E);
-    3742:	687b      	ldr	r3, [r7, #4]
-    3744:	8c1b      	ldrh	r3, [r3, #32]
-    3746:	b29b      	uxth	r3, r3
-    3748:	f023 0301 	bic.w	r3, r3, #1
-    374c:	b29a      	uxth	r2, r3
-    374e:	687b      	ldr	r3, [r7, #4]
-    3750:	841a      	strh	r2, [r3, #32]
-  /* Get the TIMx CCER register value */
-  tmpccer = TIMx->CCER;
-    3752:	687b      	ldr	r3, [r7, #4]
-    3754:	8c1b      	ldrh	r3, [r3, #32]
-    3756:	81fb      	strh	r3, [r7, #14]
-  /* Get the TIMx CR2 register value */
-  tmpcr2 =  TIMx->CR2;
-    3758:	687b      	ldr	r3, [r7, #4]
-    375a:	889b      	ldrh	r3, [r3, #4]
-    375c:	81bb      	strh	r3, [r7, #12]
-  
-  /* Get the TIMx CCMR1 register value */
-  tmpccmrx = TIMx->CCMR1;
-    375e:	687b      	ldr	r3, [r7, #4]
-    3760:	8b1b      	ldrh	r3, [r3, #24]
-    3762:	817b      	strh	r3, [r7, #10]
-    
-  /* Reset the Output Compare Mode Bits */
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC1M));
-    3764:	897b      	ldrh	r3, [r7, #10]
-    3766:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    376a:	817b      	strh	r3, [r7, #10]
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC1S));
-    376c:	897b      	ldrh	r3, [r7, #10]
-    376e:	f023 0303 	bic.w	r3, r3, #3
-    3772:	817b      	strh	r3, [r7, #10]
-
-  /* Select the Output Compare Mode */
-  tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
-    3774:	683b      	ldr	r3, [r7, #0]
-    3776:	881a      	ldrh	r2, [r3, #0]
-    3778:	897b      	ldrh	r3, [r7, #10]
-    377a:	4313      	orrs	r3, r2
-    377c:	817b      	strh	r3, [r7, #10]
-  
-  /* Reset the Output Polarity level */
-  tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1P));
-    377e:	89fb      	ldrh	r3, [r7, #14]
-    3780:	f023 0302 	bic.w	r3, r3, #2
-    3784:	81fb      	strh	r3, [r7, #14]
-  /* Set the Output Compare Polarity */
-  tmpccer |= TIM_OCInitStruct->TIM_OCPolarity;
-    3786:	683b      	ldr	r3, [r7, #0]
-    3788:	891a      	ldrh	r2, [r3, #8]
-    378a:	89fb      	ldrh	r3, [r7, #14]
-    378c:	4313      	orrs	r3, r2
-    378e:	81fb      	strh	r3, [r7, #14]
-  
-  /* Set the Output State */
-  tmpccer |= TIM_OCInitStruct->TIM_OutputState;
-    3790:	683b      	ldr	r3, [r7, #0]
-    3792:	885a      	ldrh	r2, [r3, #2]
-    3794:	89fb      	ldrh	r3, [r7, #14]
-    3796:	4313      	orrs	r3, r2
-    3798:	81fb      	strh	r3, [r7, #14]
-    
-  if((TIMx == TIM1) || (TIMx == TIM8)|| (TIMx == TIM15)||
-    379a:	687b      	ldr	r3, [r7, #4]
-    379c:	4a24      	ldr	r2, [pc, #144]	; (3830 <TIM_OC1Init+0x104>)
-    379e:	4293      	cmp	r3, r2
-    37a0:	d00f      	beq.n	37c2 <TIM_OC1Init+0x96>
-    37a2:	687b      	ldr	r3, [r7, #4]
-    37a4:	4a23      	ldr	r2, [pc, #140]	; (3834 <TIM_OC1Init+0x108>)
-    37a6:	4293      	cmp	r3, r2
-    37a8:	d00b      	beq.n	37c2 <TIM_OC1Init+0x96>
-    37aa:	687b      	ldr	r3, [r7, #4]
-    37ac:	4a22      	ldr	r2, [pc, #136]	; (3838 <TIM_OC1Init+0x10c>)
-    37ae:	4293      	cmp	r3, r2
-    37b0:	d007      	beq.n	37c2 <TIM_OC1Init+0x96>
-    37b2:	687b      	ldr	r3, [r7, #4]
-    37b4:	4a21      	ldr	r2, [pc, #132]	; (383c <TIM_OC1Init+0x110>)
-    37b6:	4293      	cmp	r3, r2
-    37b8:	d003      	beq.n	37c2 <TIM_OC1Init+0x96>
-     (TIMx == TIM16)|| (TIMx == TIM17))
-    37ba:	687b      	ldr	r3, [r7, #4]
-    37bc:	4a20      	ldr	r2, [pc, #128]	; (3840 <TIM_OC1Init+0x114>)
-    37be:	4293      	cmp	r3, r2
-    37c0:	d123      	bne.n	380a <TIM_OC1Init+0xde>
-    assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
-    assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
-    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
-    
-    /* Reset the Output N Polarity level */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NP));
-    37c2:	89fb      	ldrh	r3, [r7, #14]
-    37c4:	f023 0308 	bic.w	r3, r3, #8
-    37c8:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output N Polarity */
-    tmpccer |= TIM_OCInitStruct->TIM_OCNPolarity;
-    37ca:	683b      	ldr	r3, [r7, #0]
-    37cc:	895a      	ldrh	r2, [r3, #10]
-    37ce:	89fb      	ldrh	r3, [r7, #14]
-    37d0:	4313      	orrs	r3, r2
-    37d2:	81fb      	strh	r3, [r7, #14]
-    
-    /* Reset the Output N State */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC1NE));    
-    37d4:	89fb      	ldrh	r3, [r7, #14]
-    37d6:	f023 0304 	bic.w	r3, r3, #4
-    37da:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output N State */
-    tmpccer |= TIM_OCInitStruct->TIM_OutputNState;
-    37dc:	683b      	ldr	r3, [r7, #0]
-    37de:	889a      	ldrh	r2, [r3, #4]
-    37e0:	89fb      	ldrh	r3, [r7, #14]
-    37e2:	4313      	orrs	r3, r2
-    37e4:	81fb      	strh	r3, [r7, #14]
-    
-    /* Reset the Output Compare and Output Compare N IDLE State */
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1));
-    37e6:	89bb      	ldrh	r3, [r7, #12]
-    37e8:	f423 7380 	bic.w	r3, r3, #256	; 0x100
-    37ec:	81bb      	strh	r3, [r7, #12]
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS1N));
-    37ee:	89bb      	ldrh	r3, [r7, #12]
-    37f0:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    37f4:	81bb      	strh	r3, [r7, #12]
-    
-    /* Set the Output Idle state */
-    tmpcr2 |= TIM_OCInitStruct->TIM_OCIdleState;
-    37f6:	683b      	ldr	r3, [r7, #0]
-    37f8:	899a      	ldrh	r2, [r3, #12]
-    37fa:	89bb      	ldrh	r3, [r7, #12]
-    37fc:	4313      	orrs	r3, r2
-    37fe:	81bb      	strh	r3, [r7, #12]
-    /* Set the Output N Idle state */
-    tmpcr2 |= TIM_OCInitStruct->TIM_OCNIdleState;
-    3800:	683b      	ldr	r3, [r7, #0]
-    3802:	89da      	ldrh	r2, [r3, #14]
-    3804:	89bb      	ldrh	r3, [r7, #12]
-    3806:	4313      	orrs	r3, r2
-    3808:	81bb      	strh	r3, [r7, #12]
-  }
-  /* Write to TIMx CR2 */
-  TIMx->CR2 = tmpcr2;
-    380a:	687b      	ldr	r3, [r7, #4]
-    380c:	89ba      	ldrh	r2, [r7, #12]
-    380e:	809a      	strh	r2, [r3, #4]
-  
-  /* Write to TIMx CCMR1 */
-  TIMx->CCMR1 = tmpccmrx;
-    3810:	687b      	ldr	r3, [r7, #4]
-    3812:	897a      	ldrh	r2, [r7, #10]
-    3814:	831a      	strh	r2, [r3, #24]
-
-  /* Set the Capture Compare Register value */
-  TIMx->CCR1 = TIM_OCInitStruct->TIM_Pulse; 
-    3816:	683b      	ldr	r3, [r7, #0]
-    3818:	88da      	ldrh	r2, [r3, #6]
-    381a:	687b      	ldr	r3, [r7, #4]
-    381c:	869a      	strh	r2, [r3, #52]	; 0x34
- 
-  /* Write to TIMx CCER */
-  TIMx->CCER = tmpccer;
-    381e:	687b      	ldr	r3, [r7, #4]
-    3820:	89fa      	ldrh	r2, [r7, #14]
-    3822:	841a      	strh	r2, [r3, #32]
-}
-    3824:	bf00      	nop
-    3826:	3714      	adds	r7, #20
-    3828:	46bd      	mov	sp, r7
-    382a:	bc80      	pop	{r7}
-    382c:	4770      	bx	lr
-    382e:	bf00      	nop
-    3830:	40012c00 	.word	0x40012c00
-    3834:	40013400 	.word	0x40013400
-    3838:	40014000 	.word	0x40014000
-    383c:	40014400 	.word	0x40014400
-    3840:	40014800 	.word	0x40014800
-
-00003844 <TIM_OC2Init>:
-  * @param  TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
-{
-    3844:	b480      	push	{r7}
-    3846:	b085      	sub	sp, #20
-    3848:	af00      	add	r7, sp, #0
-    384a:	6078      	str	r0, [r7, #4]
-    384c:	6039      	str	r1, [r7, #0]
-  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
-    384e:	2300      	movs	r3, #0
-    3850:	817b      	strh	r3, [r7, #10]
-    3852:	2300      	movs	r3, #0
-    3854:	81fb      	strh	r3, [r7, #14]
-    3856:	2300      	movs	r3, #0
-    3858:	81bb      	strh	r3, [r7, #12]
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx)); 
-  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
-  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
-   /* Disable the Channel 2: Reset the CC2E Bit */
-  TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC2E));
-    385a:	687b      	ldr	r3, [r7, #4]
-    385c:	8c1b      	ldrh	r3, [r3, #32]
-    385e:	b29b      	uxth	r3, r3
-    3860:	f023 0310 	bic.w	r3, r3, #16
-    3864:	b29a      	uxth	r2, r3
-    3866:	687b      	ldr	r3, [r7, #4]
-    3868:	841a      	strh	r2, [r3, #32]
-  
-  /* Get the TIMx CCER register value */  
-  tmpccer = TIMx->CCER;
-    386a:	687b      	ldr	r3, [r7, #4]
-    386c:	8c1b      	ldrh	r3, [r3, #32]
-    386e:	81fb      	strh	r3, [r7, #14]
-  /* Get the TIMx CR2 register value */
-  tmpcr2 =  TIMx->CR2;
-    3870:	687b      	ldr	r3, [r7, #4]
-    3872:	889b      	ldrh	r3, [r3, #4]
-    3874:	81bb      	strh	r3, [r7, #12]
-  
-  /* Get the TIMx CCMR1 register value */
-  tmpccmrx = TIMx->CCMR1;
-    3876:	687b      	ldr	r3, [r7, #4]
-    3878:	8b1b      	ldrh	r3, [r3, #24]
-    387a:	817b      	strh	r3, [r7, #10]
-    
-  /* Reset the Output Compare mode and Capture/Compare selection Bits */
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_OC2M));
-    387c:	897b      	ldrh	r3, [r7, #10]
-    387e:	f423 43e0 	bic.w	r3, r3, #28672	; 0x7000
-    3882:	817b      	strh	r3, [r7, #10]
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S));
-    3884:	897b      	ldrh	r3, [r7, #10]
-    3886:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    388a:	817b      	strh	r3, [r7, #10]
-  
-  /* Select the Output Compare Mode */
-  tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
-    388c:	683b      	ldr	r3, [r7, #0]
-    388e:	881b      	ldrh	r3, [r3, #0]
-    3890:	021b      	lsls	r3, r3, #8
-    3892:	b29a      	uxth	r2, r3
-    3894:	897b      	ldrh	r3, [r7, #10]
-    3896:	4313      	orrs	r3, r2
-    3898:	817b      	strh	r3, [r7, #10]
-  
-  /* Reset the Output Polarity level */
-  tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2P));
-    389a:	89fb      	ldrh	r3, [r7, #14]
-    389c:	f023 0320 	bic.w	r3, r3, #32
-    38a0:	81fb      	strh	r3, [r7, #14]
-  /* Set the Output Compare Polarity */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 4);
-    38a2:	683b      	ldr	r3, [r7, #0]
-    38a4:	891b      	ldrh	r3, [r3, #8]
-    38a6:	011b      	lsls	r3, r3, #4
-    38a8:	b29a      	uxth	r2, r3
-    38aa:	89fb      	ldrh	r3, [r7, #14]
-    38ac:	4313      	orrs	r3, r2
-    38ae:	81fb      	strh	r3, [r7, #14]
-  
-  /* Set the Output State */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 4);
-    38b0:	683b      	ldr	r3, [r7, #0]
-    38b2:	885b      	ldrh	r3, [r3, #2]
-    38b4:	011b      	lsls	r3, r3, #4
-    38b6:	b29a      	uxth	r2, r3
-    38b8:	89fb      	ldrh	r3, [r7, #14]
-    38ba:	4313      	orrs	r3, r2
-    38bc:	81fb      	strh	r3, [r7, #14]
-    
-  if((TIMx == TIM1) || (TIMx == TIM8))
-    38be:	687b      	ldr	r3, [r7, #4]
-    38c0:	4a22      	ldr	r2, [pc, #136]	; (394c <TIM_OC2Init+0x108>)
-    38c2:	4293      	cmp	r3, r2
-    38c4:	d003      	beq.n	38ce <TIM_OC2Init+0x8a>
-    38c6:	687b      	ldr	r3, [r7, #4]
-    38c8:	4a21      	ldr	r2, [pc, #132]	; (3950 <TIM_OC2Init+0x10c>)
-    38ca:	4293      	cmp	r3, r2
-    38cc:	d12b      	bne.n	3926 <TIM_OC2Init+0xe2>
-    assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
-    assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
-    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
-    
-    /* Reset the Output N Polarity level */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NP));
-    38ce:	89fb      	ldrh	r3, [r7, #14]
-    38d0:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    38d4:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output N Polarity */
-    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 4);
-    38d6:	683b      	ldr	r3, [r7, #0]
-    38d8:	895b      	ldrh	r3, [r3, #10]
-    38da:	011b      	lsls	r3, r3, #4
-    38dc:	b29a      	uxth	r2, r3
-    38de:	89fb      	ldrh	r3, [r7, #14]
-    38e0:	4313      	orrs	r3, r2
-    38e2:	81fb      	strh	r3, [r7, #14]
-    
-    /* Reset the Output N State */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC2NE));    
-    38e4:	89fb      	ldrh	r3, [r7, #14]
-    38e6:	f023 0340 	bic.w	r3, r3, #64	; 0x40
-    38ea:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output N State */
-    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4);
-    38ec:	683b      	ldr	r3, [r7, #0]
-    38ee:	889b      	ldrh	r3, [r3, #4]
-    38f0:	011b      	lsls	r3, r3, #4
-    38f2:	b29a      	uxth	r2, r3
-    38f4:	89fb      	ldrh	r3, [r7, #14]
-    38f6:	4313      	orrs	r3, r2
-    38f8:	81fb      	strh	r3, [r7, #14]
-    
-    /* Reset the Output Compare and Output Compare N IDLE State */
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2));
-    38fa:	89bb      	ldrh	r3, [r7, #12]
-    38fc:	f423 6380 	bic.w	r3, r3, #1024	; 0x400
-    3900:	81bb      	strh	r3, [r7, #12]
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS2N));
-    3902:	89bb      	ldrh	r3, [r7, #12]
-    3904:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    3908:	81bb      	strh	r3, [r7, #12]
-    
-    /* Set the Output Idle state */
-    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 2);
-    390a:	683b      	ldr	r3, [r7, #0]
-    390c:	899b      	ldrh	r3, [r3, #12]
-    390e:	009b      	lsls	r3, r3, #2
-    3910:	b29a      	uxth	r2, r3
-    3912:	89bb      	ldrh	r3, [r7, #12]
-    3914:	4313      	orrs	r3, r2
-    3916:	81bb      	strh	r3, [r7, #12]
-    /* Set the Output N Idle state */
-    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 2);
-    3918:	683b      	ldr	r3, [r7, #0]
-    391a:	89db      	ldrh	r3, [r3, #14]
-    391c:	009b      	lsls	r3, r3, #2
-    391e:	b29a      	uxth	r2, r3
-    3920:	89bb      	ldrh	r3, [r7, #12]
-    3922:	4313      	orrs	r3, r2
-    3924:	81bb      	strh	r3, [r7, #12]
-  }
-  /* Write to TIMx CR2 */
-  TIMx->CR2 = tmpcr2;
-    3926:	687b      	ldr	r3, [r7, #4]
-    3928:	89ba      	ldrh	r2, [r7, #12]
-    392a:	809a      	strh	r2, [r3, #4]
-  
-  /* Write to TIMx CCMR1 */
-  TIMx->CCMR1 = tmpccmrx;
-    392c:	687b      	ldr	r3, [r7, #4]
-    392e:	897a      	ldrh	r2, [r7, #10]
-    3930:	831a      	strh	r2, [r3, #24]
-
-  /* Set the Capture Compare Register value */
-  TIMx->CCR2 = TIM_OCInitStruct->TIM_Pulse;
-    3932:	683b      	ldr	r3, [r7, #0]
-    3934:	88da      	ldrh	r2, [r3, #6]
-    3936:	687b      	ldr	r3, [r7, #4]
-    3938:	871a      	strh	r2, [r3, #56]	; 0x38
-  
-  /* Write to TIMx CCER */
-  TIMx->CCER = tmpccer;
-    393a:	687b      	ldr	r3, [r7, #4]
-    393c:	89fa      	ldrh	r2, [r7, #14]
-    393e:	841a      	strh	r2, [r3, #32]
-}
-    3940:	bf00      	nop
-    3942:	3714      	adds	r7, #20
-    3944:	46bd      	mov	sp, r7
-    3946:	bc80      	pop	{r7}
-    3948:	4770      	bx	lr
-    394a:	bf00      	nop
-    394c:	40012c00 	.word	0x40012c00
-    3950:	40013400 	.word	0x40013400
-
-00003954 <TIM_OC3Init>:
-  * @param  TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
-{
-    3954:	b480      	push	{r7}
-    3956:	b085      	sub	sp, #20
-    3958:	af00      	add	r7, sp, #0
-    395a:	6078      	str	r0, [r7, #4]
-    395c:	6039      	str	r1, [r7, #0]
-  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
-    395e:	2300      	movs	r3, #0
-    3960:	817b      	strh	r3, [r7, #10]
-    3962:	2300      	movs	r3, #0
-    3964:	81fb      	strh	r3, [r7, #14]
-    3966:	2300      	movs	r3, #0
-    3968:	81bb      	strh	r3, [r7, #12]
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx)); 
-  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
-  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
-  /* Disable the Channel 2: Reset the CC2E Bit */
-  TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC3E));
-    396a:	687b      	ldr	r3, [r7, #4]
-    396c:	8c1b      	ldrh	r3, [r3, #32]
-    396e:	b29b      	uxth	r3, r3
-    3970:	f423 7380 	bic.w	r3, r3, #256	; 0x100
-    3974:	b29a      	uxth	r2, r3
-    3976:	687b      	ldr	r3, [r7, #4]
-    3978:	841a      	strh	r2, [r3, #32]
-  
-  /* Get the TIMx CCER register value */
-  tmpccer = TIMx->CCER;
-    397a:	687b      	ldr	r3, [r7, #4]
-    397c:	8c1b      	ldrh	r3, [r3, #32]
-    397e:	81fb      	strh	r3, [r7, #14]
-  /* Get the TIMx CR2 register value */
-  tmpcr2 =  TIMx->CR2;
-    3980:	687b      	ldr	r3, [r7, #4]
-    3982:	889b      	ldrh	r3, [r3, #4]
-    3984:	81bb      	strh	r3, [r7, #12]
-  
-  /* Get the TIMx CCMR2 register value */
-  tmpccmrx = TIMx->CCMR2;
-    3986:	687b      	ldr	r3, [r7, #4]
-    3988:	8b9b      	ldrh	r3, [r3, #28]
-    398a:	817b      	strh	r3, [r7, #10]
-    
-  /* Reset the Output Compare mode and Capture/Compare selection Bits */
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC3M));
-    398c:	897b      	ldrh	r3, [r7, #10]
-    398e:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    3992:	817b      	strh	r3, [r7, #10]
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC3S));  
-    3994:	897b      	ldrh	r3, [r7, #10]
-    3996:	f023 0303 	bic.w	r3, r3, #3
-    399a:	817b      	strh	r3, [r7, #10]
-  /* Select the Output Compare Mode */
-  tmpccmrx |= TIM_OCInitStruct->TIM_OCMode;
-    399c:	683b      	ldr	r3, [r7, #0]
-    399e:	881a      	ldrh	r2, [r3, #0]
-    39a0:	897b      	ldrh	r3, [r7, #10]
-    39a2:	4313      	orrs	r3, r2
-    39a4:	817b      	strh	r3, [r7, #10]
-  
-  /* Reset the Output Polarity level */
-  tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3P));
-    39a6:	89fb      	ldrh	r3, [r7, #14]
-    39a8:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    39ac:	81fb      	strh	r3, [r7, #14]
-  /* Set the Output Compare Polarity */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 8);
-    39ae:	683b      	ldr	r3, [r7, #0]
-    39b0:	891b      	ldrh	r3, [r3, #8]
-    39b2:	021b      	lsls	r3, r3, #8
-    39b4:	b29a      	uxth	r2, r3
-    39b6:	89fb      	ldrh	r3, [r7, #14]
-    39b8:	4313      	orrs	r3, r2
-    39ba:	81fb      	strh	r3, [r7, #14]
-  
-  /* Set the Output State */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 8);
-    39bc:	683b      	ldr	r3, [r7, #0]
-    39be:	885b      	ldrh	r3, [r3, #2]
-    39c0:	021b      	lsls	r3, r3, #8
-    39c2:	b29a      	uxth	r2, r3
-    39c4:	89fb      	ldrh	r3, [r7, #14]
-    39c6:	4313      	orrs	r3, r2
-    39c8:	81fb      	strh	r3, [r7, #14]
-    
-  if((TIMx == TIM1) || (TIMx == TIM8))
-    39ca:	687b      	ldr	r3, [r7, #4]
-    39cc:	4a22      	ldr	r2, [pc, #136]	; (3a58 <TIM_OC3Init+0x104>)
-    39ce:	4293      	cmp	r3, r2
-    39d0:	d003      	beq.n	39da <TIM_OC3Init+0x86>
-    39d2:	687b      	ldr	r3, [r7, #4]
-    39d4:	4a21      	ldr	r2, [pc, #132]	; (3a5c <TIM_OC3Init+0x108>)
-    39d6:	4293      	cmp	r3, r2
-    39d8:	d12b      	bne.n	3a32 <TIM_OC3Init+0xde>
-    assert_param(IS_TIM_OCN_POLARITY(TIM_OCInitStruct->TIM_OCNPolarity));
-    assert_param(IS_TIM_OCNIDLE_STATE(TIM_OCInitStruct->TIM_OCNIdleState));
-    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
-    
-    /* Reset the Output N Polarity level */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NP));
-    39da:	89fb      	ldrh	r3, [r7, #14]
-    39dc:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    39e0:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output N Polarity */
-    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCNPolarity << 8);
-    39e2:	683b      	ldr	r3, [r7, #0]
-    39e4:	895b      	ldrh	r3, [r3, #10]
-    39e6:	021b      	lsls	r3, r3, #8
-    39e8:	b29a      	uxth	r2, r3
-    39ea:	89fb      	ldrh	r3, [r7, #14]
-    39ec:	4313      	orrs	r3, r2
-    39ee:	81fb      	strh	r3, [r7, #14]
-    /* Reset the Output N State */
-    tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC3NE));
-    39f0:	89fb      	ldrh	r3, [r7, #14]
-    39f2:	f423 6380 	bic.w	r3, r3, #1024	; 0x400
-    39f6:	81fb      	strh	r3, [r7, #14]
-    
-    /* Set the Output N State */
-    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 8);
-    39f8:	683b      	ldr	r3, [r7, #0]
-    39fa:	889b      	ldrh	r3, [r3, #4]
-    39fc:	021b      	lsls	r3, r3, #8
-    39fe:	b29a      	uxth	r2, r3
-    3a00:	89fb      	ldrh	r3, [r7, #14]
-    3a02:	4313      	orrs	r3, r2
-    3a04:	81fb      	strh	r3, [r7, #14]
-    /* Reset the Output Compare and Output Compare N IDLE State */
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3));
-    3a06:	89bb      	ldrh	r3, [r7, #12]
-    3a08:	f423 5380 	bic.w	r3, r3, #4096	; 0x1000
-    3a0c:	81bb      	strh	r3, [r7, #12]
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS3N));
-    3a0e:	89bb      	ldrh	r3, [r7, #12]
-    3a10:	f423 5300 	bic.w	r3, r3, #8192	; 0x2000
-    3a14:	81bb      	strh	r3, [r7, #12]
-    /* Set the Output Idle state */
-    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 4);
-    3a16:	683b      	ldr	r3, [r7, #0]
-    3a18:	899b      	ldrh	r3, [r3, #12]
-    3a1a:	011b      	lsls	r3, r3, #4
-    3a1c:	b29a      	uxth	r2, r3
-    3a1e:	89bb      	ldrh	r3, [r7, #12]
-    3a20:	4313      	orrs	r3, r2
-    3a22:	81bb      	strh	r3, [r7, #12]
-    /* Set the Output N Idle state */
-    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCNIdleState << 4);
-    3a24:	683b      	ldr	r3, [r7, #0]
-    3a26:	89db      	ldrh	r3, [r3, #14]
-    3a28:	011b      	lsls	r3, r3, #4
-    3a2a:	b29a      	uxth	r2, r3
-    3a2c:	89bb      	ldrh	r3, [r7, #12]
-    3a2e:	4313      	orrs	r3, r2
-    3a30:	81bb      	strh	r3, [r7, #12]
-  }
-  /* Write to TIMx CR2 */
-  TIMx->CR2 = tmpcr2;
-    3a32:	687b      	ldr	r3, [r7, #4]
-    3a34:	89ba      	ldrh	r2, [r7, #12]
-    3a36:	809a      	strh	r2, [r3, #4]
-  
-  /* Write to TIMx CCMR2 */
-  TIMx->CCMR2 = tmpccmrx;
-    3a38:	687b      	ldr	r3, [r7, #4]
-    3a3a:	897a      	ldrh	r2, [r7, #10]
-    3a3c:	839a      	strh	r2, [r3, #28]
-
-  /* Set the Capture Compare Register value */
-  TIMx->CCR3 = TIM_OCInitStruct->TIM_Pulse;
-    3a3e:	683b      	ldr	r3, [r7, #0]
-    3a40:	88da      	ldrh	r2, [r3, #6]
-    3a42:	687b      	ldr	r3, [r7, #4]
-    3a44:	879a      	strh	r2, [r3, #60]	; 0x3c
-  
-  /* Write to TIMx CCER */
-  TIMx->CCER = tmpccer;
-    3a46:	687b      	ldr	r3, [r7, #4]
-    3a48:	89fa      	ldrh	r2, [r7, #14]
-    3a4a:	841a      	strh	r2, [r3, #32]
-}
-    3a4c:	bf00      	nop
-    3a4e:	3714      	adds	r7, #20
-    3a50:	46bd      	mov	sp, r7
-    3a52:	bc80      	pop	{r7}
-    3a54:	4770      	bx	lr
-    3a56:	bf00      	nop
-    3a58:	40012c00 	.word	0x40012c00
-    3a5c:	40013400 	.word	0x40013400
-
-00003a60 <TIM_OC4Init>:
-  * @param  TIM_OCInitStruct: pointer to a TIM_OCInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct)
-{
-    3a60:	b480      	push	{r7}
-    3a62:	b085      	sub	sp, #20
-    3a64:	af00      	add	r7, sp, #0
-    3a66:	6078      	str	r0, [r7, #4]
-    3a68:	6039      	str	r1, [r7, #0]
-  uint16_t tmpccmrx = 0, tmpccer = 0, tmpcr2 = 0;
-    3a6a:	2300      	movs	r3, #0
-    3a6c:	81bb      	strh	r3, [r7, #12]
-    3a6e:	2300      	movs	r3, #0
-    3a70:	817b      	strh	r3, [r7, #10]
-    3a72:	2300      	movs	r3, #0
-    3a74:	81fb      	strh	r3, [r7, #14]
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx)); 
-  assert_param(IS_TIM_OC_MODE(TIM_OCInitStruct->TIM_OCMode));
-  assert_param(IS_TIM_OUTPUT_STATE(TIM_OCInitStruct->TIM_OutputState));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCInitStruct->TIM_OCPolarity));   
-  /* Disable the Channel 2: Reset the CC4E Bit */
-  TIMx->CCER &= (uint16_t)(~((uint16_t)TIM_CCER_CC4E));
-    3a76:	687b      	ldr	r3, [r7, #4]
-    3a78:	8c1b      	ldrh	r3, [r3, #32]
-    3a7a:	b29b      	uxth	r3, r3
-    3a7c:	f423 5380 	bic.w	r3, r3, #4096	; 0x1000
-    3a80:	b29a      	uxth	r2, r3
-    3a82:	687b      	ldr	r3, [r7, #4]
-    3a84:	841a      	strh	r2, [r3, #32]
-  
-  /* Get the TIMx CCER register value */
-  tmpccer = TIMx->CCER;
-    3a86:	687b      	ldr	r3, [r7, #4]
-    3a88:	8c1b      	ldrh	r3, [r3, #32]
-    3a8a:	817b      	strh	r3, [r7, #10]
-  /* Get the TIMx CR2 register value */
-  tmpcr2 =  TIMx->CR2;
-    3a8c:	687b      	ldr	r3, [r7, #4]
-    3a8e:	889b      	ldrh	r3, [r3, #4]
-    3a90:	81fb      	strh	r3, [r7, #14]
-  
-  /* Get the TIMx CCMR2 register value */
-  tmpccmrx = TIMx->CCMR2;
-    3a92:	687b      	ldr	r3, [r7, #4]
-    3a94:	8b9b      	ldrh	r3, [r3, #28]
-    3a96:	81bb      	strh	r3, [r7, #12]
-    
-  /* Reset the Output Compare mode and Capture/Compare selection Bits */
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_OC4M));
-    3a98:	89bb      	ldrh	r3, [r7, #12]
-    3a9a:	f423 43e0 	bic.w	r3, r3, #28672	; 0x7000
-    3a9e:	81bb      	strh	r3, [r7, #12]
-  tmpccmrx &= (uint16_t)(~((uint16_t)TIM_CCMR2_CC4S));
-    3aa0:	89bb      	ldrh	r3, [r7, #12]
-    3aa2:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    3aa6:	81bb      	strh	r3, [r7, #12]
-  
-  /* Select the Output Compare Mode */
-  tmpccmrx |= (uint16_t)(TIM_OCInitStruct->TIM_OCMode << 8);
-    3aa8:	683b      	ldr	r3, [r7, #0]
-    3aaa:	881b      	ldrh	r3, [r3, #0]
-    3aac:	021b      	lsls	r3, r3, #8
-    3aae:	b29a      	uxth	r2, r3
-    3ab0:	89bb      	ldrh	r3, [r7, #12]
-    3ab2:	4313      	orrs	r3, r2
-    3ab4:	81bb      	strh	r3, [r7, #12]
-  
-  /* Reset the Output Polarity level */
-  tmpccer &= (uint16_t)(~((uint16_t)TIM_CCER_CC4P));
-    3ab6:	897b      	ldrh	r3, [r7, #10]
-    3ab8:	f423 5300 	bic.w	r3, r3, #8192	; 0x2000
-    3abc:	817b      	strh	r3, [r7, #10]
-  /* Set the Output Compare Polarity */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OCPolarity << 12);
-    3abe:	683b      	ldr	r3, [r7, #0]
-    3ac0:	891b      	ldrh	r3, [r3, #8]
-    3ac2:	031b      	lsls	r3, r3, #12
-    3ac4:	b29a      	uxth	r2, r3
-    3ac6:	897b      	ldrh	r3, [r7, #10]
-    3ac8:	4313      	orrs	r3, r2
-    3aca:	817b      	strh	r3, [r7, #10]
-  
-  /* Set the Output State */
-  tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputState << 12);
-    3acc:	683b      	ldr	r3, [r7, #0]
-    3ace:	885b      	ldrh	r3, [r3, #2]
-    3ad0:	031b      	lsls	r3, r3, #12
-    3ad2:	b29a      	uxth	r2, r3
-    3ad4:	897b      	ldrh	r3, [r7, #10]
-    3ad6:	4313      	orrs	r3, r2
-    3ad8:	817b      	strh	r3, [r7, #10]
-    
-  if((TIMx == TIM1) || (TIMx == TIM8))
-    3ada:	687b      	ldr	r3, [r7, #4]
-    3adc:	4a12      	ldr	r2, [pc, #72]	; (3b28 <TIM_OC4Init+0xc8>)
-    3ade:	4293      	cmp	r3, r2
-    3ae0:	d003      	beq.n	3aea <TIM_OC4Init+0x8a>
-    3ae2:	687b      	ldr	r3, [r7, #4]
-    3ae4:	4a11      	ldr	r2, [pc, #68]	; (3b2c <TIM_OC4Init+0xcc>)
-    3ae6:	4293      	cmp	r3, r2
-    3ae8:	d10a      	bne.n	3b00 <TIM_OC4Init+0xa0>
-  {
-    assert_param(IS_TIM_OCIDLE_STATE(TIM_OCInitStruct->TIM_OCIdleState));
-    /* Reset the Output Compare IDLE State */
-    tmpcr2 &= (uint16_t)(~((uint16_t)TIM_CR2_OIS4));
-    3aea:	89fb      	ldrh	r3, [r7, #14]
-    3aec:	f423 4380 	bic.w	r3, r3, #16384	; 0x4000
-    3af0:	81fb      	strh	r3, [r7, #14]
-    /* Set the Output Idle state */
-    tmpcr2 |= (uint16_t)(TIM_OCInitStruct->TIM_OCIdleState << 6);
-    3af2:	683b      	ldr	r3, [r7, #0]
-    3af4:	899b      	ldrh	r3, [r3, #12]
-    3af6:	019b      	lsls	r3, r3, #6
-    3af8:	b29a      	uxth	r2, r3
-    3afa:	89fb      	ldrh	r3, [r7, #14]
-    3afc:	4313      	orrs	r3, r2
-    3afe:	81fb      	strh	r3, [r7, #14]
-  }
-  /* Write to TIMx CR2 */
-  TIMx->CR2 = tmpcr2;
-    3b00:	687b      	ldr	r3, [r7, #4]
-    3b02:	89fa      	ldrh	r2, [r7, #14]
-    3b04:	809a      	strh	r2, [r3, #4]
-  
-  /* Write to TIMx CCMR2 */  
-  TIMx->CCMR2 = tmpccmrx;
-    3b06:	687b      	ldr	r3, [r7, #4]
-    3b08:	89ba      	ldrh	r2, [r7, #12]
-    3b0a:	839a      	strh	r2, [r3, #28]
-
-  /* Set the Capture Compare Register value */
-  TIMx->CCR4 = TIM_OCInitStruct->TIM_Pulse;
-    3b0c:	683b      	ldr	r3, [r7, #0]
-    3b0e:	88da      	ldrh	r2, [r3, #6]
-    3b10:	687b      	ldr	r3, [r7, #4]
-    3b12:	f8a3 2040 	strh.w	r2, [r3, #64]	; 0x40
-  
-  /* Write to TIMx CCER */
-  TIMx->CCER = tmpccer;
-    3b16:	687b      	ldr	r3, [r7, #4]
-    3b18:	897a      	ldrh	r2, [r7, #10]
-    3b1a:	841a      	strh	r2, [r3, #32]
-}
-    3b1c:	bf00      	nop
-    3b1e:	3714      	adds	r7, #20
-    3b20:	46bd      	mov	sp, r7
-    3b22:	bc80      	pop	{r7}
-    3b24:	4770      	bx	lr
-    3b26:	bf00      	nop
-    3b28:	40012c00 	.word	0x40012c00
-    3b2c:	40013400 	.word	0x40013400
-
-00003b30 <TIM_ICInit>:
-  * @param  TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_ICInit(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
-{
-    3b30:	b580      	push	{r7, lr}
-    3b32:	b082      	sub	sp, #8
-    3b34:	af00      	add	r7, sp, #0
-    3b36:	6078      	str	r0, [r7, #4]
-    3b38:	6039      	str	r1, [r7, #0]
-  }
-  else
-  {
-    assert_param(IS_TIM_IC_POLARITY_LITE(TIM_ICInitStruct->TIM_ICPolarity));
-  }
-  if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
-    3b3a:	683b      	ldr	r3, [r7, #0]
-    3b3c:	881b      	ldrh	r3, [r3, #0]
-    3b3e:	2b00      	cmp	r3, #0
-    3b40:	d10f      	bne.n	3b62 <TIM_ICInit+0x32>
-  {
-    assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-    /* TI1 Configuration */
-    TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
-    3b42:	683b      	ldr	r3, [r7, #0]
-    3b44:	8859      	ldrh	r1, [r3, #2]
-    3b46:	683b      	ldr	r3, [r7, #0]
-    3b48:	889a      	ldrh	r2, [r3, #4]
-    3b4a:	683b      	ldr	r3, [r7, #0]
-    3b4c:	891b      	ldrh	r3, [r3, #8]
-    3b4e:	6878      	ldr	r0, [r7, #4]
-    3b50:	f001 f947 	bl	4de2 <TI1_Config>
-               TIM_ICInitStruct->TIM_ICSelection,
-               TIM_ICInitStruct->TIM_ICFilter);
-    /* Set the Input Capture Prescaler value */
-    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3b54:	683b      	ldr	r3, [r7, #0]
-    3b56:	88db      	ldrh	r3, [r3, #6]
-    3b58:	4619      	mov	r1, r3
-    3b5a:	6878      	ldr	r0, [r7, #4]
-    3b5c:	f001 f809 	bl	4b72 <TIM_SetIC1Prescaler>
-               TIM_ICInitStruct->TIM_ICSelection,
-               TIM_ICInitStruct->TIM_ICFilter);
-    /* Set the Input Capture Prescaler value */
-    TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-  }
-}
-    3b60:	e036      	b.n	3bd0 <TIM_ICInit+0xa0>
-  else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_2)
-    3b62:	683b      	ldr	r3, [r7, #0]
-    3b64:	881b      	ldrh	r3, [r3, #0]
-    3b66:	2b04      	cmp	r3, #4
-    3b68:	d10f      	bne.n	3b8a <TIM_ICInit+0x5a>
-    TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
-    3b6a:	683b      	ldr	r3, [r7, #0]
-    3b6c:	8859      	ldrh	r1, [r3, #2]
-    3b6e:	683b      	ldr	r3, [r7, #0]
-    3b70:	889a      	ldrh	r2, [r3, #4]
-    3b72:	683b      	ldr	r3, [r7, #0]
-    3b74:	891b      	ldrh	r3, [r3, #8]
-    3b76:	6878      	ldr	r0, [r7, #4]
-    3b78:	f001 f9a4 	bl	4ec4 <TI2_Config>
-    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3b7c:	683b      	ldr	r3, [r7, #0]
-    3b7e:	88db      	ldrh	r3, [r3, #6]
-    3b80:	4619      	mov	r1, r3
-    3b82:	6878      	ldr	r0, [r7, #4]
-    3b84:	f001 f810 	bl	4ba8 <TIM_SetIC2Prescaler>
-}
-    3b88:	e022      	b.n	3bd0 <TIM_ICInit+0xa0>
-  else if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_3)
-    3b8a:	683b      	ldr	r3, [r7, #0]
-    3b8c:	881b      	ldrh	r3, [r3, #0]
-    3b8e:	2b08      	cmp	r3, #8
-    3b90:	d10f      	bne.n	3bb2 <TIM_ICInit+0x82>
-    TI3_Config(TIMx,  TIM_ICInitStruct->TIM_ICPolarity,
-    3b92:	683b      	ldr	r3, [r7, #0]
-    3b94:	8859      	ldrh	r1, [r3, #2]
-    3b96:	683b      	ldr	r3, [r7, #0]
-    3b98:	889a      	ldrh	r2, [r3, #4]
-    3b9a:	683b      	ldr	r3, [r7, #0]
-    3b9c:	891b      	ldrh	r3, [r3, #8]
-    3b9e:	6878      	ldr	r0, [r7, #4]
-    3ba0:	f001 fa0a 	bl	4fb8 <TI3_Config>
-    TIM_SetIC3Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3ba4:	683b      	ldr	r3, [r7, #0]
-    3ba6:	88db      	ldrh	r3, [r3, #6]
-    3ba8:	4619      	mov	r1, r3
-    3baa:	6878      	ldr	r0, [r7, #4]
-    3bac:	f001 f819 	bl	4be2 <TIM_SetIC3Prescaler>
-}
-    3bb0:	e00e      	b.n	3bd0 <TIM_ICInit+0xa0>
-    TI4_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity,
-    3bb2:	683b      	ldr	r3, [r7, #0]
-    3bb4:	8859      	ldrh	r1, [r3, #2]
-    3bb6:	683b      	ldr	r3, [r7, #0]
-    3bb8:	889a      	ldrh	r2, [r3, #4]
-    3bba:	683b      	ldr	r3, [r7, #0]
-    3bbc:	891b      	ldrh	r3, [r3, #8]
-    3bbe:	6878      	ldr	r0, [r7, #4]
-    3bc0:	f001 fa70 	bl	50a4 <TI4_Config>
-    TIM_SetIC4Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3bc4:	683b      	ldr	r3, [r7, #0]
-    3bc6:	88db      	ldrh	r3, [r3, #6]
-    3bc8:	4619      	mov	r1, r3
-    3bca:	6878      	ldr	r0, [r7, #4]
-    3bcc:	f001 f824 	bl	4c18 <TIM_SetIC4Prescaler>
-}
-    3bd0:	bf00      	nop
-    3bd2:	3708      	adds	r7, #8
-    3bd4:	46bd      	mov	sp, r7
-    3bd6:	bd80      	pop	{r7, pc}
-
-00003bd8 <TIM_PWMIConfig>:
-  * @param  TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure
-  *         that contains the configuration information for the specified TIM peripheral.
-  * @retval None
-  */
-void TIM_PWMIConfig(TIM_TypeDef* TIMx, TIM_ICInitTypeDef* TIM_ICInitStruct)
-{
-    3bd8:	b580      	push	{r7, lr}
-    3bda:	b084      	sub	sp, #16
-    3bdc:	af00      	add	r7, sp, #0
-    3bde:	6078      	str	r0, [r7, #4]
-    3be0:	6039      	str	r1, [r7, #0]
-  uint16_t icoppositepolarity = TIM_ICPolarity_Rising;
-    3be2:	2300      	movs	r3, #0
-    3be4:	81fb      	strh	r3, [r7, #14]
-  uint16_t icoppositeselection = TIM_ICSelection_DirectTI;
-    3be6:	2301      	movs	r3, #1
-    3be8:	81bb      	strh	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  /* Select the Opposite Input Polarity */
-  if (TIM_ICInitStruct->TIM_ICPolarity == TIM_ICPolarity_Rising)
-    3bea:	683b      	ldr	r3, [r7, #0]
-    3bec:	885b      	ldrh	r3, [r3, #2]
-    3bee:	2b00      	cmp	r3, #0
-    3bf0:	d102      	bne.n	3bf8 <TIM_PWMIConfig+0x20>
-  {
-    icoppositepolarity = TIM_ICPolarity_Falling;
-    3bf2:	2302      	movs	r3, #2
-    3bf4:	81fb      	strh	r3, [r7, #14]
-    3bf6:	e001      	b.n	3bfc <TIM_PWMIConfig+0x24>
-  }
-  else
-  {
-    icoppositepolarity = TIM_ICPolarity_Rising;
-    3bf8:	2300      	movs	r3, #0
-    3bfa:	81fb      	strh	r3, [r7, #14]
-  }
-  /* Select the Opposite Input */
-  if (TIM_ICInitStruct->TIM_ICSelection == TIM_ICSelection_DirectTI)
-    3bfc:	683b      	ldr	r3, [r7, #0]
-    3bfe:	889b      	ldrh	r3, [r3, #4]
-    3c00:	2b01      	cmp	r3, #1
-    3c02:	d102      	bne.n	3c0a <TIM_PWMIConfig+0x32>
-  {
-    icoppositeselection = TIM_ICSelection_IndirectTI;
-    3c04:	2302      	movs	r3, #2
-    3c06:	81bb      	strh	r3, [r7, #12]
-    3c08:	e001      	b.n	3c0e <TIM_PWMIConfig+0x36>
-  }
-  else
-  {
-    icoppositeselection = TIM_ICSelection_DirectTI;
-    3c0a:	2301      	movs	r3, #1
-    3c0c:	81bb      	strh	r3, [r7, #12]
-  }
-  if (TIM_ICInitStruct->TIM_Channel == TIM_Channel_1)
-    3c0e:	683b      	ldr	r3, [r7, #0]
-    3c10:	881b      	ldrh	r3, [r3, #0]
-    3c12:	2b00      	cmp	r3, #0
-    3c14:	d11c      	bne.n	3c50 <TIM_PWMIConfig+0x78>
-  {
-    /* TI1 Configuration */
-    TI1_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
-    3c16:	683b      	ldr	r3, [r7, #0]
-    3c18:	8859      	ldrh	r1, [r3, #2]
-    3c1a:	683b      	ldr	r3, [r7, #0]
-    3c1c:	889a      	ldrh	r2, [r3, #4]
-    3c1e:	683b      	ldr	r3, [r7, #0]
-    3c20:	891b      	ldrh	r3, [r3, #8]
-    3c22:	6878      	ldr	r0, [r7, #4]
-    3c24:	f001 f8dd 	bl	4de2 <TI1_Config>
-               TIM_ICInitStruct->TIM_ICFilter);
-    /* Set the Input Capture Prescaler value */
-    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3c28:	683b      	ldr	r3, [r7, #0]
-    3c2a:	88db      	ldrh	r3, [r3, #6]
-    3c2c:	4619      	mov	r1, r3
-    3c2e:	6878      	ldr	r0, [r7, #4]
-    3c30:	f000 ff9f 	bl	4b72 <TIM_SetIC1Prescaler>
-    /* TI2 Configuration */
-    TI2_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
-    3c34:	683b      	ldr	r3, [r7, #0]
-    3c36:	891b      	ldrh	r3, [r3, #8]
-    3c38:	89ba      	ldrh	r2, [r7, #12]
-    3c3a:	89f9      	ldrh	r1, [r7, #14]
-    3c3c:	6878      	ldr	r0, [r7, #4]
-    3c3e:	f001 f941 	bl	4ec4 <TI2_Config>
-    /* Set the Input Capture Prescaler value */
-    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3c42:	683b      	ldr	r3, [r7, #0]
-    3c44:	88db      	ldrh	r3, [r3, #6]
-    3c46:	4619      	mov	r1, r3
-    3c48:	6878      	ldr	r0, [r7, #4]
-    3c4a:	f000 ffad 	bl	4ba8 <TIM_SetIC2Prescaler>
-    /* TI1 Configuration */
-    TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
-    /* Set the Input Capture Prescaler value */
-    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-  }
-}
-    3c4e:	e01b      	b.n	3c88 <TIM_PWMIConfig+0xb0>
-    TI2_Config(TIMx, TIM_ICInitStruct->TIM_ICPolarity, TIM_ICInitStruct->TIM_ICSelection,
-    3c50:	683b      	ldr	r3, [r7, #0]
-    3c52:	8859      	ldrh	r1, [r3, #2]
-    3c54:	683b      	ldr	r3, [r7, #0]
-    3c56:	889a      	ldrh	r2, [r3, #4]
-    3c58:	683b      	ldr	r3, [r7, #0]
-    3c5a:	891b      	ldrh	r3, [r3, #8]
-    3c5c:	6878      	ldr	r0, [r7, #4]
-    3c5e:	f001 f931 	bl	4ec4 <TI2_Config>
-    TIM_SetIC2Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3c62:	683b      	ldr	r3, [r7, #0]
-    3c64:	88db      	ldrh	r3, [r3, #6]
-    3c66:	4619      	mov	r1, r3
-    3c68:	6878      	ldr	r0, [r7, #4]
-    3c6a:	f000 ff9d 	bl	4ba8 <TIM_SetIC2Prescaler>
-    TI1_Config(TIMx, icoppositepolarity, icoppositeselection, TIM_ICInitStruct->TIM_ICFilter);
-    3c6e:	683b      	ldr	r3, [r7, #0]
-    3c70:	891b      	ldrh	r3, [r3, #8]
-    3c72:	89ba      	ldrh	r2, [r7, #12]
-    3c74:	89f9      	ldrh	r1, [r7, #14]
-    3c76:	6878      	ldr	r0, [r7, #4]
-    3c78:	f001 f8b3 	bl	4de2 <TI1_Config>
-    TIM_SetIC1Prescaler(TIMx, TIM_ICInitStruct->TIM_ICPrescaler);
-    3c7c:	683b      	ldr	r3, [r7, #0]
-    3c7e:	88db      	ldrh	r3, [r3, #6]
-    3c80:	4619      	mov	r1, r3
-    3c82:	6878      	ldr	r0, [r7, #4]
-    3c84:	f000 ff75 	bl	4b72 <TIM_SetIC1Prescaler>
-}
-    3c88:	bf00      	nop
-    3c8a:	3710      	adds	r7, #16
-    3c8c:	46bd      	mov	sp, r7
-    3c8e:	bd80      	pop	{r7, pc}
-
-00003c90 <TIM_BDTRConfig>:
-  * @param  TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure that
-  *         contains the BDTR Register configuration  information for the TIM peripheral.
-  * @retval None
-  */
-void TIM_BDTRConfig(TIM_TypeDef* TIMx, TIM_BDTRInitTypeDef *TIM_BDTRInitStruct)
-{
-    3c90:	b480      	push	{r7}
-    3c92:	b083      	sub	sp, #12
-    3c94:	af00      	add	r7, sp, #0
-    3c96:	6078      	str	r0, [r7, #4]
-    3c98:	6039      	str	r1, [r7, #0]
-  assert_param(IS_TIM_BREAK_STATE(TIM_BDTRInitStruct->TIM_Break));
-  assert_param(IS_TIM_BREAK_POLARITY(TIM_BDTRInitStruct->TIM_BreakPolarity));
-  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(TIM_BDTRInitStruct->TIM_AutomaticOutput));
-  /* Set the Lock level, the Break enable Bit and the Ploarity, the OSSR State,
-     the OSSI State, the dead time value and the Automatic Output Enable Bit */
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3c9a:	683b      	ldr	r3, [r7, #0]
-    3c9c:	881a      	ldrh	r2, [r3, #0]
-    3c9e:	683b      	ldr	r3, [r7, #0]
-    3ca0:	885b      	ldrh	r3, [r3, #2]
-    3ca2:	4313      	orrs	r3, r2
-    3ca4:	b29a      	uxth	r2, r3
-             TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime |
-    3ca6:	683b      	ldr	r3, [r7, #0]
-    3ca8:	889b      	ldrh	r3, [r3, #4]
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3caa:	4313      	orrs	r3, r2
-    3cac:	b29a      	uxth	r2, r3
-             TIM_BDTRInitStruct->TIM_LOCKLevel | TIM_BDTRInitStruct->TIM_DeadTime |
-    3cae:	683b      	ldr	r3, [r7, #0]
-    3cb0:	88db      	ldrh	r3, [r3, #6]
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3cb2:	4313      	orrs	r3, r2
-    3cb4:	b29a      	uxth	r2, r3
-             TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity |
-    3cb6:	683b      	ldr	r3, [r7, #0]
-    3cb8:	891b      	ldrh	r3, [r3, #8]
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3cba:	4313      	orrs	r3, r2
-    3cbc:	b29a      	uxth	r2, r3
-             TIM_BDTRInitStruct->TIM_Break | TIM_BDTRInitStruct->TIM_BreakPolarity |
-    3cbe:	683b      	ldr	r3, [r7, #0]
-    3cc0:	895b      	ldrh	r3, [r3, #10]
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3cc2:	4313      	orrs	r3, r2
-    3cc4:	b29a      	uxth	r2, r3
-             TIM_BDTRInitStruct->TIM_AutomaticOutput;
-    3cc6:	683b      	ldr	r3, [r7, #0]
-    3cc8:	899b      	ldrh	r3, [r3, #12]
-  TIMx->BDTR = (uint32_t)TIM_BDTRInitStruct->TIM_OSSRState | TIM_BDTRInitStruct->TIM_OSSIState |
-    3cca:	4313      	orrs	r3, r2
-    3ccc:	b29a      	uxth	r2, r3
-    3cce:	687b      	ldr	r3, [r7, #4]
-    3cd0:	f8a3 2044 	strh.w	r2, [r3, #68]	; 0x44
-}
-    3cd4:	bf00      	nop
-    3cd6:	370c      	adds	r7, #12
-    3cd8:	46bd      	mov	sp, r7
-    3cda:	bc80      	pop	{r7}
-    3cdc:	4770      	bx	lr
-
-00003cde <TIM_TimeBaseStructInit>:
-  * @param  TIM_TimeBaseInitStruct : pointer to a TIM_TimeBaseInitTypeDef
-  *         structure which will be initialized.
-  * @retval None
-  */
-void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
-{
-    3cde:	b480      	push	{r7}
-    3ce0:	b083      	sub	sp, #12
-    3ce2:	af00      	add	r7, sp, #0
-    3ce4:	6078      	str	r0, [r7, #4]
-  /* Set the default configuration */
-  TIM_TimeBaseInitStruct->TIM_Period = 0xFFFF;
-    3ce6:	687b      	ldr	r3, [r7, #4]
-    3ce8:	f64f 72ff 	movw	r2, #65535	; 0xffff
-    3cec:	809a      	strh	r2, [r3, #4]
-  TIM_TimeBaseInitStruct->TIM_Prescaler = 0x0000;
-    3cee:	687b      	ldr	r3, [r7, #4]
-    3cf0:	2200      	movs	r2, #0
-    3cf2:	801a      	strh	r2, [r3, #0]
-  TIM_TimeBaseInitStruct->TIM_ClockDivision = TIM_CKD_DIV1;
-    3cf4:	687b      	ldr	r3, [r7, #4]
-    3cf6:	2200      	movs	r2, #0
-    3cf8:	80da      	strh	r2, [r3, #6]
-  TIM_TimeBaseInitStruct->TIM_CounterMode = TIM_CounterMode_Up;
-    3cfa:	687b      	ldr	r3, [r7, #4]
-    3cfc:	2200      	movs	r2, #0
-    3cfe:	805a      	strh	r2, [r3, #2]
-  TIM_TimeBaseInitStruct->TIM_RepetitionCounter = 0x0000;
-    3d00:	687b      	ldr	r3, [r7, #4]
-    3d02:	2200      	movs	r2, #0
-    3d04:	721a      	strb	r2, [r3, #8]
-}
-    3d06:	bf00      	nop
-    3d08:	370c      	adds	r7, #12
-    3d0a:	46bd      	mov	sp, r7
-    3d0c:	bc80      	pop	{r7}
-    3d0e:	4770      	bx	lr
-
-00003d10 <TIM_OCStructInit>:
-  * @param  TIM_OCInitStruct : pointer to a TIM_OCInitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
-{
-    3d10:	b480      	push	{r7}
-    3d12:	b083      	sub	sp, #12
-    3d14:	af00      	add	r7, sp, #0
-    3d16:	6078      	str	r0, [r7, #4]
-  /* Set the default configuration */
-  TIM_OCInitStruct->TIM_OCMode = TIM_OCMode_Timing;
-    3d18:	687b      	ldr	r3, [r7, #4]
-    3d1a:	2200      	movs	r2, #0
-    3d1c:	801a      	strh	r2, [r3, #0]
-  TIM_OCInitStruct->TIM_OutputState = TIM_OutputState_Disable;
-    3d1e:	687b      	ldr	r3, [r7, #4]
-    3d20:	2200      	movs	r2, #0
-    3d22:	805a      	strh	r2, [r3, #2]
-  TIM_OCInitStruct->TIM_OutputNState = TIM_OutputNState_Disable;
-    3d24:	687b      	ldr	r3, [r7, #4]
-    3d26:	2200      	movs	r2, #0
-    3d28:	809a      	strh	r2, [r3, #4]
-  TIM_OCInitStruct->TIM_Pulse = 0x0000;
-    3d2a:	687b      	ldr	r3, [r7, #4]
-    3d2c:	2200      	movs	r2, #0
-    3d2e:	80da      	strh	r2, [r3, #6]
-  TIM_OCInitStruct->TIM_OCPolarity = TIM_OCPolarity_High;
-    3d30:	687b      	ldr	r3, [r7, #4]
-    3d32:	2200      	movs	r2, #0
-    3d34:	811a      	strh	r2, [r3, #8]
-  TIM_OCInitStruct->TIM_OCNPolarity = TIM_OCPolarity_High;
-    3d36:	687b      	ldr	r3, [r7, #4]
-    3d38:	2200      	movs	r2, #0
-    3d3a:	815a      	strh	r2, [r3, #10]
-  TIM_OCInitStruct->TIM_OCIdleState = TIM_OCIdleState_Reset;
-    3d3c:	687b      	ldr	r3, [r7, #4]
-    3d3e:	2200      	movs	r2, #0
-    3d40:	819a      	strh	r2, [r3, #12]
-  TIM_OCInitStruct->TIM_OCNIdleState = TIM_OCNIdleState_Reset;
-    3d42:	687b      	ldr	r3, [r7, #4]
-    3d44:	2200      	movs	r2, #0
-    3d46:	81da      	strh	r2, [r3, #14]
-}
-    3d48:	bf00      	nop
-    3d4a:	370c      	adds	r7, #12
-    3d4c:	46bd      	mov	sp, r7
-    3d4e:	bc80      	pop	{r7}
-    3d50:	4770      	bx	lr
-
-00003d52 <TIM_ICStructInit>:
-  * @param  TIM_ICInitStruct: pointer to a TIM_ICInitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void TIM_ICStructInit(TIM_ICInitTypeDef* TIM_ICInitStruct)
-{
-    3d52:	b480      	push	{r7}
-    3d54:	b083      	sub	sp, #12
-    3d56:	af00      	add	r7, sp, #0
-    3d58:	6078      	str	r0, [r7, #4]
-  /* Set the default configuration */
-  TIM_ICInitStruct->TIM_Channel = TIM_Channel_1;
-    3d5a:	687b      	ldr	r3, [r7, #4]
-    3d5c:	2200      	movs	r2, #0
-    3d5e:	801a      	strh	r2, [r3, #0]
-  TIM_ICInitStruct->TIM_ICPolarity = TIM_ICPolarity_Rising;
-    3d60:	687b      	ldr	r3, [r7, #4]
-    3d62:	2200      	movs	r2, #0
-    3d64:	805a      	strh	r2, [r3, #2]
-  TIM_ICInitStruct->TIM_ICSelection = TIM_ICSelection_DirectTI;
-    3d66:	687b      	ldr	r3, [r7, #4]
-    3d68:	2201      	movs	r2, #1
-    3d6a:	809a      	strh	r2, [r3, #4]
-  TIM_ICInitStruct->TIM_ICPrescaler = TIM_ICPSC_DIV1;
-    3d6c:	687b      	ldr	r3, [r7, #4]
-    3d6e:	2200      	movs	r2, #0
-    3d70:	80da      	strh	r2, [r3, #6]
-  TIM_ICInitStruct->TIM_ICFilter = 0x00;
-    3d72:	687b      	ldr	r3, [r7, #4]
-    3d74:	2200      	movs	r2, #0
-    3d76:	811a      	strh	r2, [r3, #8]
-}
-    3d78:	bf00      	nop
-    3d7a:	370c      	adds	r7, #12
-    3d7c:	46bd      	mov	sp, r7
-    3d7e:	bc80      	pop	{r7}
-    3d80:	4770      	bx	lr
-
-00003d82 <TIM_BDTRStructInit>:
-  * @param  TIM_BDTRInitStruct: pointer to a TIM_BDTRInitTypeDef structure which
-  *         will be initialized.
-  * @retval None
-  */
-void TIM_BDTRStructInit(TIM_BDTRInitTypeDef* TIM_BDTRInitStruct)
-{
-    3d82:	b480      	push	{r7}
-    3d84:	b083      	sub	sp, #12
-    3d86:	af00      	add	r7, sp, #0
-    3d88:	6078      	str	r0, [r7, #4]
-  /* Set the default configuration */
-  TIM_BDTRInitStruct->TIM_OSSRState = TIM_OSSRState_Disable;
-    3d8a:	687b      	ldr	r3, [r7, #4]
-    3d8c:	2200      	movs	r2, #0
-    3d8e:	801a      	strh	r2, [r3, #0]
-  TIM_BDTRInitStruct->TIM_OSSIState = TIM_OSSIState_Disable;
-    3d90:	687b      	ldr	r3, [r7, #4]
-    3d92:	2200      	movs	r2, #0
-    3d94:	805a      	strh	r2, [r3, #2]
-  TIM_BDTRInitStruct->TIM_LOCKLevel = TIM_LOCKLevel_OFF;
-    3d96:	687b      	ldr	r3, [r7, #4]
-    3d98:	2200      	movs	r2, #0
-    3d9a:	809a      	strh	r2, [r3, #4]
-  TIM_BDTRInitStruct->TIM_DeadTime = 0x00;
-    3d9c:	687b      	ldr	r3, [r7, #4]
-    3d9e:	2200      	movs	r2, #0
-    3da0:	80da      	strh	r2, [r3, #6]
-  TIM_BDTRInitStruct->TIM_Break = TIM_Break_Disable;
-    3da2:	687b      	ldr	r3, [r7, #4]
-    3da4:	2200      	movs	r2, #0
-    3da6:	811a      	strh	r2, [r3, #8]
-  TIM_BDTRInitStruct->TIM_BreakPolarity = TIM_BreakPolarity_Low;
-    3da8:	687b      	ldr	r3, [r7, #4]
-    3daa:	2200      	movs	r2, #0
-    3dac:	815a      	strh	r2, [r3, #10]
-  TIM_BDTRInitStruct->TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
-    3dae:	687b      	ldr	r3, [r7, #4]
-    3db0:	2200      	movs	r2, #0
-    3db2:	819a      	strh	r2, [r3, #12]
-}
-    3db4:	bf00      	nop
-    3db6:	370c      	adds	r7, #12
-    3db8:	46bd      	mov	sp, r7
-    3dba:	bc80      	pop	{r7}
-    3dbc:	4770      	bx	lr
-
-00003dbe <TIM_Cmd>:
-  * @param  NewState: new state of the TIMx peripheral.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    3dbe:	b480      	push	{r7}
-    3dc0:	b083      	sub	sp, #12
-    3dc2:	af00      	add	r7, sp, #0
-    3dc4:	6078      	str	r0, [r7, #4]
-    3dc6:	460b      	mov	r3, r1
-    3dc8:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    3dca:	78fb      	ldrb	r3, [r7, #3]
-    3dcc:	2b00      	cmp	r3, #0
-    3dce:	d008      	beq.n	3de2 <TIM_Cmd+0x24>
-  {
-    /* Enable the TIM Counter */
-    TIMx->CR1 |= TIM_CR1_CEN;
-    3dd0:	687b      	ldr	r3, [r7, #4]
-    3dd2:	881b      	ldrh	r3, [r3, #0]
-    3dd4:	b29b      	uxth	r3, r3
-    3dd6:	f043 0301 	orr.w	r3, r3, #1
-    3dda:	b29a      	uxth	r2, r3
-    3ddc:	687b      	ldr	r3, [r7, #4]
-    3dde:	801a      	strh	r2, [r3, #0]
-  else
-  {
-    /* Disable the TIM Counter */
-    TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
-  }
-}
-    3de0:	e007      	b.n	3df2 <TIM_Cmd+0x34>
-    TIMx->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN));
-    3de2:	687b      	ldr	r3, [r7, #4]
-    3de4:	881b      	ldrh	r3, [r3, #0]
-    3de6:	b29b      	uxth	r3, r3
-    3de8:	f023 0301 	bic.w	r3, r3, #1
-    3dec:	b29a      	uxth	r2, r3
-    3dee:	687b      	ldr	r3, [r7, #4]
-    3df0:	801a      	strh	r2, [r3, #0]
-}
-    3df2:	bf00      	nop
-    3df4:	370c      	adds	r7, #12
-    3df6:	46bd      	mov	sp, r7
-    3df8:	bc80      	pop	{r7}
-    3dfa:	4770      	bx	lr
-
-00003dfc <TIM_CtrlPWMOutputs>:
-  * @param  NewState: new state of the TIM peripheral Main Outputs.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    3dfc:	b480      	push	{r7}
-    3dfe:	b083      	sub	sp, #12
-    3e00:	af00      	add	r7, sp, #0
-    3e02:	6078      	str	r0, [r7, #4]
-    3e04:	460b      	mov	r3, r1
-    3e06:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST2_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    3e08:	78fb      	ldrb	r3, [r7, #3]
-    3e0a:	2b00      	cmp	r3, #0
-    3e0c:	d00c      	beq.n	3e28 <TIM_CtrlPWMOutputs+0x2c>
-  {
-    /* Enable the TIM Main Output */
-    TIMx->BDTR |= TIM_BDTR_MOE;
-    3e0e:	687b      	ldr	r3, [r7, #4]
-    3e10:	f8b3 3044 	ldrh.w	r3, [r3, #68]	; 0x44
-    3e14:	b29b      	uxth	r3, r3
-    3e16:	ea6f 4343 	mvn.w	r3, r3, lsl #17
-    3e1a:	ea6f 4353 	mvn.w	r3, r3, lsr #17
-    3e1e:	b29a      	uxth	r2, r3
-    3e20:	687b      	ldr	r3, [r7, #4]
-    3e22:	f8a3 2044 	strh.w	r2, [r3, #68]	; 0x44
-  else
-  {
-    /* Disable the TIM Main Output */
-    TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
-  }  
-}
-    3e26:	e009      	b.n	3e3c <TIM_CtrlPWMOutputs+0x40>
-    TIMx->BDTR &= (uint16_t)(~((uint16_t)TIM_BDTR_MOE));
-    3e28:	687b      	ldr	r3, [r7, #4]
-    3e2a:	f8b3 3044 	ldrh.w	r3, [r3, #68]	; 0x44
-    3e2e:	b29b      	uxth	r3, r3
-    3e30:	f3c3 030e 	ubfx	r3, r3, #0, #15
-    3e34:	b29a      	uxth	r2, r3
-    3e36:	687b      	ldr	r3, [r7, #4]
-    3e38:	f8a3 2044 	strh.w	r2, [r3, #68]	; 0x44
-}
-    3e3c:	bf00      	nop
-    3e3e:	370c      	adds	r7, #12
-    3e40:	46bd      	mov	sp, r7
-    3e42:	bc80      	pop	{r7}
-    3e44:	4770      	bx	lr
-
-00003e46 <TIM_ITConfig>:
-  * @param  NewState: new state of the TIM interrupts.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
-{  
-    3e46:	b480      	push	{r7}
-    3e48:	b083      	sub	sp, #12
-    3e4a:	af00      	add	r7, sp, #0
-    3e4c:	6078      	str	r0, [r7, #4]
-    3e4e:	460b      	mov	r3, r1
-    3e50:	807b      	strh	r3, [r7, #2]
-    3e52:	4613      	mov	r3, r2
-    3e54:	707b      	strb	r3, [r7, #1]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_IT(TIM_IT));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    3e56:	787b      	ldrb	r3, [r7, #1]
-    3e58:	2b00      	cmp	r3, #0
-    3e5a:	d008      	beq.n	3e6e <TIM_ITConfig+0x28>
-  {
-    /* Enable the Interrupt sources */
-    TIMx->DIER |= TIM_IT;
-    3e5c:	687b      	ldr	r3, [r7, #4]
-    3e5e:	899b      	ldrh	r3, [r3, #12]
-    3e60:	b29a      	uxth	r2, r3
-    3e62:	887b      	ldrh	r3, [r7, #2]
-    3e64:	4313      	orrs	r3, r2
-    3e66:	b29a      	uxth	r2, r3
-    3e68:	687b      	ldr	r3, [r7, #4]
-    3e6a:	819a      	strh	r2, [r3, #12]
-  else
-  {
-    /* Disable the Interrupt sources */
-    TIMx->DIER &= (uint16_t)~TIM_IT;
-  }
-}
-    3e6c:	e009      	b.n	3e82 <TIM_ITConfig+0x3c>
-    TIMx->DIER &= (uint16_t)~TIM_IT;
-    3e6e:	687b      	ldr	r3, [r7, #4]
-    3e70:	899b      	ldrh	r3, [r3, #12]
-    3e72:	b29a      	uxth	r2, r3
-    3e74:	887b      	ldrh	r3, [r7, #2]
-    3e76:	43db      	mvns	r3, r3
-    3e78:	b29b      	uxth	r3, r3
-    3e7a:	4013      	ands	r3, r2
-    3e7c:	b29a      	uxth	r2, r3
-    3e7e:	687b      	ldr	r3, [r7, #4]
-    3e80:	819a      	strh	r2, [r3, #12]
-}
-    3e82:	bf00      	nop
-    3e84:	370c      	adds	r7, #12
-    3e86:	46bd      	mov	sp, r7
-    3e88:	bc80      	pop	{r7}
-    3e8a:	4770      	bx	lr
-
-00003e8c <TIM_GenerateEvent>:
-  *   - TIM6 and TIM7 can only generate an update event. 
-  *   - TIM_EventSource_COM and TIM_EventSource_Break are used only with TIM1 and TIM8.      
-  * @retval None
-  */
-void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource)
-{ 
-    3e8c:	b480      	push	{r7}
-    3e8e:	b083      	sub	sp, #12
-    3e90:	af00      	add	r7, sp, #0
-    3e92:	6078      	str	r0, [r7, #4]
-    3e94:	460b      	mov	r3, r1
-    3e96:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_EVENT_SOURCE(TIM_EventSource));
-  
-  /* Set the event sources */
-  TIMx->EGR = TIM_EventSource;
-    3e98:	687b      	ldr	r3, [r7, #4]
-    3e9a:	887a      	ldrh	r2, [r7, #2]
-    3e9c:	829a      	strh	r2, [r3, #20]
-}
-    3e9e:	bf00      	nop
-    3ea0:	370c      	adds	r7, #12
-    3ea2:	46bd      	mov	sp, r7
-    3ea4:	bc80      	pop	{r7}
-    3ea6:	4770      	bx	lr
-
-00003ea8 <TIM_DMAConfig>:
-  *   This parameter can be one value between:
-  *   TIM_DMABurstLength_1Transfer and TIM_DMABurstLength_18Transfers.
-  * @retval None
-  */
-void TIM_DMAConfig(TIM_TypeDef* TIMx, uint16_t TIM_DMABase, uint16_t TIM_DMABurstLength)
-{
-    3ea8:	b480      	push	{r7}
-    3eaa:	b083      	sub	sp, #12
-    3eac:	af00      	add	r7, sp, #0
-    3eae:	6078      	str	r0, [r7, #4]
-    3eb0:	460b      	mov	r3, r1
-    3eb2:	807b      	strh	r3, [r7, #2]
-    3eb4:	4613      	mov	r3, r2
-    3eb6:	803b      	strh	r3, [r7, #0]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST4_PERIPH(TIMx));
-  assert_param(IS_TIM_DMA_BASE(TIM_DMABase));
-  assert_param(IS_TIM_DMA_LENGTH(TIM_DMABurstLength));
-  /* Set the DMA Base and the DMA Burst Length */
-  TIMx->DCR = TIM_DMABase | TIM_DMABurstLength;
-    3eb8:	887a      	ldrh	r2, [r7, #2]
-    3eba:	883b      	ldrh	r3, [r7, #0]
-    3ebc:	4313      	orrs	r3, r2
-    3ebe:	b29a      	uxth	r2, r3
-    3ec0:	687b      	ldr	r3, [r7, #4]
-    3ec2:	f8a3 2048 	strh.w	r2, [r3, #72]	; 0x48
-}
-    3ec6:	bf00      	nop
-    3ec8:	370c      	adds	r7, #12
-    3eca:	46bd      	mov	sp, r7
-    3ecc:	bc80      	pop	{r7}
-    3ece:	4770      	bx	lr
-
-00003ed0 <TIM_DMACmd>:
-  * @param  NewState: new state of the DMA Request sources.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_DMACmd(TIM_TypeDef* TIMx, uint16_t TIM_DMASource, FunctionalState NewState)
-{ 
-    3ed0:	b480      	push	{r7}
-    3ed2:	b083      	sub	sp, #12
-    3ed4:	af00      	add	r7, sp, #0
-    3ed6:	6078      	str	r0, [r7, #4]
-    3ed8:	460b      	mov	r3, r1
-    3eda:	807b      	strh	r3, [r7, #2]
-    3edc:	4613      	mov	r3, r2
-    3ede:	707b      	strb	r3, [r7, #1]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST9_PERIPH(TIMx));
-  assert_param(IS_TIM_DMA_SOURCE(TIM_DMASource));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    3ee0:	787b      	ldrb	r3, [r7, #1]
-    3ee2:	2b00      	cmp	r3, #0
-    3ee4:	d008      	beq.n	3ef8 <TIM_DMACmd+0x28>
-  {
-    /* Enable the DMA sources */
-    TIMx->DIER |= TIM_DMASource; 
-    3ee6:	687b      	ldr	r3, [r7, #4]
-    3ee8:	899b      	ldrh	r3, [r3, #12]
-    3eea:	b29a      	uxth	r2, r3
-    3eec:	887b      	ldrh	r3, [r7, #2]
-    3eee:	4313      	orrs	r3, r2
-    3ef0:	b29a      	uxth	r2, r3
-    3ef2:	687b      	ldr	r3, [r7, #4]
-    3ef4:	819a      	strh	r2, [r3, #12]
-  else
-  {
-    /* Disable the DMA sources */
-    TIMx->DIER &= (uint16_t)~TIM_DMASource;
-  }
-}
-    3ef6:	e009      	b.n	3f0c <TIM_DMACmd+0x3c>
-    TIMx->DIER &= (uint16_t)~TIM_DMASource;
-    3ef8:	687b      	ldr	r3, [r7, #4]
-    3efa:	899b      	ldrh	r3, [r3, #12]
-    3efc:	b29a      	uxth	r2, r3
-    3efe:	887b      	ldrh	r3, [r7, #2]
-    3f00:	43db      	mvns	r3, r3
-    3f02:	b29b      	uxth	r3, r3
-    3f04:	4013      	ands	r3, r2
-    3f06:	b29a      	uxth	r2, r3
-    3f08:	687b      	ldr	r3, [r7, #4]
-    3f0a:	819a      	strh	r2, [r3, #12]
-}
-    3f0c:	bf00      	nop
-    3f0e:	370c      	adds	r7, #12
-    3f10:	46bd      	mov	sp, r7
-    3f12:	bc80      	pop	{r7}
-    3f14:	4770      	bx	lr
-
-00003f16 <TIM_InternalClockConfig>:
-  * @param  TIMx: where x can be  1, 2, 3, 4, 5, 8, 9, 12 or 15
-  *         to select the TIM peripheral.
-  * @retval None
-  */
-void TIM_InternalClockConfig(TIM_TypeDef* TIMx)
-{
-    3f16:	b480      	push	{r7}
-    3f18:	b083      	sub	sp, #12
-    3f1a:	af00      	add	r7, sp, #0
-    3f1c:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  /* Disable slave mode to clock the prescaler directly with the internal clock */
-  TIMx->SMCR &=  (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
-    3f1e:	687b      	ldr	r3, [r7, #4]
-    3f20:	891b      	ldrh	r3, [r3, #8]
-    3f22:	b29b      	uxth	r3, r3
-    3f24:	f023 0307 	bic.w	r3, r3, #7
-    3f28:	b29a      	uxth	r2, r3
-    3f2a:	687b      	ldr	r3, [r7, #4]
-    3f2c:	811a      	strh	r2, [r3, #8]
-}
-    3f2e:	bf00      	nop
-    3f30:	370c      	adds	r7, #12
-    3f32:	46bd      	mov	sp, r7
-    3f34:	bc80      	pop	{r7}
-    3f36:	4770      	bx	lr
-
-00003f38 <TIM_ITRxExternalClockConfig>:
-  * @param  TIM_TS_ITR2: Internal Trigger 2
-  * @param  TIM_TS_ITR3: Internal Trigger 3
-  * @retval None
-  */
-void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
-{
-    3f38:	b580      	push	{r7, lr}
-    3f3a:	b082      	sub	sp, #8
-    3f3c:	af00      	add	r7, sp, #0
-    3f3e:	6078      	str	r0, [r7, #4]
-    3f40:	460b      	mov	r3, r1
-    3f42:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_INTERNAL_TRIGGER_SELECTION(TIM_InputTriggerSource));
-  /* Select the Internal Trigger */
-  TIM_SelectInputTrigger(TIMx, TIM_InputTriggerSource);
-    3f44:	887b      	ldrh	r3, [r7, #2]
-    3f46:	4619      	mov	r1, r3
-    3f48:	6878      	ldr	r0, [r7, #4]
-    3f4a:	f000 f8df 	bl	410c <TIM_SelectInputTrigger>
-  /* Select the External clock mode1 */
-  TIMx->SMCR |= TIM_SlaveMode_External1;
-    3f4e:	687b      	ldr	r3, [r7, #4]
-    3f50:	891b      	ldrh	r3, [r3, #8]
-    3f52:	b29b      	uxth	r3, r3
-    3f54:	f043 0307 	orr.w	r3, r3, #7
-    3f58:	b29a      	uxth	r2, r3
-    3f5a:	687b      	ldr	r3, [r7, #4]
-    3f5c:	811a      	strh	r2, [r3, #8]
-}
-    3f5e:	bf00      	nop
-    3f60:	3708      	adds	r7, #8
-    3f62:	46bd      	mov	sp, r7
-    3f64:	bd80      	pop	{r7, pc}
-
-00003f66 <TIM_TIxExternalClockConfig>:
-  *   This parameter must be a value between 0x0 and 0xF.
-  * @retval None
-  */
-void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
-                                uint16_t TIM_ICPolarity, uint16_t ICFilter)
-{
-    3f66:	b580      	push	{r7, lr}
-    3f68:	b084      	sub	sp, #16
-    3f6a:	af00      	add	r7, sp, #0
-    3f6c:	60f8      	str	r0, [r7, #12]
-    3f6e:	4608      	mov	r0, r1
-    3f70:	4611      	mov	r1, r2
-    3f72:	461a      	mov	r2, r3
-    3f74:	4603      	mov	r3, r0
-    3f76:	817b      	strh	r3, [r7, #10]
-    3f78:	460b      	mov	r3, r1
-    3f7a:	813b      	strh	r3, [r7, #8]
-    3f7c:	4613      	mov	r3, r2
-    3f7e:	80fb      	strh	r3, [r7, #6]
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_TIXCLK_SOURCE(TIM_TIxExternalCLKSource));
-  assert_param(IS_TIM_IC_POLARITY(TIM_ICPolarity));
-  assert_param(IS_TIM_IC_FILTER(ICFilter));
-  /* Configure the Timer Input Clock Source */
-  if (TIM_TIxExternalCLKSource == TIM_TIxExternalCLK1Source_TI2)
-    3f80:	897b      	ldrh	r3, [r7, #10]
-    3f82:	2b60      	cmp	r3, #96	; 0x60
-    3f84:	d106      	bne.n	3f94 <TIM_TIxExternalClockConfig+0x2e>
-  {
-    TI2_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
-    3f86:	88fb      	ldrh	r3, [r7, #6]
-    3f88:	8939      	ldrh	r1, [r7, #8]
-    3f8a:	2201      	movs	r2, #1
-    3f8c:	68f8      	ldr	r0, [r7, #12]
-    3f8e:	f000 ff99 	bl	4ec4 <TI2_Config>
-    3f92:	e005      	b.n	3fa0 <TIM_TIxExternalClockConfig+0x3a>
-  }
-  else
-  {
-    TI1_Config(TIMx, TIM_ICPolarity, TIM_ICSelection_DirectTI, ICFilter);
-    3f94:	88fb      	ldrh	r3, [r7, #6]
-    3f96:	8939      	ldrh	r1, [r7, #8]
-    3f98:	2201      	movs	r2, #1
-    3f9a:	68f8      	ldr	r0, [r7, #12]
-    3f9c:	f000 ff21 	bl	4de2 <TI1_Config>
-  }
-  /* Select the Trigger source */
-  TIM_SelectInputTrigger(TIMx, TIM_TIxExternalCLKSource);
-    3fa0:	897b      	ldrh	r3, [r7, #10]
-    3fa2:	4619      	mov	r1, r3
-    3fa4:	68f8      	ldr	r0, [r7, #12]
-    3fa6:	f000 f8b1 	bl	410c <TIM_SelectInputTrigger>
-  /* Select the External clock mode1 */
-  TIMx->SMCR |= TIM_SlaveMode_External1;
-    3faa:	68fb      	ldr	r3, [r7, #12]
-    3fac:	891b      	ldrh	r3, [r3, #8]
-    3fae:	b29b      	uxth	r3, r3
-    3fb0:	f043 0307 	orr.w	r3, r3, #7
-    3fb4:	b29a      	uxth	r2, r3
-    3fb6:	68fb      	ldr	r3, [r7, #12]
-    3fb8:	811a      	strh	r2, [r3, #8]
-}
-    3fba:	bf00      	nop
-    3fbc:	3710      	adds	r7, #16
-    3fbe:	46bd      	mov	sp, r7
-    3fc0:	bd80      	pop	{r7, pc}
-
-00003fc2 <TIM_ETRClockMode1Config>:
-  *   This parameter must be a value between 0x00 and 0x0F
-  * @retval None
-  */
-void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
-                             uint16_t ExtTRGFilter)
-{
-    3fc2:	b580      	push	{r7, lr}
-    3fc4:	b086      	sub	sp, #24
-    3fc6:	af00      	add	r7, sp, #0
-    3fc8:	60f8      	str	r0, [r7, #12]
-    3fca:	4608      	mov	r0, r1
-    3fcc:	4611      	mov	r1, r2
-    3fce:	461a      	mov	r2, r3
-    3fd0:	4603      	mov	r3, r0
-    3fd2:	817b      	strh	r3, [r7, #10]
-    3fd4:	460b      	mov	r3, r1
-    3fd6:	813b      	strh	r3, [r7, #8]
-    3fd8:	4613      	mov	r3, r2
-    3fda:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpsmcr = 0;
-    3fdc:	2300      	movs	r3, #0
-    3fde:	82fb      	strh	r3, [r7, #22]
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
-  assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
-  assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
-  /* Configure the ETR Clock source */
-  TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
-    3fe0:	88fb      	ldrh	r3, [r7, #6]
-    3fe2:	893a      	ldrh	r2, [r7, #8]
-    3fe4:	8979      	ldrh	r1, [r7, #10]
-    3fe6:	68f8      	ldr	r0, [r7, #12]
-    3fe8:	f000 f839 	bl	405e <TIM_ETRConfig>
-  
-  /* Get the TIMx SMCR register value */
-  tmpsmcr = TIMx->SMCR;
-    3fec:	68fb      	ldr	r3, [r7, #12]
-    3fee:	891b      	ldrh	r3, [r3, #8]
-    3ff0:	82fb      	strh	r3, [r7, #22]
-  /* Reset the SMS Bits */
-  tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
-    3ff2:	8afb      	ldrh	r3, [r7, #22]
-    3ff4:	f023 0307 	bic.w	r3, r3, #7
-    3ff8:	82fb      	strh	r3, [r7, #22]
-  /* Select the External clock mode1 */
-  tmpsmcr |= TIM_SlaveMode_External1;
-    3ffa:	8afb      	ldrh	r3, [r7, #22]
-    3ffc:	f043 0307 	orr.w	r3, r3, #7
-    4000:	82fb      	strh	r3, [r7, #22]
-  /* Select the Trigger selection : ETRF */
-  tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS));
-    4002:	8afb      	ldrh	r3, [r7, #22]
-    4004:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    4008:	82fb      	strh	r3, [r7, #22]
-  tmpsmcr |= TIM_TS_ETRF;
-    400a:	8afb      	ldrh	r3, [r7, #22]
-    400c:	f043 0370 	orr.w	r3, r3, #112	; 0x70
-    4010:	82fb      	strh	r3, [r7, #22]
-  /* Write to TIMx SMCR */
-  TIMx->SMCR = tmpsmcr;
-    4012:	68fb      	ldr	r3, [r7, #12]
-    4014:	8afa      	ldrh	r2, [r7, #22]
-    4016:	811a      	strh	r2, [r3, #8]
-}
-    4018:	bf00      	nop
-    401a:	3718      	adds	r7, #24
-    401c:	46bd      	mov	sp, r7
-    401e:	bd80      	pop	{r7, pc}
-
-00004020 <TIM_ETRClockMode2Config>:
-  *   This parameter must be a value between 0x00 and 0x0F
-  * @retval None
-  */
-void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, 
-                             uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter)
-{
-    4020:	b580      	push	{r7, lr}
-    4022:	b084      	sub	sp, #16
-    4024:	af00      	add	r7, sp, #0
-    4026:	60f8      	str	r0, [r7, #12]
-    4028:	4608      	mov	r0, r1
-    402a:	4611      	mov	r1, r2
-    402c:	461a      	mov	r2, r3
-    402e:	4603      	mov	r3, r0
-    4030:	817b      	strh	r3, [r7, #10]
-    4032:	460b      	mov	r3, r1
-    4034:	813b      	strh	r3, [r7, #8]
-    4036:	4613      	mov	r3, r2
-    4038:	80fb      	strh	r3, [r7, #6]
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
-  assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
-  assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
-  /* Configure the ETR Clock source */
-  TIM_ETRConfig(TIMx, TIM_ExtTRGPrescaler, TIM_ExtTRGPolarity, ExtTRGFilter);
-    403a:	88fb      	ldrh	r3, [r7, #6]
-    403c:	893a      	ldrh	r2, [r7, #8]
-    403e:	8979      	ldrh	r1, [r7, #10]
-    4040:	68f8      	ldr	r0, [r7, #12]
-    4042:	f000 f80c 	bl	405e <TIM_ETRConfig>
-  /* Enable the External clock mode2 */
-  TIMx->SMCR |= TIM_SMCR_ECE;
-    4046:	68fb      	ldr	r3, [r7, #12]
-    4048:	891b      	ldrh	r3, [r3, #8]
-    404a:	b29b      	uxth	r3, r3
-    404c:	f443 4380 	orr.w	r3, r3, #16384	; 0x4000
-    4050:	b29a      	uxth	r2, r3
-    4052:	68fb      	ldr	r3, [r7, #12]
-    4054:	811a      	strh	r2, [r3, #8]
-}
-    4056:	bf00      	nop
-    4058:	3710      	adds	r7, #16
-    405a:	46bd      	mov	sp, r7
-    405c:	bd80      	pop	{r7, pc}
-
-0000405e <TIM_ETRConfig>:
-  *   This parameter must be a value between 0x00 and 0x0F
-  * @retval None
-  */
-void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
-                   uint16_t ExtTRGFilter)
-{
-    405e:	b480      	push	{r7}
-    4060:	b087      	sub	sp, #28
-    4062:	af00      	add	r7, sp, #0
-    4064:	60f8      	str	r0, [r7, #12]
-    4066:	4608      	mov	r0, r1
-    4068:	4611      	mov	r1, r2
-    406a:	461a      	mov	r2, r3
-    406c:	4603      	mov	r3, r0
-    406e:	817b      	strh	r3, [r7, #10]
-    4070:	460b      	mov	r3, r1
-    4072:	813b      	strh	r3, [r7, #8]
-    4074:	4613      	mov	r3, r2
-    4076:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpsmcr = 0;
-    4078:	2300      	movs	r3, #0
-    407a:	82fb      	strh	r3, [r7, #22]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_EXT_PRESCALER(TIM_ExtTRGPrescaler));
-  assert_param(IS_TIM_EXT_POLARITY(TIM_ExtTRGPolarity));
-  assert_param(IS_TIM_EXT_FILTER(ExtTRGFilter));
-  tmpsmcr = TIMx->SMCR;
-    407c:	68fb      	ldr	r3, [r7, #12]
-    407e:	891b      	ldrh	r3, [r3, #8]
-    4080:	82fb      	strh	r3, [r7, #22]
-  /* Reset the ETR Bits */
-  tmpsmcr &= SMCR_ETR_Mask;
-    4082:	8afb      	ldrh	r3, [r7, #22]
-    4084:	b2db      	uxtb	r3, r3
-    4086:	82fb      	strh	r3, [r7, #22]
-  /* Set the Prescaler, the Filter value and the Polarity */
-  tmpsmcr |= (uint16_t)(TIM_ExtTRGPrescaler | (uint16_t)(TIM_ExtTRGPolarity | (uint16_t)(ExtTRGFilter << (uint16_t)8)));
-    4088:	88fb      	ldrh	r3, [r7, #6]
-    408a:	021b      	lsls	r3, r3, #8
-    408c:	b29a      	uxth	r2, r3
-    408e:	893b      	ldrh	r3, [r7, #8]
-    4090:	4313      	orrs	r3, r2
-    4092:	b29a      	uxth	r2, r3
-    4094:	897b      	ldrh	r3, [r7, #10]
-    4096:	4313      	orrs	r3, r2
-    4098:	b29a      	uxth	r2, r3
-    409a:	8afb      	ldrh	r3, [r7, #22]
-    409c:	4313      	orrs	r3, r2
-    409e:	82fb      	strh	r3, [r7, #22]
-  /* Write to TIMx SMCR */
-  TIMx->SMCR = tmpsmcr;
-    40a0:	68fb      	ldr	r3, [r7, #12]
-    40a2:	8afa      	ldrh	r2, [r7, #22]
-    40a4:	811a      	strh	r2, [r3, #8]
-}
-    40a6:	bf00      	nop
-    40a8:	371c      	adds	r7, #28
-    40aa:	46bd      	mov	sp, r7
-    40ac:	bc80      	pop	{r7}
-    40ae:	4770      	bx	lr
-
-000040b0 <TIM_PrescalerConfig>:
-  *     @arg TIM_PSCReloadMode_Update: The Prescaler is loaded at the update event.
-  *     @arg TIM_PSCReloadMode_Immediate: The Prescaler is loaded immediately.
-  * @retval None
-  */
-void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode)
-{
-    40b0:	b480      	push	{r7}
-    40b2:	b083      	sub	sp, #12
-    40b4:	af00      	add	r7, sp, #0
-    40b6:	6078      	str	r0, [r7, #4]
-    40b8:	460b      	mov	r3, r1
-    40ba:	807b      	strh	r3, [r7, #2]
-    40bc:	4613      	mov	r3, r2
-    40be:	803b      	strh	r3, [r7, #0]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_PRESCALER_RELOAD(TIM_PSCReloadMode));
-  /* Set the Prescaler value */
-  TIMx->PSC = Prescaler;
-    40c0:	687b      	ldr	r3, [r7, #4]
-    40c2:	887a      	ldrh	r2, [r7, #2]
-    40c4:	851a      	strh	r2, [r3, #40]	; 0x28
-  /* Set or reset the UG Bit */
-  TIMx->EGR = TIM_PSCReloadMode;
-    40c6:	687b      	ldr	r3, [r7, #4]
-    40c8:	883a      	ldrh	r2, [r7, #0]
-    40ca:	829a      	strh	r2, [r3, #20]
-}
-    40cc:	bf00      	nop
-    40ce:	370c      	adds	r7, #12
-    40d0:	46bd      	mov	sp, r7
-    40d2:	bc80      	pop	{r7}
-    40d4:	4770      	bx	lr
-
-000040d6 <TIM_CounterModeConfig>:
-  *     @arg TIM_CounterMode_CenterAligned2: TIM Center Aligned Mode2
-  *     @arg TIM_CounterMode_CenterAligned3: TIM Center Aligned Mode3
-  * @retval None
-  */
-void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode)
-{
-    40d6:	b480      	push	{r7}
-    40d8:	b085      	sub	sp, #20
-    40da:	af00      	add	r7, sp, #0
-    40dc:	6078      	str	r0, [r7, #4]
-    40de:	460b      	mov	r3, r1
-    40e0:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpcr1 = 0;
-    40e2:	2300      	movs	r3, #0
-    40e4:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_COUNTER_MODE(TIM_CounterMode));
-  tmpcr1 = TIMx->CR1;
-    40e6:	687b      	ldr	r3, [r7, #4]
-    40e8:	881b      	ldrh	r3, [r3, #0]
-    40ea:	81fb      	strh	r3, [r7, #14]
-  /* Reset the CMS and DIR Bits */
-  tmpcr1 &= (uint16_t)(~((uint16_t)(TIM_CR1_DIR | TIM_CR1_CMS)));
-    40ec:	89fb      	ldrh	r3, [r7, #14]
-    40ee:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    40f2:	81fb      	strh	r3, [r7, #14]
-  /* Set the Counter Mode */
-  tmpcr1 |= TIM_CounterMode;
-    40f4:	89fa      	ldrh	r2, [r7, #14]
-    40f6:	887b      	ldrh	r3, [r7, #2]
-    40f8:	4313      	orrs	r3, r2
-    40fa:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CR1 register */
-  TIMx->CR1 = tmpcr1;
-    40fc:	687b      	ldr	r3, [r7, #4]
-    40fe:	89fa      	ldrh	r2, [r7, #14]
-    4100:	801a      	strh	r2, [r3, #0]
-}
-    4102:	bf00      	nop
-    4104:	3714      	adds	r7, #20
-    4106:	46bd      	mov	sp, r7
-    4108:	bc80      	pop	{r7}
-    410a:	4770      	bx	lr
-
-0000410c <TIM_SelectInputTrigger>:
-  *     @arg TIM_TS_TI2FP2: Filtered Timer Input 2
-  *     @arg TIM_TS_ETRF: External Trigger input
-  * @retval None
-  */
-void TIM_SelectInputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource)
-{
-    410c:	b480      	push	{r7}
-    410e:	b085      	sub	sp, #20
-    4110:	af00      	add	r7, sp, #0
-    4112:	6078      	str	r0, [r7, #4]
-    4114:	460b      	mov	r3, r1
-    4116:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpsmcr = 0;
-    4118:	2300      	movs	r3, #0
-    411a:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_TRIGGER_SELECTION(TIM_InputTriggerSource));
-  /* Get the TIMx SMCR register value */
-  tmpsmcr = TIMx->SMCR;
-    411c:	687b      	ldr	r3, [r7, #4]
-    411e:	891b      	ldrh	r3, [r3, #8]
-    4120:	81fb      	strh	r3, [r7, #14]
-  /* Reset the TS Bits */
-  tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_TS));
-    4122:	89fb      	ldrh	r3, [r7, #14]
-    4124:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    4128:	81fb      	strh	r3, [r7, #14]
-  /* Set the Input Trigger source */
-  tmpsmcr |= TIM_InputTriggerSource;
-    412a:	89fa      	ldrh	r2, [r7, #14]
-    412c:	887b      	ldrh	r3, [r7, #2]
-    412e:	4313      	orrs	r3, r2
-    4130:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx SMCR */
-  TIMx->SMCR = tmpsmcr;
-    4132:	687b      	ldr	r3, [r7, #4]
-    4134:	89fa      	ldrh	r2, [r7, #14]
-    4136:	811a      	strh	r2, [r3, #8]
-}
-    4138:	bf00      	nop
-    413a:	3714      	adds	r7, #20
-    413c:	46bd      	mov	sp, r7
-    413e:	bc80      	pop	{r7}
-    4140:	4770      	bx	lr
-
-00004142 <TIM_EncoderInterfaceConfig>:
-  *     @arg TIM_ICPolarity_Rising: IC Rising edge.
-  * @retval None
-  */
-void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,
-                                uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)
-{
-    4142:	b480      	push	{r7}
-    4144:	b087      	sub	sp, #28
-    4146:	af00      	add	r7, sp, #0
-    4148:	60f8      	str	r0, [r7, #12]
-    414a:	4608      	mov	r0, r1
-    414c:	4611      	mov	r1, r2
-    414e:	461a      	mov	r2, r3
-    4150:	4603      	mov	r3, r0
-    4152:	817b      	strh	r3, [r7, #10]
-    4154:	460b      	mov	r3, r1
-    4156:	813b      	strh	r3, [r7, #8]
-    4158:	4613      	mov	r3, r2
-    415a:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpsmcr = 0;
-    415c:	2300      	movs	r3, #0
-    415e:	82fb      	strh	r3, [r7, #22]
-  uint16_t tmpccmr1 = 0;
-    4160:	2300      	movs	r3, #0
-    4162:	82bb      	strh	r3, [r7, #20]
-  uint16_t tmpccer = 0;
-    4164:	2300      	movs	r3, #0
-    4166:	827b      	strh	r3, [r7, #18]
-  assert_param(IS_TIM_ENCODER_MODE(TIM_EncoderMode));
-  assert_param(IS_TIM_IC_POLARITY(TIM_IC1Polarity));
-  assert_param(IS_TIM_IC_POLARITY(TIM_IC2Polarity));
-
-  /* Get the TIMx SMCR register value */
-  tmpsmcr = TIMx->SMCR;
-    4168:	68fb      	ldr	r3, [r7, #12]
-    416a:	891b      	ldrh	r3, [r3, #8]
-    416c:	82fb      	strh	r3, [r7, #22]
-  
-  /* Get the TIMx CCMR1 register value */
-  tmpccmr1 = TIMx->CCMR1;
-    416e:	68fb      	ldr	r3, [r7, #12]
-    4170:	8b1b      	ldrh	r3, [r3, #24]
-    4172:	82bb      	strh	r3, [r7, #20]
-  
-  /* Get the TIMx CCER register value */
-  tmpccer = TIMx->CCER;
-    4174:	68fb      	ldr	r3, [r7, #12]
-    4176:	8c1b      	ldrh	r3, [r3, #32]
-    4178:	827b      	strh	r3, [r7, #18]
-  
-  /* Set the encoder Mode */
-  tmpsmcr &= (uint16_t)(~((uint16_t)TIM_SMCR_SMS));
-    417a:	8afb      	ldrh	r3, [r7, #22]
-    417c:	f023 0307 	bic.w	r3, r3, #7
-    4180:	82fb      	strh	r3, [r7, #22]
-  tmpsmcr |= TIM_EncoderMode;
-    4182:	8afa      	ldrh	r2, [r7, #22]
-    4184:	897b      	ldrh	r3, [r7, #10]
-    4186:	4313      	orrs	r3, r2
-    4188:	82fb      	strh	r3, [r7, #22]
-  
-  /* Select the Capture Compare 1 and the Capture Compare 2 as input */
-  tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & (uint16_t)(~((uint16_t)TIM_CCMR1_CC2S)));
-    418a:	8abb      	ldrh	r3, [r7, #20]
-    418c:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    4190:	f023 0303 	bic.w	r3, r3, #3
-    4194:	82bb      	strh	r3, [r7, #20]
-  tmpccmr1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
-    4196:	8abb      	ldrh	r3, [r7, #20]
-    4198:	f443 7380 	orr.w	r3, r3, #256	; 0x100
-    419c:	f043 0301 	orr.w	r3, r3, #1
-    41a0:	82bb      	strh	r3, [r7, #20]
-  
-  /* Set the TI1 and the TI2 Polarities */
-  tmpccer &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCER_CC1P)) & ((uint16_t)~((uint16_t)TIM_CCER_CC2P)));
-    41a2:	8a7b      	ldrh	r3, [r7, #18]
-    41a4:	f023 0322 	bic.w	r3, r3, #34	; 0x22
-    41a8:	827b      	strh	r3, [r7, #18]
-  tmpccer |= (uint16_t)(TIM_IC1Polarity | (uint16_t)(TIM_IC2Polarity << (uint16_t)4));
-    41aa:	88fb      	ldrh	r3, [r7, #6]
-    41ac:	011b      	lsls	r3, r3, #4
-    41ae:	b29a      	uxth	r2, r3
-    41b0:	893b      	ldrh	r3, [r7, #8]
-    41b2:	4313      	orrs	r3, r2
-    41b4:	b29a      	uxth	r2, r3
-    41b6:	8a7b      	ldrh	r3, [r7, #18]
-    41b8:	4313      	orrs	r3, r2
-    41ba:	827b      	strh	r3, [r7, #18]
-  
-  /* Write to TIMx SMCR */
-  TIMx->SMCR = tmpsmcr;
-    41bc:	68fb      	ldr	r3, [r7, #12]
-    41be:	8afa      	ldrh	r2, [r7, #22]
-    41c0:	811a      	strh	r2, [r3, #8]
-  /* Write to TIMx CCMR1 */
-  TIMx->CCMR1 = tmpccmr1;
-    41c2:	68fb      	ldr	r3, [r7, #12]
-    41c4:	8aba      	ldrh	r2, [r7, #20]
-    41c6:	831a      	strh	r2, [r3, #24]
-  /* Write to TIMx CCER */
-  TIMx->CCER = tmpccer;
-    41c8:	68fb      	ldr	r3, [r7, #12]
-    41ca:	8a7a      	ldrh	r2, [r7, #18]
-    41cc:	841a      	strh	r2, [r3, #32]
-}
-    41ce:	bf00      	nop
-    41d0:	371c      	adds	r7, #28
-    41d2:	46bd      	mov	sp, r7
-    41d4:	bc80      	pop	{r7}
-    41d6:	4770      	bx	lr
-
-000041d8 <TIM_ForcedOC1Config>:
-  *     @arg TIM_ForcedAction_Active: Force active level on OC1REF
-  *     @arg TIM_ForcedAction_InActive: Force inactive level on OC1REF.
-  * @retval None
-  */
-void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
-{
-    41d8:	b480      	push	{r7}
-    41da:	b085      	sub	sp, #20
-    41dc:	af00      	add	r7, sp, #0
-    41de:	6078      	str	r0, [r7, #4]
-    41e0:	460b      	mov	r3, r1
-    41e2:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    41e4:	2300      	movs	r3, #0
-    41e6:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
-  tmpccmr1 = TIMx->CCMR1;
-    41e8:	687b      	ldr	r3, [r7, #4]
-    41ea:	8b1b      	ldrh	r3, [r3, #24]
-    41ec:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC1M Bits */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1M);
-    41ee:	89fb      	ldrh	r3, [r7, #14]
-    41f0:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    41f4:	81fb      	strh	r3, [r7, #14]
-  /* Configure The Forced output Mode */
-  tmpccmr1 |= TIM_ForcedAction;
-    41f6:	89fa      	ldrh	r2, [r7, #14]
-    41f8:	887b      	ldrh	r3, [r7, #2]
-    41fa:	4313      	orrs	r3, r2
-    41fc:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    41fe:	687b      	ldr	r3, [r7, #4]
-    4200:	89fa      	ldrh	r2, [r7, #14]
-    4202:	831a      	strh	r2, [r3, #24]
-}
-    4204:	bf00      	nop
-    4206:	3714      	adds	r7, #20
-    4208:	46bd      	mov	sp, r7
-    420a:	bc80      	pop	{r7}
-    420c:	4770      	bx	lr
-
-0000420e <TIM_ForcedOC2Config>:
-  *     @arg TIM_ForcedAction_Active: Force active level on OC2REF
-  *     @arg TIM_ForcedAction_InActive: Force inactive level on OC2REF.
-  * @retval None
-  */
-void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
-{
-    420e:	b480      	push	{r7}
-    4210:	b085      	sub	sp, #20
-    4212:	af00      	add	r7, sp, #0
-    4214:	6078      	str	r0, [r7, #4]
-    4216:	460b      	mov	r3, r1
-    4218:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    421a:	2300      	movs	r3, #0
-    421c:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
-  tmpccmr1 = TIMx->CCMR1;
-    421e:	687b      	ldr	r3, [r7, #4]
-    4220:	8b1b      	ldrh	r3, [r3, #24]
-    4222:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC2M Bits */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2M);
-    4224:	89fb      	ldrh	r3, [r7, #14]
-    4226:	f423 43e0 	bic.w	r3, r3, #28672	; 0x7000
-    422a:	81fb      	strh	r3, [r7, #14]
-  /* Configure The Forced output Mode */
-  tmpccmr1 |= (uint16_t)(TIM_ForcedAction << 8);
-    422c:	887b      	ldrh	r3, [r7, #2]
-    422e:	021b      	lsls	r3, r3, #8
-    4230:	b29a      	uxth	r2, r3
-    4232:	89fb      	ldrh	r3, [r7, #14]
-    4234:	4313      	orrs	r3, r2
-    4236:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    4238:	687b      	ldr	r3, [r7, #4]
-    423a:	89fa      	ldrh	r2, [r7, #14]
-    423c:	831a      	strh	r2, [r3, #24]
-}
-    423e:	bf00      	nop
-    4240:	3714      	adds	r7, #20
-    4242:	46bd      	mov	sp, r7
-    4244:	bc80      	pop	{r7}
-    4246:	4770      	bx	lr
-
-00004248 <TIM_ForcedOC3Config>:
-  *     @arg TIM_ForcedAction_Active: Force active level on OC3REF
-  *     @arg TIM_ForcedAction_InActive: Force inactive level on OC3REF.
-  * @retval None
-  */
-void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
-{
-    4248:	b480      	push	{r7}
-    424a:	b085      	sub	sp, #20
-    424c:	af00      	add	r7, sp, #0
-    424e:	6078      	str	r0, [r7, #4]
-    4250:	460b      	mov	r3, r1
-    4252:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    4254:	2300      	movs	r3, #0
-    4256:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
-  tmpccmr2 = TIMx->CCMR2;
-    4258:	687b      	ldr	r3, [r7, #4]
-    425a:	8b9b      	ldrh	r3, [r3, #28]
-    425c:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC1M Bits */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3M);
-    425e:	89fb      	ldrh	r3, [r7, #14]
-    4260:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    4264:	81fb      	strh	r3, [r7, #14]
-  /* Configure The Forced output Mode */
-  tmpccmr2 |= TIM_ForcedAction;
-    4266:	89fa      	ldrh	r2, [r7, #14]
-    4268:	887b      	ldrh	r3, [r7, #2]
-    426a:	4313      	orrs	r3, r2
-    426c:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    426e:	687b      	ldr	r3, [r7, #4]
-    4270:	89fa      	ldrh	r2, [r7, #14]
-    4272:	839a      	strh	r2, [r3, #28]
-}
-    4274:	bf00      	nop
-    4276:	3714      	adds	r7, #20
-    4278:	46bd      	mov	sp, r7
-    427a:	bc80      	pop	{r7}
-    427c:	4770      	bx	lr
-
-0000427e <TIM_ForcedOC4Config>:
-  *     @arg TIM_ForcedAction_Active: Force active level on OC4REF
-  *     @arg TIM_ForcedAction_InActive: Force inactive level on OC4REF.
-  * @retval None
-  */
-void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction)
-{
-    427e:	b480      	push	{r7}
-    4280:	b085      	sub	sp, #20
-    4282:	af00      	add	r7, sp, #0
-    4284:	6078      	str	r0, [r7, #4]
-    4286:	460b      	mov	r3, r1
-    4288:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    428a:	2300      	movs	r3, #0
-    428c:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_FORCED_ACTION(TIM_ForcedAction));
-  tmpccmr2 = TIMx->CCMR2;
-    428e:	687b      	ldr	r3, [r7, #4]
-    4290:	8b9b      	ldrh	r3, [r3, #28]
-    4292:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC2M Bits */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4M);
-    4294:	89fb      	ldrh	r3, [r7, #14]
-    4296:	f423 43e0 	bic.w	r3, r3, #28672	; 0x7000
-    429a:	81fb      	strh	r3, [r7, #14]
-  /* Configure The Forced output Mode */
-  tmpccmr2 |= (uint16_t)(TIM_ForcedAction << 8);
-    429c:	887b      	ldrh	r3, [r7, #2]
-    429e:	021b      	lsls	r3, r3, #8
-    42a0:	b29a      	uxth	r2, r3
-    42a2:	89fb      	ldrh	r3, [r7, #14]
-    42a4:	4313      	orrs	r3, r2
-    42a6:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    42a8:	687b      	ldr	r3, [r7, #4]
-    42aa:	89fa      	ldrh	r2, [r7, #14]
-    42ac:	839a      	strh	r2, [r3, #28]
-}
-    42ae:	bf00      	nop
-    42b0:	3714      	adds	r7, #20
-    42b2:	46bd      	mov	sp, r7
-    42b4:	bc80      	pop	{r7}
-    42b6:	4770      	bx	lr
-
-000042b8 <TIM_ARRPreloadConfig>:
-  * @param  NewState: new state of the TIMx peripheral Preload register
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    42b8:	b480      	push	{r7}
-    42ba:	b083      	sub	sp, #12
-    42bc:	af00      	add	r7, sp, #0
-    42be:	6078      	str	r0, [r7, #4]
-    42c0:	460b      	mov	r3, r1
-    42c2:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    42c4:	78fb      	ldrb	r3, [r7, #3]
-    42c6:	2b00      	cmp	r3, #0
-    42c8:	d008      	beq.n	42dc <TIM_ARRPreloadConfig+0x24>
-  {
-    /* Set the ARR Preload Bit */
-    TIMx->CR1 |= TIM_CR1_ARPE;
-    42ca:	687b      	ldr	r3, [r7, #4]
-    42cc:	881b      	ldrh	r3, [r3, #0]
-    42ce:	b29b      	uxth	r3, r3
-    42d0:	f043 0380 	orr.w	r3, r3, #128	; 0x80
-    42d4:	b29a      	uxth	r2, r3
-    42d6:	687b      	ldr	r3, [r7, #4]
-    42d8:	801a      	strh	r2, [r3, #0]
-  else
-  {
-    /* Reset the ARR Preload Bit */
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
-  }
-}
-    42da:	e007      	b.n	42ec <TIM_ARRPreloadConfig+0x34>
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_ARPE);
-    42dc:	687b      	ldr	r3, [r7, #4]
-    42de:	881b      	ldrh	r3, [r3, #0]
-    42e0:	b29b      	uxth	r3, r3
-    42e2:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    42e6:	b29a      	uxth	r2, r3
-    42e8:	687b      	ldr	r3, [r7, #4]
-    42ea:	801a      	strh	r2, [r3, #0]
-}
-    42ec:	bf00      	nop
-    42ee:	370c      	adds	r7, #12
-    42f0:	46bd      	mov	sp, r7
-    42f2:	bc80      	pop	{r7}
-    42f4:	4770      	bx	lr
-
-000042f6 <TIM_SelectCOM>:
-  * @param  NewState: new state of the Commutation event.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_SelectCOM(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    42f6:	b480      	push	{r7}
-    42f8:	b083      	sub	sp, #12
-    42fa:	af00      	add	r7, sp, #0
-    42fc:	6078      	str	r0, [r7, #4]
-    42fe:	460b      	mov	r3, r1
-    4300:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST2_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    4302:	78fb      	ldrb	r3, [r7, #3]
-    4304:	2b00      	cmp	r3, #0
-    4306:	d008      	beq.n	431a <TIM_SelectCOM+0x24>
-  {
-    /* Set the COM Bit */
-    TIMx->CR2 |= TIM_CR2_CCUS;
-    4308:	687b      	ldr	r3, [r7, #4]
-    430a:	889b      	ldrh	r3, [r3, #4]
-    430c:	b29b      	uxth	r3, r3
-    430e:	f043 0304 	orr.w	r3, r3, #4
-    4312:	b29a      	uxth	r2, r3
-    4314:	687b      	ldr	r3, [r7, #4]
-    4316:	809a      	strh	r2, [r3, #4]
-  else
-  {
-    /* Reset the COM Bit */
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS);
-  }
-}
-    4318:	e007      	b.n	432a <TIM_SelectCOM+0x34>
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCUS);
-    431a:	687b      	ldr	r3, [r7, #4]
-    431c:	889b      	ldrh	r3, [r3, #4]
-    431e:	b29b      	uxth	r3, r3
-    4320:	f023 0304 	bic.w	r3, r3, #4
-    4324:	b29a      	uxth	r2, r3
-    4326:	687b      	ldr	r3, [r7, #4]
-    4328:	809a      	strh	r2, [r3, #4]
-}
-    432a:	bf00      	nop
-    432c:	370c      	adds	r7, #12
-    432e:	46bd      	mov	sp, r7
-    4330:	bc80      	pop	{r7}
-    4332:	4770      	bx	lr
-
-00004334 <TIM_SelectCCDMA>:
-  * @param  NewState: new state of the Capture Compare DMA source
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_SelectCCDMA(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    4334:	b480      	push	{r7}
-    4336:	b083      	sub	sp, #12
-    4338:	af00      	add	r7, sp, #0
-    433a:	6078      	str	r0, [r7, #4]
-    433c:	460b      	mov	r3, r1
-    433e:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST4_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    4340:	78fb      	ldrb	r3, [r7, #3]
-    4342:	2b00      	cmp	r3, #0
-    4344:	d008      	beq.n	4358 <TIM_SelectCCDMA+0x24>
-  {
-    /* Set the CCDS Bit */
-    TIMx->CR2 |= TIM_CR2_CCDS;
-    4346:	687b      	ldr	r3, [r7, #4]
-    4348:	889b      	ldrh	r3, [r3, #4]
-    434a:	b29b      	uxth	r3, r3
-    434c:	f043 0308 	orr.w	r3, r3, #8
-    4350:	b29a      	uxth	r2, r3
-    4352:	687b      	ldr	r3, [r7, #4]
-    4354:	809a      	strh	r2, [r3, #4]
-  else
-  {
-    /* Reset the CCDS Bit */
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS);
-  }
-}
-    4356:	e007      	b.n	4368 <TIM_SelectCCDMA+0x34>
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCDS);
-    4358:	687b      	ldr	r3, [r7, #4]
-    435a:	889b      	ldrh	r3, [r3, #4]
-    435c:	b29b      	uxth	r3, r3
-    435e:	f023 0308 	bic.w	r3, r3, #8
-    4362:	b29a      	uxth	r2, r3
-    4364:	687b      	ldr	r3, [r7, #4]
-    4366:	809a      	strh	r2, [r3, #4]
-}
-    4368:	bf00      	nop
-    436a:	370c      	adds	r7, #12
-    436c:	46bd      	mov	sp, r7
-    436e:	bc80      	pop	{r7}
-    4370:	4770      	bx	lr
-
-00004372 <TIM_CCPreloadControl>:
-  * @param  NewState: new state of the Capture Compare Preload Control bit
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_CCPreloadControl(TIM_TypeDef* TIMx, FunctionalState NewState)
-{ 
-    4372:	b480      	push	{r7}
-    4374:	b083      	sub	sp, #12
-    4376:	af00      	add	r7, sp, #0
-    4378:	6078      	str	r0, [r7, #4]
-    437a:	460b      	mov	r3, r1
-    437c:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST5_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    437e:	78fb      	ldrb	r3, [r7, #3]
-    4380:	2b00      	cmp	r3, #0
-    4382:	d008      	beq.n	4396 <TIM_CCPreloadControl+0x24>
-  {
-    /* Set the CCPC Bit */
-    TIMx->CR2 |= TIM_CR2_CCPC;
-    4384:	687b      	ldr	r3, [r7, #4]
-    4386:	889b      	ldrh	r3, [r3, #4]
-    4388:	b29b      	uxth	r3, r3
-    438a:	f043 0301 	orr.w	r3, r3, #1
-    438e:	b29a      	uxth	r2, r3
-    4390:	687b      	ldr	r3, [r7, #4]
-    4392:	809a      	strh	r2, [r3, #4]
-  else
-  {
-    /* Reset the CCPC Bit */
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC);
-  }
-}
-    4394:	e007      	b.n	43a6 <TIM_CCPreloadControl+0x34>
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_CCPC);
-    4396:	687b      	ldr	r3, [r7, #4]
-    4398:	889b      	ldrh	r3, [r3, #4]
-    439a:	b29b      	uxth	r3, r3
-    439c:	f023 0301 	bic.w	r3, r3, #1
-    43a0:	b29a      	uxth	r2, r3
-    43a2:	687b      	ldr	r3, [r7, #4]
-    43a4:	809a      	strh	r2, [r3, #4]
-}
-    43a6:	bf00      	nop
-    43a8:	370c      	adds	r7, #12
-    43aa:	46bd      	mov	sp, r7
-    43ac:	bc80      	pop	{r7}
-    43ae:	4770      	bx	lr
-
-000043b0 <TIM_OC1PreloadConfig>:
-  *     @arg TIM_OCPreload_Enable
-  *     @arg TIM_OCPreload_Disable
-  * @retval None
-  */
-void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
-{
-    43b0:	b480      	push	{r7}
-    43b2:	b085      	sub	sp, #20
-    43b4:	af00      	add	r7, sp, #0
-    43b6:	6078      	str	r0, [r7, #4]
-    43b8:	460b      	mov	r3, r1
-    43ba:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    43bc:	2300      	movs	r3, #0
-    43be:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
-  tmpccmr1 = TIMx->CCMR1;
-    43c0:	687b      	ldr	r3, [r7, #4]
-    43c2:	8b1b      	ldrh	r3, [r3, #24]
-    43c4:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC1PE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1PE);
-    43c6:	89fb      	ldrh	r3, [r7, #14]
-    43c8:	f023 0308 	bic.w	r3, r3, #8
-    43cc:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Preload feature */
-  tmpccmr1 |= TIM_OCPreload;
-    43ce:	89fa      	ldrh	r2, [r7, #14]
-    43d0:	887b      	ldrh	r3, [r7, #2]
-    43d2:	4313      	orrs	r3, r2
-    43d4:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    43d6:	687b      	ldr	r3, [r7, #4]
-    43d8:	89fa      	ldrh	r2, [r7, #14]
-    43da:	831a      	strh	r2, [r3, #24]
-}
-    43dc:	bf00      	nop
-    43de:	3714      	adds	r7, #20
-    43e0:	46bd      	mov	sp, r7
-    43e2:	bc80      	pop	{r7}
-    43e4:	4770      	bx	lr
-
-000043e6 <TIM_OC2PreloadConfig>:
-  *     @arg TIM_OCPreload_Enable
-  *     @arg TIM_OCPreload_Disable
-  * @retval None
-  */
-void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
-{
-    43e6:	b480      	push	{r7}
-    43e8:	b085      	sub	sp, #20
-    43ea:	af00      	add	r7, sp, #0
-    43ec:	6078      	str	r0, [r7, #4]
-    43ee:	460b      	mov	r3, r1
-    43f0:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    43f2:	2300      	movs	r3, #0
-    43f4:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
-  tmpccmr1 = TIMx->CCMR1;
-    43f6:	687b      	ldr	r3, [r7, #4]
-    43f8:	8b1b      	ldrh	r3, [r3, #24]
-    43fa:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC2PE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2PE);
-    43fc:	89fb      	ldrh	r3, [r7, #14]
-    43fe:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    4402:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Preload feature */
-  tmpccmr1 |= (uint16_t)(TIM_OCPreload << 8);
-    4404:	887b      	ldrh	r3, [r7, #2]
-    4406:	021b      	lsls	r3, r3, #8
-    4408:	b29a      	uxth	r2, r3
-    440a:	89fb      	ldrh	r3, [r7, #14]
-    440c:	4313      	orrs	r3, r2
-    440e:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    4410:	687b      	ldr	r3, [r7, #4]
-    4412:	89fa      	ldrh	r2, [r7, #14]
-    4414:	831a      	strh	r2, [r3, #24]
-}
-    4416:	bf00      	nop
-    4418:	3714      	adds	r7, #20
-    441a:	46bd      	mov	sp, r7
-    441c:	bc80      	pop	{r7}
-    441e:	4770      	bx	lr
-
-00004420 <TIM_OC3PreloadConfig>:
-  *     @arg TIM_OCPreload_Enable
-  *     @arg TIM_OCPreload_Disable
-  * @retval None
-  */
-void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
-{
-    4420:	b480      	push	{r7}
-    4422:	b085      	sub	sp, #20
-    4424:	af00      	add	r7, sp, #0
-    4426:	6078      	str	r0, [r7, #4]
-    4428:	460b      	mov	r3, r1
-    442a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    442c:	2300      	movs	r3, #0
-    442e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
-  tmpccmr2 = TIMx->CCMR2;
-    4430:	687b      	ldr	r3, [r7, #4]
-    4432:	8b9b      	ldrh	r3, [r3, #28]
-    4434:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC3PE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3PE);
-    4436:	89fb      	ldrh	r3, [r7, #14]
-    4438:	f023 0308 	bic.w	r3, r3, #8
-    443c:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Preload feature */
-  tmpccmr2 |= TIM_OCPreload;
-    443e:	89fa      	ldrh	r2, [r7, #14]
-    4440:	887b      	ldrh	r3, [r7, #2]
-    4442:	4313      	orrs	r3, r2
-    4444:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    4446:	687b      	ldr	r3, [r7, #4]
-    4448:	89fa      	ldrh	r2, [r7, #14]
-    444a:	839a      	strh	r2, [r3, #28]
-}
-    444c:	bf00      	nop
-    444e:	3714      	adds	r7, #20
-    4450:	46bd      	mov	sp, r7
-    4452:	bc80      	pop	{r7}
-    4454:	4770      	bx	lr
-
-00004456 <TIM_OC4PreloadConfig>:
-  *     @arg TIM_OCPreload_Enable
-  *     @arg TIM_OCPreload_Disable
-  * @retval None
-  */
-void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload)
-{
-    4456:	b480      	push	{r7}
-    4458:	b085      	sub	sp, #20
-    445a:	af00      	add	r7, sp, #0
-    445c:	6078      	str	r0, [r7, #4]
-    445e:	460b      	mov	r3, r1
-    4460:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    4462:	2300      	movs	r3, #0
-    4464:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCPRELOAD_STATE(TIM_OCPreload));
-  tmpccmr2 = TIMx->CCMR2;
-    4466:	687b      	ldr	r3, [r7, #4]
-    4468:	8b9b      	ldrh	r3, [r3, #28]
-    446a:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC4PE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4PE);
-    446c:	89fb      	ldrh	r3, [r7, #14]
-    446e:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    4472:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Preload feature */
-  tmpccmr2 |= (uint16_t)(TIM_OCPreload << 8);
-    4474:	887b      	ldrh	r3, [r7, #2]
-    4476:	021b      	lsls	r3, r3, #8
-    4478:	b29a      	uxth	r2, r3
-    447a:	89fb      	ldrh	r3, [r7, #14]
-    447c:	4313      	orrs	r3, r2
-    447e:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    4480:	687b      	ldr	r3, [r7, #4]
-    4482:	89fa      	ldrh	r2, [r7, #14]
-    4484:	839a      	strh	r2, [r3, #28]
-}
-    4486:	bf00      	nop
-    4488:	3714      	adds	r7, #20
-    448a:	46bd      	mov	sp, r7
-    448c:	bc80      	pop	{r7}
-    448e:	4770      	bx	lr
-
-00004490 <TIM_OC1FastConfig>:
-  *     @arg TIM_OCFast_Enable: TIM output compare fast enable
-  *     @arg TIM_OCFast_Disable: TIM output compare fast disable
-  * @retval None
-  */
-void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
-{
-    4490:	b480      	push	{r7}
-    4492:	b085      	sub	sp, #20
-    4494:	af00      	add	r7, sp, #0
-    4496:	6078      	str	r0, [r7, #4]
-    4498:	460b      	mov	r3, r1
-    449a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    449c:	2300      	movs	r3, #0
-    449e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
-  /* Get the TIMx CCMR1 register value */
-  tmpccmr1 = TIMx->CCMR1;
-    44a0:	687b      	ldr	r3, [r7, #4]
-    44a2:	8b1b      	ldrh	r3, [r3, #24]
-    44a4:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC1FE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1FE);
-    44a6:	89fb      	ldrh	r3, [r7, #14]
-    44a8:	f023 0304 	bic.w	r3, r3, #4
-    44ac:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Fast Bit */
-  tmpccmr1 |= TIM_OCFast;
-    44ae:	89fa      	ldrh	r2, [r7, #14]
-    44b0:	887b      	ldrh	r3, [r7, #2]
-    44b2:	4313      	orrs	r3, r2
-    44b4:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 */
-  TIMx->CCMR1 = tmpccmr1;
-    44b6:	687b      	ldr	r3, [r7, #4]
-    44b8:	89fa      	ldrh	r2, [r7, #14]
-    44ba:	831a      	strh	r2, [r3, #24]
-}
-    44bc:	bf00      	nop
-    44be:	3714      	adds	r7, #20
-    44c0:	46bd      	mov	sp, r7
-    44c2:	bc80      	pop	{r7}
-    44c4:	4770      	bx	lr
-
-000044c6 <TIM_OC2FastConfig>:
-  *     @arg TIM_OCFast_Enable: TIM output compare fast enable
-  *     @arg TIM_OCFast_Disable: TIM output compare fast disable
-  * @retval None
-  */
-void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
-{
-    44c6:	b480      	push	{r7}
-    44c8:	b085      	sub	sp, #20
-    44ca:	af00      	add	r7, sp, #0
-    44cc:	6078      	str	r0, [r7, #4]
-    44ce:	460b      	mov	r3, r1
-    44d0:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    44d2:	2300      	movs	r3, #0
-    44d4:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
-  /* Get the TIMx CCMR1 register value */
-  tmpccmr1 = TIMx->CCMR1;
-    44d6:	687b      	ldr	r3, [r7, #4]
-    44d8:	8b1b      	ldrh	r3, [r3, #24]
-    44da:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC2FE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2FE);
-    44dc:	89fb      	ldrh	r3, [r7, #14]
-    44de:	f423 6380 	bic.w	r3, r3, #1024	; 0x400
-    44e2:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Fast Bit */
-  tmpccmr1 |= (uint16_t)(TIM_OCFast << 8);
-    44e4:	887b      	ldrh	r3, [r7, #2]
-    44e6:	021b      	lsls	r3, r3, #8
-    44e8:	b29a      	uxth	r2, r3
-    44ea:	89fb      	ldrh	r3, [r7, #14]
-    44ec:	4313      	orrs	r3, r2
-    44ee:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 */
-  TIMx->CCMR1 = tmpccmr1;
-    44f0:	687b      	ldr	r3, [r7, #4]
-    44f2:	89fa      	ldrh	r2, [r7, #14]
-    44f4:	831a      	strh	r2, [r3, #24]
-}
-    44f6:	bf00      	nop
-    44f8:	3714      	adds	r7, #20
-    44fa:	46bd      	mov	sp, r7
-    44fc:	bc80      	pop	{r7}
-    44fe:	4770      	bx	lr
-
-00004500 <TIM_OC3FastConfig>:
-  *     @arg TIM_OCFast_Enable: TIM output compare fast enable
-  *     @arg TIM_OCFast_Disable: TIM output compare fast disable
-  * @retval None
-  */
-void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
-{
-    4500:	b480      	push	{r7}
-    4502:	b085      	sub	sp, #20
-    4504:	af00      	add	r7, sp, #0
-    4506:	6078      	str	r0, [r7, #4]
-    4508:	460b      	mov	r3, r1
-    450a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    450c:	2300      	movs	r3, #0
-    450e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
-  /* Get the TIMx CCMR2 register value */
-  tmpccmr2 = TIMx->CCMR2;
-    4510:	687b      	ldr	r3, [r7, #4]
-    4512:	8b9b      	ldrh	r3, [r3, #28]
-    4514:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC3FE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3FE);
-    4516:	89fb      	ldrh	r3, [r7, #14]
-    4518:	f023 0304 	bic.w	r3, r3, #4
-    451c:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Fast Bit */
-  tmpccmr2 |= TIM_OCFast;
-    451e:	89fa      	ldrh	r2, [r7, #14]
-    4520:	887b      	ldrh	r3, [r7, #2]
-    4522:	4313      	orrs	r3, r2
-    4524:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 */
-  TIMx->CCMR2 = tmpccmr2;
-    4526:	687b      	ldr	r3, [r7, #4]
-    4528:	89fa      	ldrh	r2, [r7, #14]
-    452a:	839a      	strh	r2, [r3, #28]
-}
-    452c:	bf00      	nop
-    452e:	3714      	adds	r7, #20
-    4530:	46bd      	mov	sp, r7
-    4532:	bc80      	pop	{r7}
-    4534:	4770      	bx	lr
-
-00004536 <TIM_OC4FastConfig>:
-  *     @arg TIM_OCFast_Enable: TIM output compare fast enable
-  *     @arg TIM_OCFast_Disable: TIM output compare fast disable
-  * @retval None
-  */
-void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast)
-{
-    4536:	b480      	push	{r7}
-    4538:	b085      	sub	sp, #20
-    453a:	af00      	add	r7, sp, #0
-    453c:	6078      	str	r0, [r7, #4]
-    453e:	460b      	mov	r3, r1
-    4540:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    4542:	2300      	movs	r3, #0
-    4544:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCFAST_STATE(TIM_OCFast));
-  /* Get the TIMx CCMR2 register value */
-  tmpccmr2 = TIMx->CCMR2;
-    4546:	687b      	ldr	r3, [r7, #4]
-    4548:	8b9b      	ldrh	r3, [r3, #28]
-    454a:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC4FE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4FE);
-    454c:	89fb      	ldrh	r3, [r7, #14]
-    454e:	f423 6380 	bic.w	r3, r3, #1024	; 0x400
-    4552:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Fast Bit */
-  tmpccmr2 |= (uint16_t)(TIM_OCFast << 8);
-    4554:	887b      	ldrh	r3, [r7, #2]
-    4556:	021b      	lsls	r3, r3, #8
-    4558:	b29a      	uxth	r2, r3
-    455a:	89fb      	ldrh	r3, [r7, #14]
-    455c:	4313      	orrs	r3, r2
-    455e:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 */
-  TIMx->CCMR2 = tmpccmr2;
-    4560:	687b      	ldr	r3, [r7, #4]
-    4562:	89fa      	ldrh	r2, [r7, #14]
-    4564:	839a      	strh	r2, [r3, #28]
-}
-    4566:	bf00      	nop
-    4568:	3714      	adds	r7, #20
-    456a:	46bd      	mov	sp, r7
-    456c:	bc80      	pop	{r7}
-    456e:	4770      	bx	lr
-
-00004570 <TIM_ClearOC1Ref>:
-  *     @arg TIM_OCClear_Enable: TIM Output clear enable
-  *     @arg TIM_OCClear_Disable: TIM Output clear disable
-  * @retval None
-  */
-void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
-{
-    4570:	b480      	push	{r7}
-    4572:	b085      	sub	sp, #20
-    4574:	af00      	add	r7, sp, #0
-    4576:	6078      	str	r0, [r7, #4]
-    4578:	460b      	mov	r3, r1
-    457a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    457c:	2300      	movs	r3, #0
-    457e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
-
-  tmpccmr1 = TIMx->CCMR1;
-    4580:	687b      	ldr	r3, [r7, #4]
-    4582:	8b1b      	ldrh	r3, [r3, #24]
-    4584:	81fb      	strh	r3, [r7, #14]
-
-  /* Reset the OC1CE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC1CE);
-    4586:	89fb      	ldrh	r3, [r7, #14]
-    4588:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    458c:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Clear Bit */
-  tmpccmr1 |= TIM_OCClear;
-    458e:	89fa      	ldrh	r2, [r7, #14]
-    4590:	887b      	ldrh	r3, [r7, #2]
-    4592:	4313      	orrs	r3, r2
-    4594:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    4596:	687b      	ldr	r3, [r7, #4]
-    4598:	89fa      	ldrh	r2, [r7, #14]
-    459a:	831a      	strh	r2, [r3, #24]
-}
-    459c:	bf00      	nop
-    459e:	3714      	adds	r7, #20
-    45a0:	46bd      	mov	sp, r7
-    45a2:	bc80      	pop	{r7}
-    45a4:	4770      	bx	lr
-
-000045a6 <TIM_ClearOC2Ref>:
-  *     @arg TIM_OCClear_Enable: TIM Output clear enable
-  *     @arg TIM_OCClear_Disable: TIM Output clear disable
-  * @retval None
-  */
-void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
-{
-    45a6:	b480      	push	{r7}
-    45a8:	b085      	sub	sp, #20
-    45aa:	af00      	add	r7, sp, #0
-    45ac:	6078      	str	r0, [r7, #4]
-    45ae:	460b      	mov	r3, r1
-    45b0:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr1 = 0;
-    45b2:	2300      	movs	r3, #0
-    45b4:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
-  tmpccmr1 = TIMx->CCMR1;
-    45b6:	687b      	ldr	r3, [r7, #4]
-    45b8:	8b1b      	ldrh	r3, [r3, #24]
-    45ba:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC2CE Bit */
-  tmpccmr1 &= (uint16_t)~((uint16_t)TIM_CCMR1_OC2CE);
-    45bc:	89fb      	ldrh	r3, [r7, #14]
-    45be:	f3c3 030e 	ubfx	r3, r3, #0, #15
-    45c2:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Clear Bit */
-  tmpccmr1 |= (uint16_t)(TIM_OCClear << 8);
-    45c4:	887b      	ldrh	r3, [r7, #2]
-    45c6:	021b      	lsls	r3, r3, #8
-    45c8:	b29a      	uxth	r2, r3
-    45ca:	89fb      	ldrh	r3, [r7, #14]
-    45cc:	4313      	orrs	r3, r2
-    45ce:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR1 register */
-  TIMx->CCMR1 = tmpccmr1;
-    45d0:	687b      	ldr	r3, [r7, #4]
-    45d2:	89fa      	ldrh	r2, [r7, #14]
-    45d4:	831a      	strh	r2, [r3, #24]
-}
-    45d6:	bf00      	nop
-    45d8:	3714      	adds	r7, #20
-    45da:	46bd      	mov	sp, r7
-    45dc:	bc80      	pop	{r7}
-    45de:	4770      	bx	lr
-
-000045e0 <TIM_ClearOC3Ref>:
-  *     @arg TIM_OCClear_Enable: TIM Output clear enable
-  *     @arg TIM_OCClear_Disable: TIM Output clear disable
-  * @retval None
-  */
-void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
-{
-    45e0:	b480      	push	{r7}
-    45e2:	b085      	sub	sp, #20
-    45e4:	af00      	add	r7, sp, #0
-    45e6:	6078      	str	r0, [r7, #4]
-    45e8:	460b      	mov	r3, r1
-    45ea:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    45ec:	2300      	movs	r3, #0
-    45ee:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
-  tmpccmr2 = TIMx->CCMR2;
-    45f0:	687b      	ldr	r3, [r7, #4]
-    45f2:	8b9b      	ldrh	r3, [r3, #28]
-    45f4:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC3CE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC3CE);
-    45f6:	89fb      	ldrh	r3, [r7, #14]
-    45f8:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    45fc:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Clear Bit */
-  tmpccmr2 |= TIM_OCClear;
-    45fe:	89fa      	ldrh	r2, [r7, #14]
-    4600:	887b      	ldrh	r3, [r7, #2]
-    4602:	4313      	orrs	r3, r2
-    4604:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    4606:	687b      	ldr	r3, [r7, #4]
-    4608:	89fa      	ldrh	r2, [r7, #14]
-    460a:	839a      	strh	r2, [r3, #28]
-}
-    460c:	bf00      	nop
-    460e:	3714      	adds	r7, #20
-    4610:	46bd      	mov	sp, r7
-    4612:	bc80      	pop	{r7}
-    4614:	4770      	bx	lr
-
-00004616 <TIM_ClearOC4Ref>:
-  *     @arg TIM_OCClear_Enable: TIM Output clear enable
-  *     @arg TIM_OCClear_Disable: TIM Output clear disable
-  * @retval None
-  */
-void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear)
-{
-    4616:	b480      	push	{r7}
-    4618:	b085      	sub	sp, #20
-    461a:	af00      	add	r7, sp, #0
-    461c:	6078      	str	r0, [r7, #4]
-    461e:	460b      	mov	r3, r1
-    4620:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccmr2 = 0;
-    4622:	2300      	movs	r3, #0
-    4624:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OCCLEAR_STATE(TIM_OCClear));
-  tmpccmr2 = TIMx->CCMR2;
-    4626:	687b      	ldr	r3, [r7, #4]
-    4628:	8b9b      	ldrh	r3, [r3, #28]
-    462a:	81fb      	strh	r3, [r7, #14]
-  /* Reset the OC4CE Bit */
-  tmpccmr2 &= (uint16_t)~((uint16_t)TIM_CCMR2_OC4CE);
-    462c:	89fb      	ldrh	r3, [r7, #14]
-    462e:	f3c3 030e 	ubfx	r3, r3, #0, #15
-    4632:	81fb      	strh	r3, [r7, #14]
-  /* Enable or Disable the Output Compare Clear Bit */
-  tmpccmr2 |= (uint16_t)(TIM_OCClear << 8);
-    4634:	887b      	ldrh	r3, [r7, #2]
-    4636:	021b      	lsls	r3, r3, #8
-    4638:	b29a      	uxth	r2, r3
-    463a:	89fb      	ldrh	r3, [r7, #14]
-    463c:	4313      	orrs	r3, r2
-    463e:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCMR2 register */
-  TIMx->CCMR2 = tmpccmr2;
-    4640:	687b      	ldr	r3, [r7, #4]
-    4642:	89fa      	ldrh	r2, [r7, #14]
-    4644:	839a      	strh	r2, [r3, #28]
-}
-    4646:	bf00      	nop
-    4648:	3714      	adds	r7, #20
-    464a:	46bd      	mov	sp, r7
-    464c:	bc80      	pop	{r7}
-    464e:	4770      	bx	lr
-
-00004650 <TIM_OC1PolarityConfig>:
-  *     @arg TIM_OCPolarity_High: Output Compare active high
-  *     @arg TIM_OCPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
-{
-    4650:	b480      	push	{r7}
-    4652:	b085      	sub	sp, #20
-    4654:	af00      	add	r7, sp, #0
-    4656:	6078      	str	r0, [r7, #4]
-    4658:	460b      	mov	r3, r1
-    465a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    465c:	2300      	movs	r3, #0
-    465e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
-  tmpccer = TIMx->CCER;
-    4660:	687b      	ldr	r3, [r7, #4]
-    4662:	8c1b      	ldrh	r3, [r3, #32]
-    4664:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC1P Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1P);
-    4666:	89fb      	ldrh	r3, [r7, #14]
-    4668:	f023 0302 	bic.w	r3, r3, #2
-    466c:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= TIM_OCPolarity;
-    466e:	89fa      	ldrh	r2, [r7, #14]
-    4670:	887b      	ldrh	r3, [r7, #2]
-    4672:	4313      	orrs	r3, r2
-    4674:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    4676:	687b      	ldr	r3, [r7, #4]
-    4678:	89fa      	ldrh	r2, [r7, #14]
-    467a:	841a      	strh	r2, [r3, #32]
-}
-    467c:	bf00      	nop
-    467e:	3714      	adds	r7, #20
-    4680:	46bd      	mov	sp, r7
-    4682:	bc80      	pop	{r7}
-    4684:	4770      	bx	lr
-
-00004686 <TIM_OC1NPolarityConfig>:
-  *     @arg TIM_OCNPolarity_High: Output Compare active high
-  *     @arg TIM_OCNPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
-{
-    4686:	b480      	push	{r7}
-    4688:	b085      	sub	sp, #20
-    468a:	af00      	add	r7, sp, #0
-    468c:	6078      	str	r0, [r7, #4]
-    468e:	460b      	mov	r3, r1
-    4690:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    4692:	2300      	movs	r3, #0
-    4694:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST2_PERIPH(TIMx));
-  assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
-   
-  tmpccer = TIMx->CCER;
-    4696:	687b      	ldr	r3, [r7, #4]
-    4698:	8c1b      	ldrh	r3, [r3, #32]
-    469a:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC1NP Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC1NP);
-    469c:	89fb      	ldrh	r3, [r7, #14]
-    469e:	f023 0308 	bic.w	r3, r3, #8
-    46a2:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= TIM_OCNPolarity;
-    46a4:	89fa      	ldrh	r2, [r7, #14]
-    46a6:	887b      	ldrh	r3, [r7, #2]
-    46a8:	4313      	orrs	r3, r2
-    46aa:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    46ac:	687b      	ldr	r3, [r7, #4]
-    46ae:	89fa      	ldrh	r2, [r7, #14]
-    46b0:	841a      	strh	r2, [r3, #32]
-}
-    46b2:	bf00      	nop
-    46b4:	3714      	adds	r7, #20
-    46b6:	46bd      	mov	sp, r7
-    46b8:	bc80      	pop	{r7}
-    46ba:	4770      	bx	lr
-
-000046bc <TIM_OC2PolarityConfig>:
-  *     @arg TIM_OCPolarity_High: Output Compare active high
-  *     @arg TIM_OCPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
-{
-    46bc:	b480      	push	{r7}
-    46be:	b085      	sub	sp, #20
-    46c0:	af00      	add	r7, sp, #0
-    46c2:	6078      	str	r0, [r7, #4]
-    46c4:	460b      	mov	r3, r1
-    46c6:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    46c8:	2300      	movs	r3, #0
-    46ca:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
-  tmpccer = TIMx->CCER;
-    46cc:	687b      	ldr	r3, [r7, #4]
-    46ce:	8c1b      	ldrh	r3, [r3, #32]
-    46d0:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC2P Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2P);
-    46d2:	89fb      	ldrh	r3, [r7, #14]
-    46d4:	f023 0320 	bic.w	r3, r3, #32
-    46d8:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= (uint16_t)(TIM_OCPolarity << 4);
-    46da:	887b      	ldrh	r3, [r7, #2]
-    46dc:	011b      	lsls	r3, r3, #4
-    46de:	b29a      	uxth	r2, r3
-    46e0:	89fb      	ldrh	r3, [r7, #14]
-    46e2:	4313      	orrs	r3, r2
-    46e4:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    46e6:	687b      	ldr	r3, [r7, #4]
-    46e8:	89fa      	ldrh	r2, [r7, #14]
-    46ea:	841a      	strh	r2, [r3, #32]
-}
-    46ec:	bf00      	nop
-    46ee:	3714      	adds	r7, #20
-    46f0:	46bd      	mov	sp, r7
-    46f2:	bc80      	pop	{r7}
-    46f4:	4770      	bx	lr
-
-000046f6 <TIM_OC2NPolarityConfig>:
-  *     @arg TIM_OCNPolarity_High: Output Compare active high
-  *     @arg TIM_OCNPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
-{
-    46f6:	b480      	push	{r7}
-    46f8:	b085      	sub	sp, #20
-    46fa:	af00      	add	r7, sp, #0
-    46fc:	6078      	str	r0, [r7, #4]
-    46fe:	460b      	mov	r3, r1
-    4700:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    4702:	2300      	movs	r3, #0
-    4704:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST1_PERIPH(TIMx));
-  assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
-  
-  tmpccer = TIMx->CCER;
-    4706:	687b      	ldr	r3, [r7, #4]
-    4708:	8c1b      	ldrh	r3, [r3, #32]
-    470a:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC2NP Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC2NP);
-    470c:	89fb      	ldrh	r3, [r7, #14]
-    470e:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    4712:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= (uint16_t)(TIM_OCNPolarity << 4);
-    4714:	887b      	ldrh	r3, [r7, #2]
-    4716:	011b      	lsls	r3, r3, #4
-    4718:	b29a      	uxth	r2, r3
-    471a:	89fb      	ldrh	r3, [r7, #14]
-    471c:	4313      	orrs	r3, r2
-    471e:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    4720:	687b      	ldr	r3, [r7, #4]
-    4722:	89fa      	ldrh	r2, [r7, #14]
-    4724:	841a      	strh	r2, [r3, #32]
-}
-    4726:	bf00      	nop
-    4728:	3714      	adds	r7, #20
-    472a:	46bd      	mov	sp, r7
-    472c:	bc80      	pop	{r7}
-    472e:	4770      	bx	lr
-
-00004730 <TIM_OC3PolarityConfig>:
-  *     @arg TIM_OCPolarity_High: Output Compare active high
-  *     @arg TIM_OCPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
-{
-    4730:	b480      	push	{r7}
-    4732:	b085      	sub	sp, #20
-    4734:	af00      	add	r7, sp, #0
-    4736:	6078      	str	r0, [r7, #4]
-    4738:	460b      	mov	r3, r1
-    473a:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    473c:	2300      	movs	r3, #0
-    473e:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
-  tmpccer = TIMx->CCER;
-    4740:	687b      	ldr	r3, [r7, #4]
-    4742:	8c1b      	ldrh	r3, [r3, #32]
-    4744:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC3P Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3P);
-    4746:	89fb      	ldrh	r3, [r7, #14]
-    4748:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    474c:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= (uint16_t)(TIM_OCPolarity << 8);
-    474e:	887b      	ldrh	r3, [r7, #2]
-    4750:	021b      	lsls	r3, r3, #8
-    4752:	b29a      	uxth	r2, r3
-    4754:	89fb      	ldrh	r3, [r7, #14]
-    4756:	4313      	orrs	r3, r2
-    4758:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    475a:	687b      	ldr	r3, [r7, #4]
-    475c:	89fa      	ldrh	r2, [r7, #14]
-    475e:	841a      	strh	r2, [r3, #32]
-}
-    4760:	bf00      	nop
-    4762:	3714      	adds	r7, #20
-    4764:	46bd      	mov	sp, r7
-    4766:	bc80      	pop	{r7}
-    4768:	4770      	bx	lr
-
-0000476a <TIM_OC3NPolarityConfig>:
-  *     @arg TIM_OCNPolarity_High: Output Compare active high
-  *     @arg TIM_OCNPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity)
-{
-    476a:	b480      	push	{r7}
-    476c:	b085      	sub	sp, #20
-    476e:	af00      	add	r7, sp, #0
-    4770:	6078      	str	r0, [r7, #4]
-    4772:	460b      	mov	r3, r1
-    4774:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    4776:	2300      	movs	r3, #0
-    4778:	81fb      	strh	r3, [r7, #14]
- 
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST1_PERIPH(TIMx));
-  assert_param(IS_TIM_OCN_POLARITY(TIM_OCNPolarity));
-    
-  tmpccer = TIMx->CCER;
-    477a:	687b      	ldr	r3, [r7, #4]
-    477c:	8c1b      	ldrh	r3, [r3, #32]
-    477e:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC3NP Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC3NP);
-    4780:	89fb      	ldrh	r3, [r7, #14]
-    4782:	f423 6300 	bic.w	r3, r3, #2048	; 0x800
-    4786:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= (uint16_t)(TIM_OCNPolarity << 8);
-    4788:	887b      	ldrh	r3, [r7, #2]
-    478a:	021b      	lsls	r3, r3, #8
-    478c:	b29a      	uxth	r2, r3
-    478e:	89fb      	ldrh	r3, [r7, #14]
-    4790:	4313      	orrs	r3, r2
-    4792:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    4794:	687b      	ldr	r3, [r7, #4]
-    4796:	89fa      	ldrh	r2, [r7, #14]
-    4798:	841a      	strh	r2, [r3, #32]
-}
-    479a:	bf00      	nop
-    479c:	3714      	adds	r7, #20
-    479e:	46bd      	mov	sp, r7
-    47a0:	bc80      	pop	{r7}
-    47a2:	4770      	bx	lr
-
-000047a4 <TIM_OC4PolarityConfig>:
-  *     @arg TIM_OCPolarity_High: Output Compare active high
-  *     @arg TIM_OCPolarity_Low: Output Compare active low
-  * @retval None
-  */
-void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity)
-{
-    47a4:	b480      	push	{r7}
-    47a6:	b085      	sub	sp, #20
-    47a8:	af00      	add	r7, sp, #0
-    47aa:	6078      	str	r0, [r7, #4]
-    47ac:	460b      	mov	r3, r1
-    47ae:	807b      	strh	r3, [r7, #2]
-  uint16_t tmpccer = 0;
-    47b0:	2300      	movs	r3, #0
-    47b2:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_OC_POLARITY(TIM_OCPolarity));
-  tmpccer = TIMx->CCER;
-    47b4:	687b      	ldr	r3, [r7, #4]
-    47b6:	8c1b      	ldrh	r3, [r3, #32]
-    47b8:	81fb      	strh	r3, [r7, #14]
-  /* Set or Reset the CC4P Bit */
-  tmpccer &= (uint16_t)~((uint16_t)TIM_CCER_CC4P);
-    47ba:	89fb      	ldrh	r3, [r7, #14]
-    47bc:	f423 5300 	bic.w	r3, r3, #8192	; 0x2000
-    47c0:	81fb      	strh	r3, [r7, #14]
-  tmpccer |= (uint16_t)(TIM_OCPolarity << 12);
-    47c2:	887b      	ldrh	r3, [r7, #2]
-    47c4:	031b      	lsls	r3, r3, #12
-    47c6:	b29a      	uxth	r2, r3
-    47c8:	89fb      	ldrh	r3, [r7, #14]
-    47ca:	4313      	orrs	r3, r2
-    47cc:	81fb      	strh	r3, [r7, #14]
-  /* Write to TIMx CCER register */
-  TIMx->CCER = tmpccer;
-    47ce:	687b      	ldr	r3, [r7, #4]
-    47d0:	89fa      	ldrh	r2, [r7, #14]
-    47d2:	841a      	strh	r2, [r3, #32]
-}
-    47d4:	bf00      	nop
-    47d6:	3714      	adds	r7, #20
-    47d8:	46bd      	mov	sp, r7
-    47da:	bc80      	pop	{r7}
-    47dc:	4770      	bx	lr
-
-000047de <TIM_CCxCmd>:
-  * @param  TIM_CCx: specifies the TIM Channel CCxE bit new state.
-  *   This parameter can be: TIM_CCx_Enable or TIM_CCx_Disable. 
-  * @retval None
-  */
-void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx)
-{
-    47de:	b480      	push	{r7}
-    47e0:	b085      	sub	sp, #20
-    47e2:	af00      	add	r7, sp, #0
-    47e4:	6078      	str	r0, [r7, #4]
-    47e6:	460b      	mov	r3, r1
-    47e8:	807b      	strh	r3, [r7, #2]
-    47ea:	4613      	mov	r3, r2
-    47ec:	803b      	strh	r3, [r7, #0]
-  uint16_t tmp = 0;
-    47ee:	2300      	movs	r3, #0
-    47f0:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_CHANNEL(TIM_Channel));
-  assert_param(IS_TIM_CCX(TIM_CCx));
-
-  tmp = CCER_CCE_Set << TIM_Channel;
-    47f2:	887b      	ldrh	r3, [r7, #2]
-    47f4:	2201      	movs	r2, #1
-    47f6:	fa02 f303 	lsl.w	r3, r2, r3
-    47fa:	81fb      	strh	r3, [r7, #14]
-
-  /* Reset the CCxE Bit */
-  TIMx->CCER &= (uint16_t)~ tmp;
-    47fc:	687b      	ldr	r3, [r7, #4]
-    47fe:	8c1b      	ldrh	r3, [r3, #32]
-    4800:	b29a      	uxth	r2, r3
-    4802:	89fb      	ldrh	r3, [r7, #14]
-    4804:	43db      	mvns	r3, r3
-    4806:	b29b      	uxth	r3, r3
-    4808:	4013      	ands	r3, r2
-    480a:	b29a      	uxth	r2, r3
-    480c:	687b      	ldr	r3, [r7, #4]
-    480e:	841a      	strh	r2, [r3, #32]
-
-  /* Set or reset the CCxE Bit */ 
-  TIMx->CCER |=  (uint16_t)(TIM_CCx << TIM_Channel);
-    4810:	687b      	ldr	r3, [r7, #4]
-    4812:	8c1b      	ldrh	r3, [r3, #32]
-    4814:	b29a      	uxth	r2, r3
-    4816:	8839      	ldrh	r1, [r7, #0]
-    4818:	887b      	ldrh	r3, [r7, #2]
-    481a:	fa01 f303 	lsl.w	r3, r1, r3
-    481e:	b29b      	uxth	r3, r3
-    4820:	4313      	orrs	r3, r2
-    4822:	b29a      	uxth	r2, r3
-    4824:	687b      	ldr	r3, [r7, #4]
-    4826:	841a      	strh	r2, [r3, #32]
-}
-    4828:	bf00      	nop
-    482a:	3714      	adds	r7, #20
-    482c:	46bd      	mov	sp, r7
-    482e:	bc80      	pop	{r7}
-    4830:	4770      	bx	lr
-
-00004832 <TIM_CCxNCmd>:
-  * @param  TIM_CCxN: specifies the TIM Channel CCxNE bit new state.
-  *   This parameter can be: TIM_CCxN_Enable or TIM_CCxN_Disable. 
-  * @retval None
-  */
-void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN)
-{
-    4832:	b480      	push	{r7}
-    4834:	b085      	sub	sp, #20
-    4836:	af00      	add	r7, sp, #0
-    4838:	6078      	str	r0, [r7, #4]
-    483a:	460b      	mov	r3, r1
-    483c:	807b      	strh	r3, [r7, #2]
-    483e:	4613      	mov	r3, r2
-    4840:	803b      	strh	r3, [r7, #0]
-  uint16_t tmp = 0;
-    4842:	2300      	movs	r3, #0
-    4844:	81fb      	strh	r3, [r7, #14]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST2_PERIPH(TIMx));
-  assert_param(IS_TIM_COMPLEMENTARY_CHANNEL(TIM_Channel));
-  assert_param(IS_TIM_CCXN(TIM_CCxN));
-
-  tmp = CCER_CCNE_Set << TIM_Channel;
-    4846:	887b      	ldrh	r3, [r7, #2]
-    4848:	2204      	movs	r2, #4
-    484a:	fa02 f303 	lsl.w	r3, r2, r3
-    484e:	81fb      	strh	r3, [r7, #14]
-
-  /* Reset the CCxNE Bit */
-  TIMx->CCER &= (uint16_t) ~tmp;
-    4850:	687b      	ldr	r3, [r7, #4]
-    4852:	8c1b      	ldrh	r3, [r3, #32]
-    4854:	b29a      	uxth	r2, r3
-    4856:	89fb      	ldrh	r3, [r7, #14]
-    4858:	43db      	mvns	r3, r3
-    485a:	b29b      	uxth	r3, r3
-    485c:	4013      	ands	r3, r2
-    485e:	b29a      	uxth	r2, r3
-    4860:	687b      	ldr	r3, [r7, #4]
-    4862:	841a      	strh	r2, [r3, #32]
-
-  /* Set or reset the CCxNE Bit */ 
-  TIMx->CCER |=  (uint16_t)(TIM_CCxN << TIM_Channel);
-    4864:	687b      	ldr	r3, [r7, #4]
-    4866:	8c1b      	ldrh	r3, [r3, #32]
-    4868:	b29a      	uxth	r2, r3
-    486a:	8839      	ldrh	r1, [r7, #0]
-    486c:	887b      	ldrh	r3, [r7, #2]
-    486e:	fa01 f303 	lsl.w	r3, r1, r3
-    4872:	b29b      	uxth	r3, r3
-    4874:	4313      	orrs	r3, r2
-    4876:	b29a      	uxth	r2, r3
-    4878:	687b      	ldr	r3, [r7, #4]
-    487a:	841a      	strh	r2, [r3, #32]
-}
-    487c:	bf00      	nop
-    487e:	3714      	adds	r7, #20
-    4880:	46bd      	mov	sp, r7
-    4882:	bc80      	pop	{r7}
-    4884:	4770      	bx	lr
-
-00004886 <TIM_SelectOCxM>:
-  *     @arg TIM_ForcedAction_Active
-  *     @arg TIM_ForcedAction_InActive
-  * @retval None
-  */
-void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode)
-{
-    4886:	b480      	push	{r7}
-    4888:	b085      	sub	sp, #20
-    488a:	af00      	add	r7, sp, #0
-    488c:	6078      	str	r0, [r7, #4]
-    488e:	460b      	mov	r3, r1
-    4890:	807b      	strh	r3, [r7, #2]
-    4892:	4613      	mov	r3, r2
-    4894:	803b      	strh	r3, [r7, #0]
-  uint32_t tmp = 0;
-    4896:	2300      	movs	r3, #0
-    4898:	60fb      	str	r3, [r7, #12]
-  uint16_t tmp1 = 0;
-    489a:	2300      	movs	r3, #0
-    489c:	817b      	strh	r3, [r7, #10]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_CHANNEL(TIM_Channel));
-  assert_param(IS_TIM_OCM(TIM_OCMode));
-
-  tmp = (uint32_t) TIMx;
-    489e:	687b      	ldr	r3, [r7, #4]
-    48a0:	60fb      	str	r3, [r7, #12]
-  tmp += CCMR_Offset;
-    48a2:	68fb      	ldr	r3, [r7, #12]
-    48a4:	3318      	adds	r3, #24
-    48a6:	60fb      	str	r3, [r7, #12]
-
-  tmp1 = CCER_CCE_Set << (uint16_t)TIM_Channel;
-    48a8:	887b      	ldrh	r3, [r7, #2]
-    48aa:	2201      	movs	r2, #1
-    48ac:	fa02 f303 	lsl.w	r3, r2, r3
-    48b0:	817b      	strh	r3, [r7, #10]
-
-  /* Disable the Channel: Reset the CCxE Bit */
-  TIMx->CCER &= (uint16_t) ~tmp1;
-    48b2:	687b      	ldr	r3, [r7, #4]
-    48b4:	8c1b      	ldrh	r3, [r3, #32]
-    48b6:	b29a      	uxth	r2, r3
-    48b8:	897b      	ldrh	r3, [r7, #10]
-    48ba:	43db      	mvns	r3, r3
-    48bc:	b29b      	uxth	r3, r3
-    48be:	4013      	ands	r3, r2
-    48c0:	b29a      	uxth	r2, r3
-    48c2:	687b      	ldr	r3, [r7, #4]
-    48c4:	841a      	strh	r2, [r3, #32]
-
-  if((TIM_Channel == TIM_Channel_1) ||(TIM_Channel == TIM_Channel_3))
-    48c6:	887b      	ldrh	r3, [r7, #2]
-    48c8:	2b00      	cmp	r3, #0
-    48ca:	d002      	beq.n	48d2 <TIM_SelectOCxM+0x4c>
-    48cc:	887b      	ldrh	r3, [r7, #2]
-    48ce:	2b08      	cmp	r3, #8
-    48d0:	d113      	bne.n	48fa <TIM_SelectOCxM+0x74>
-  {
-    tmp += (TIM_Channel>>1);
-    48d2:	887b      	ldrh	r3, [r7, #2]
-    48d4:	085b      	lsrs	r3, r3, #1
-    48d6:	b29b      	uxth	r3, r3
-    48d8:	461a      	mov	r2, r3
-    48da:	68fb      	ldr	r3, [r7, #12]
-    48dc:	4413      	add	r3, r2
-    48de:	60fb      	str	r3, [r7, #12]
-
-    /* Reset the OCxM bits in the CCMRx register */
-    *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC1M);
-    48e0:	68fb      	ldr	r3, [r7, #12]
-    48e2:	681a      	ldr	r2, [r3, #0]
-    48e4:	68fb      	ldr	r3, [r7, #12]
-    48e6:	f022 0270 	bic.w	r2, r2, #112	; 0x70
-    48ea:	601a      	str	r2, [r3, #0]
-   
-    /* Configure the OCxM bits in the CCMRx register */
-    *(__IO uint32_t *) tmp |= TIM_OCMode;
-    48ec:	68fb      	ldr	r3, [r7, #12]
-    48ee:	6819      	ldr	r1, [r3, #0]
-    48f0:	883a      	ldrh	r2, [r7, #0]
-    48f2:	68fb      	ldr	r3, [r7, #12]
-    48f4:	430a      	orrs	r2, r1
-    48f6:	601a      	str	r2, [r3, #0]
-    48f8:	e018      	b.n	492c <TIM_SelectOCxM+0xa6>
-  }
-  else
-  {
-    tmp += (uint16_t)(TIM_Channel - (uint16_t)4)>> (uint16_t)1;
-    48fa:	887b      	ldrh	r3, [r7, #2]
-    48fc:	3b04      	subs	r3, #4
-    48fe:	b29b      	uxth	r3, r3
-    4900:	085b      	lsrs	r3, r3, #1
-    4902:	b29b      	uxth	r3, r3
-    4904:	461a      	mov	r2, r3
-    4906:	68fb      	ldr	r3, [r7, #12]
-    4908:	4413      	add	r3, r2
-    490a:	60fb      	str	r3, [r7, #12]
-
-    /* Reset the OCxM bits in the CCMRx register */
-    *(__IO uint32_t *) tmp &= (uint32_t)~((uint32_t)TIM_CCMR1_OC2M);
-    490c:	68fb      	ldr	r3, [r7, #12]
-    490e:	681a      	ldr	r2, [r3, #0]
-    4910:	68fb      	ldr	r3, [r7, #12]
-    4912:	f422 42e0 	bic.w	r2, r2, #28672	; 0x7000
-    4916:	601a      	str	r2, [r3, #0]
-    
-    /* Configure the OCxM bits in the CCMRx register */
-    *(__IO uint32_t *) tmp |= (uint16_t)(TIM_OCMode << 8);
-    4918:	68fb      	ldr	r3, [r7, #12]
-    491a:	681a      	ldr	r2, [r3, #0]
-    491c:	883b      	ldrh	r3, [r7, #0]
-    491e:	021b      	lsls	r3, r3, #8
-    4920:	b29b      	uxth	r3, r3
-    4922:	4619      	mov	r1, r3
-    4924:	68fb      	ldr	r3, [r7, #12]
-    4926:	430a      	orrs	r2, r1
-    4928:	601a      	str	r2, [r3, #0]
-  }
-}
-    492a:	bf00      	nop
-    492c:	bf00      	nop
-    492e:	3714      	adds	r7, #20
-    4930:	46bd      	mov	sp, r7
-    4932:	bc80      	pop	{r7}
-    4934:	4770      	bx	lr
-
-00004936 <TIM_UpdateDisableConfig>:
-  * @param  NewState: new state of the TIMx UDIS bit
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_UpdateDisableConfig(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    4936:	b480      	push	{r7}
-    4938:	b083      	sub	sp, #12
-    493a:	af00      	add	r7, sp, #0
-    493c:	6078      	str	r0, [r7, #4]
-    493e:	460b      	mov	r3, r1
-    4940:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    4942:	78fb      	ldrb	r3, [r7, #3]
-    4944:	2b00      	cmp	r3, #0
-    4946:	d008      	beq.n	495a <TIM_UpdateDisableConfig+0x24>
-  {
-    /* Set the Update Disable Bit */
-    TIMx->CR1 |= TIM_CR1_UDIS;
-    4948:	687b      	ldr	r3, [r7, #4]
-    494a:	881b      	ldrh	r3, [r3, #0]
-    494c:	b29b      	uxth	r3, r3
-    494e:	f043 0302 	orr.w	r3, r3, #2
-    4952:	b29a      	uxth	r2, r3
-    4954:	687b      	ldr	r3, [r7, #4]
-    4956:	801a      	strh	r2, [r3, #0]
-  else
-  {
-    /* Reset the Update Disable Bit */
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS);
-  }
-}
-    4958:	e007      	b.n	496a <TIM_UpdateDisableConfig+0x34>
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_UDIS);
-    495a:	687b      	ldr	r3, [r7, #4]
-    495c:	881b      	ldrh	r3, [r3, #0]
-    495e:	b29b      	uxth	r3, r3
-    4960:	f023 0302 	bic.w	r3, r3, #2
-    4964:	b29a      	uxth	r2, r3
-    4966:	687b      	ldr	r3, [r7, #4]
-    4968:	801a      	strh	r2, [r3, #0]
-}
-    496a:	bf00      	nop
-    496c:	370c      	adds	r7, #12
-    496e:	46bd      	mov	sp, r7
-    4970:	bc80      	pop	{r7}
-    4972:	4770      	bx	lr
-
-00004974 <TIM_UpdateRequestConfig>:
-                                       through the slave mode controller.
-  *     @arg TIM_UpdateSource_Global: Source of update is counter overflow/underflow.
-  * @retval None
-  */
-void TIM_UpdateRequestConfig(TIM_TypeDef* TIMx, uint16_t TIM_UpdateSource)
-{
-    4974:	b480      	push	{r7}
-    4976:	b083      	sub	sp, #12
-    4978:	af00      	add	r7, sp, #0
-    497a:	6078      	str	r0, [r7, #4]
-    497c:	460b      	mov	r3, r1
-    497e:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_UPDATE_SOURCE(TIM_UpdateSource));
-  if (TIM_UpdateSource != TIM_UpdateSource_Global)
-    4980:	887b      	ldrh	r3, [r7, #2]
-    4982:	2b00      	cmp	r3, #0
-    4984:	d008      	beq.n	4998 <TIM_UpdateRequestConfig+0x24>
-  {
-    /* Set the URS Bit */
-    TIMx->CR1 |= TIM_CR1_URS;
-    4986:	687b      	ldr	r3, [r7, #4]
-    4988:	881b      	ldrh	r3, [r3, #0]
-    498a:	b29b      	uxth	r3, r3
-    498c:	f043 0304 	orr.w	r3, r3, #4
-    4990:	b29a      	uxth	r2, r3
-    4992:	687b      	ldr	r3, [r7, #4]
-    4994:	801a      	strh	r2, [r3, #0]
-  else
-  {
-    /* Reset the URS Bit */
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS);
-  }
-}
-    4996:	e007      	b.n	49a8 <TIM_UpdateRequestConfig+0x34>
-    TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_URS);
-    4998:	687b      	ldr	r3, [r7, #4]
-    499a:	881b      	ldrh	r3, [r3, #0]
-    499c:	b29b      	uxth	r3, r3
-    499e:	f023 0304 	bic.w	r3, r3, #4
-    49a2:	b29a      	uxth	r2, r3
-    49a4:	687b      	ldr	r3, [r7, #4]
-    49a6:	801a      	strh	r2, [r3, #0]
-}
-    49a8:	bf00      	nop
-    49aa:	370c      	adds	r7, #12
-    49ac:	46bd      	mov	sp, r7
-    49ae:	bc80      	pop	{r7}
-    49b0:	4770      	bx	lr
-
-000049b2 <TIM_SelectHallSensor>:
-  * @param  NewState: new state of the TIMx Hall sensor interface.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void TIM_SelectHallSensor(TIM_TypeDef* TIMx, FunctionalState NewState)
-{
-    49b2:	b480      	push	{r7}
-    49b4:	b083      	sub	sp, #12
-    49b6:	af00      	add	r7, sp, #0
-    49b8:	6078      	str	r0, [r7, #4]
-    49ba:	460b      	mov	r3, r1
-    49bc:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    49be:	78fb      	ldrb	r3, [r7, #3]
-    49c0:	2b00      	cmp	r3, #0
-    49c2:	d008      	beq.n	49d6 <TIM_SelectHallSensor+0x24>
-  {
-    /* Set the TI1S Bit */
-    TIMx->CR2 |= TIM_CR2_TI1S;
-    49c4:	687b      	ldr	r3, [r7, #4]
-    49c6:	889b      	ldrh	r3, [r3, #4]
-    49c8:	b29b      	uxth	r3, r3
-    49ca:	f043 0380 	orr.w	r3, r3, #128	; 0x80
-    49ce:	b29a      	uxth	r2, r3
-    49d0:	687b      	ldr	r3, [r7, #4]
-    49d2:	809a      	strh	r2, [r3, #4]
-  else
-  {
-    /* Reset the TI1S Bit */
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S);
-  }
-}
-    49d4:	e007      	b.n	49e6 <TIM_SelectHallSensor+0x34>
-    TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_TI1S);
-    49d6:	687b      	ldr	r3, [r7, #4]
-    49d8:	889b      	ldrh	r3, [r3, #4]
-    49da:	b29b      	uxth	r3, r3
-    49dc:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    49e0:	b29a      	uxth	r2, r3
-    49e2:	687b      	ldr	r3, [r7, #4]
-    49e4:	809a      	strh	r2, [r3, #4]
-}
-    49e6:	bf00      	nop
-    49e8:	370c      	adds	r7, #12
-    49ea:	46bd      	mov	sp, r7
-    49ec:	bc80      	pop	{r7}
-    49ee:	4770      	bx	lr
-
-000049f0 <TIM_SelectOnePulseMode>:
-  *     @arg TIM_OPMode_Single
-  *     @arg TIM_OPMode_Repetitive
-  * @retval None
-  */
-void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode)
-{
-    49f0:	b480      	push	{r7}
-    49f2:	b083      	sub	sp, #12
-    49f4:	af00      	add	r7, sp, #0
-    49f6:	6078      	str	r0, [r7, #4]
-    49f8:	460b      	mov	r3, r1
-    49fa:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_OPM_MODE(TIM_OPMode));
-  /* Reset the OPM Bit */
-  TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_OPM);
-    49fc:	687b      	ldr	r3, [r7, #4]
-    49fe:	881b      	ldrh	r3, [r3, #0]
-    4a00:	b29b      	uxth	r3, r3
-    4a02:	f023 0308 	bic.w	r3, r3, #8
-    4a06:	b29a      	uxth	r2, r3
-    4a08:	687b      	ldr	r3, [r7, #4]
-    4a0a:	801a      	strh	r2, [r3, #0]
-  /* Configure the OPM Mode */
-  TIMx->CR1 |= TIM_OPMode;
-    4a0c:	687b      	ldr	r3, [r7, #4]
-    4a0e:	881b      	ldrh	r3, [r3, #0]
-    4a10:	b29a      	uxth	r2, r3
-    4a12:	887b      	ldrh	r3, [r7, #2]
-    4a14:	4313      	orrs	r3, r2
-    4a16:	b29a      	uxth	r2, r3
-    4a18:	687b      	ldr	r3, [r7, #4]
-    4a1a:	801a      	strh	r2, [r3, #0]
-}
-    4a1c:	bf00      	nop
-    4a1e:	370c      	adds	r7, #12
-    4a20:	46bd      	mov	sp, r7
-    4a22:	bc80      	pop	{r7}
-    4a24:	4770      	bx	lr
-
-00004a26 <TIM_SelectOutputTrigger>:
-  *     @arg TIM_TRGOSource_OC4Ref: OC4REF signal is used as the trigger output (TRGO).
-  *
-  * @retval None
-  */
-void TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource)
-{
-    4a26:	b480      	push	{r7}
-    4a28:	b083      	sub	sp, #12
-    4a2a:	af00      	add	r7, sp, #0
-    4a2c:	6078      	str	r0, [r7, #4]
-    4a2e:	460b      	mov	r3, r1
-    4a30:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST7_PERIPH(TIMx));
-  assert_param(IS_TIM_TRGO_SOURCE(TIM_TRGOSource));
-  /* Reset the MMS Bits */
-  TIMx->CR2 &= (uint16_t)~((uint16_t)TIM_CR2_MMS);
-    4a32:	687b      	ldr	r3, [r7, #4]
-    4a34:	889b      	ldrh	r3, [r3, #4]
-    4a36:	b29b      	uxth	r3, r3
-    4a38:	f023 0370 	bic.w	r3, r3, #112	; 0x70
-    4a3c:	b29a      	uxth	r2, r3
-    4a3e:	687b      	ldr	r3, [r7, #4]
-    4a40:	809a      	strh	r2, [r3, #4]
-  /* Select the TRGO source */
-  TIMx->CR2 |=  TIM_TRGOSource;
-    4a42:	687b      	ldr	r3, [r7, #4]
-    4a44:	889b      	ldrh	r3, [r3, #4]
-    4a46:	b29a      	uxth	r2, r3
-    4a48:	887b      	ldrh	r3, [r7, #2]
-    4a4a:	4313      	orrs	r3, r2
-    4a4c:	b29a      	uxth	r2, r3
-    4a4e:	687b      	ldr	r3, [r7, #4]
-    4a50:	809a      	strh	r2, [r3, #4]
-}
-    4a52:	bf00      	nop
-    4a54:	370c      	adds	r7, #12
-    4a56:	46bd      	mov	sp, r7
-    4a58:	bc80      	pop	{r7}
-    4a5a:	4770      	bx	lr
-
-00004a5c <TIM_SelectSlaveMode>:
-  *     @arg TIM_SlaveMode_Trigger:   The counter starts at a rising edge of the trigger TRGI.
-  *     @arg TIM_SlaveMode_External1: Rising edges of the selected trigger (TRGI) clock the counter.
-  * @retval None
-  */
-void TIM_SelectSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_SlaveMode)
-{
-    4a5c:	b480      	push	{r7}
-    4a5e:	b083      	sub	sp, #12
-    4a60:	af00      	add	r7, sp, #0
-    4a62:	6078      	str	r0, [r7, #4]
-    4a64:	460b      	mov	r3, r1
-    4a66:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_SLAVE_MODE(TIM_SlaveMode));
- /* Reset the SMS Bits */
-  TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_SMS);
-    4a68:	687b      	ldr	r3, [r7, #4]
-    4a6a:	891b      	ldrh	r3, [r3, #8]
-    4a6c:	b29b      	uxth	r3, r3
-    4a6e:	f023 0307 	bic.w	r3, r3, #7
-    4a72:	b29a      	uxth	r2, r3
-    4a74:	687b      	ldr	r3, [r7, #4]
-    4a76:	811a      	strh	r2, [r3, #8]
-  /* Select the Slave Mode */
-  TIMx->SMCR |= TIM_SlaveMode;
-    4a78:	687b      	ldr	r3, [r7, #4]
-    4a7a:	891b      	ldrh	r3, [r3, #8]
-    4a7c:	b29a      	uxth	r2, r3
-    4a7e:	887b      	ldrh	r3, [r7, #2]
-    4a80:	4313      	orrs	r3, r2
-    4a82:	b29a      	uxth	r2, r3
-    4a84:	687b      	ldr	r3, [r7, #4]
-    4a86:	811a      	strh	r2, [r3, #8]
-}
-    4a88:	bf00      	nop
-    4a8a:	370c      	adds	r7, #12
-    4a8c:	46bd      	mov	sp, r7
-    4a8e:	bc80      	pop	{r7}
-    4a90:	4770      	bx	lr
-
-00004a92 <TIM_SelectMasterSlaveMode>:
-  *                                      and its slaves (through TRGO).
-  *     @arg TIM_MasterSlaveMode_Disable: No action
-  * @retval None
-  */
-void TIM_SelectMasterSlaveMode(TIM_TypeDef* TIMx, uint16_t TIM_MasterSlaveMode)
-{
-    4a92:	b480      	push	{r7}
-    4a94:	b083      	sub	sp, #12
-    4a96:	af00      	add	r7, sp, #0
-    4a98:	6078      	str	r0, [r7, #4]
-    4a9a:	460b      	mov	r3, r1
-    4a9c:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_MSM_STATE(TIM_MasterSlaveMode));
-  /* Reset the MSM Bit */
-  TIMx->SMCR &= (uint16_t)~((uint16_t)TIM_SMCR_MSM);
-    4a9e:	687b      	ldr	r3, [r7, #4]
-    4aa0:	891b      	ldrh	r3, [r3, #8]
-    4aa2:	b29b      	uxth	r3, r3
-    4aa4:	f023 0380 	bic.w	r3, r3, #128	; 0x80
-    4aa8:	b29a      	uxth	r2, r3
-    4aaa:	687b      	ldr	r3, [r7, #4]
-    4aac:	811a      	strh	r2, [r3, #8]
-  
-  /* Set or Reset the MSM Bit */
-  TIMx->SMCR |= TIM_MasterSlaveMode;
-    4aae:	687b      	ldr	r3, [r7, #4]
-    4ab0:	891b      	ldrh	r3, [r3, #8]
-    4ab2:	b29a      	uxth	r2, r3
-    4ab4:	887b      	ldrh	r3, [r7, #2]
-    4ab6:	4313      	orrs	r3, r2
-    4ab8:	b29a      	uxth	r2, r3
-    4aba:	687b      	ldr	r3, [r7, #4]
-    4abc:	811a      	strh	r2, [r3, #8]
-}
-    4abe:	bf00      	nop
-    4ac0:	370c      	adds	r7, #12
-    4ac2:	46bd      	mov	sp, r7
-    4ac4:	bc80      	pop	{r7}
-    4ac6:	4770      	bx	lr
-
-00004ac8 <TIM_SetCounter>:
-  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.
-  * @param  Counter: specifies the Counter register new value.
-  * @retval None
-  */
-void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter)
-{
-    4ac8:	b480      	push	{r7}
-    4aca:	b083      	sub	sp, #12
-    4acc:	af00      	add	r7, sp, #0
-    4ace:	6078      	str	r0, [r7, #4]
-    4ad0:	460b      	mov	r3, r1
-    4ad2:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  /* Set the Counter Register value */
-  TIMx->CNT = Counter;
-    4ad4:	687b      	ldr	r3, [r7, #4]
-    4ad6:	887a      	ldrh	r2, [r7, #2]
-    4ad8:	849a      	strh	r2, [r3, #36]	; 0x24
-}
-    4ada:	bf00      	nop
-    4adc:	370c      	adds	r7, #12
-    4ade:	46bd      	mov	sp, r7
-    4ae0:	bc80      	pop	{r7}
-    4ae2:	4770      	bx	lr
-
-00004ae4 <TIM_SetAutoreload>:
-  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.
-  * @param  Autoreload: specifies the Autoreload register new value.
-  * @retval None
-  */
-void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload)
-{
-    4ae4:	b480      	push	{r7}
-    4ae6:	b083      	sub	sp, #12
-    4ae8:	af00      	add	r7, sp, #0
-    4aea:	6078      	str	r0, [r7, #4]
-    4aec:	460b      	mov	r3, r1
-    4aee:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  /* Set the Autoreload Register value */
-  TIMx->ARR = Autoreload;
-    4af0:	687b      	ldr	r3, [r7, #4]
-    4af2:	887a      	ldrh	r2, [r7, #2]
-    4af4:	859a      	strh	r2, [r3, #44]	; 0x2c
-}
-    4af6:	bf00      	nop
-    4af8:	370c      	adds	r7, #12
-    4afa:	46bd      	mov	sp, r7
-    4afc:	bc80      	pop	{r7}
-    4afe:	4770      	bx	lr
-
-00004b00 <TIM_SetCompare1>:
-  * @param  TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
-  * @param  Compare1: specifies the Capture Compare1 register new value.
-  * @retval None
-  */
-void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1)
-{
-    4b00:	b480      	push	{r7}
-    4b02:	b083      	sub	sp, #12
-    4b04:	af00      	add	r7, sp, #0
-    4b06:	6078      	str	r0, [r7, #4]
-    4b08:	460b      	mov	r3, r1
-    4b0a:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  /* Set the Capture Compare1 Register value */
-  TIMx->CCR1 = Compare1;
-    4b0c:	687b      	ldr	r3, [r7, #4]
-    4b0e:	887a      	ldrh	r2, [r7, #2]
-    4b10:	869a      	strh	r2, [r3, #52]	; 0x34
-}
-    4b12:	bf00      	nop
-    4b14:	370c      	adds	r7, #12
-    4b16:	46bd      	mov	sp, r7
-    4b18:	bc80      	pop	{r7}
-    4b1a:	4770      	bx	lr
-
-00004b1c <TIM_SetCompare2>:
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
-  * @param  Compare2: specifies the Capture Compare2 register new value.
-  * @retval None
-  */
-void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2)
-{
-    4b1c:	b480      	push	{r7}
-    4b1e:	b083      	sub	sp, #12
-    4b20:	af00      	add	r7, sp, #0
-    4b22:	6078      	str	r0, [r7, #4]
-    4b24:	460b      	mov	r3, r1
-    4b26:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  /* Set the Capture Compare2 Register value */
-  TIMx->CCR2 = Compare2;
-    4b28:	687b      	ldr	r3, [r7, #4]
-    4b2a:	887a      	ldrh	r2, [r7, #2]
-    4b2c:	871a      	strh	r2, [r3, #56]	; 0x38
-}
-    4b2e:	bf00      	nop
-    4b30:	370c      	adds	r7, #12
-    4b32:	46bd      	mov	sp, r7
-    4b34:	bc80      	pop	{r7}
-    4b36:	4770      	bx	lr
-
-00004b38 <TIM_SetCompare3>:
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
-  * @param  Compare3: specifies the Capture Compare3 register new value.
-  * @retval None
-  */
-void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3)
-{
-    4b38:	b480      	push	{r7}
-    4b3a:	b083      	sub	sp, #12
-    4b3c:	af00      	add	r7, sp, #0
-    4b3e:	6078      	str	r0, [r7, #4]
-    4b40:	460b      	mov	r3, r1
-    4b42:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  /* Set the Capture Compare3 Register value */
-  TIMx->CCR3 = Compare3;
-    4b44:	687b      	ldr	r3, [r7, #4]
-    4b46:	887a      	ldrh	r2, [r7, #2]
-    4b48:	879a      	strh	r2, [r3, #60]	; 0x3c
-}
-    4b4a:	bf00      	nop
-    4b4c:	370c      	adds	r7, #12
-    4b4e:	46bd      	mov	sp, r7
-    4b50:	bc80      	pop	{r7}
-    4b52:	4770      	bx	lr
-
-00004b54 <TIM_SetCompare4>:
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
-  * @param  Compare4: specifies the Capture Compare4 register new value.
-  * @retval None
-  */
-void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4)
-{
-    4b54:	b480      	push	{r7}
-    4b56:	b083      	sub	sp, #12
-    4b58:	af00      	add	r7, sp, #0
-    4b5a:	6078      	str	r0, [r7, #4]
-    4b5c:	460b      	mov	r3, r1
-    4b5e:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  /* Set the Capture Compare4 Register value */
-  TIMx->CCR4 = Compare4;
-    4b60:	687b      	ldr	r3, [r7, #4]
-    4b62:	887a      	ldrh	r2, [r7, #2]
-    4b64:	f8a3 2040 	strh.w	r2, [r3, #64]	; 0x40
-}
-    4b68:	bf00      	nop
-    4b6a:	370c      	adds	r7, #12
-    4b6c:	46bd      	mov	sp, r7
-    4b6e:	bc80      	pop	{r7}
-    4b70:	4770      	bx	lr
-
-00004b72 <TIM_SetIC1Prescaler>:
-  *     @arg TIM_ICPSC_DIV4: capture is done once every 4 events
-  *     @arg TIM_ICPSC_DIV8: capture is done once every 8 events
-  * @retval None
-  */
-void TIM_SetIC1Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
-{
-    4b72:	b480      	push	{r7}
-    4b74:	b083      	sub	sp, #12
-    4b76:	af00      	add	r7, sp, #0
-    4b78:	6078      	str	r0, [r7, #4]
-    4b7a:	460b      	mov	r3, r1
-    4b7c:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
-  /* Reset the IC1PSC Bits */
-  TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC1PSC);
-    4b7e:	687b      	ldr	r3, [r7, #4]
-    4b80:	8b1b      	ldrh	r3, [r3, #24]
-    4b82:	b29b      	uxth	r3, r3
-    4b84:	f023 030c 	bic.w	r3, r3, #12
-    4b88:	b29a      	uxth	r2, r3
-    4b8a:	687b      	ldr	r3, [r7, #4]
-    4b8c:	831a      	strh	r2, [r3, #24]
-  /* Set the IC1PSC value */
-  TIMx->CCMR1 |= TIM_ICPSC;
-    4b8e:	687b      	ldr	r3, [r7, #4]
-    4b90:	8b1b      	ldrh	r3, [r3, #24]
-    4b92:	b29a      	uxth	r2, r3
-    4b94:	887b      	ldrh	r3, [r7, #2]
-    4b96:	4313      	orrs	r3, r2
-    4b98:	b29a      	uxth	r2, r3
-    4b9a:	687b      	ldr	r3, [r7, #4]
-    4b9c:	831a      	strh	r2, [r3, #24]
-}
-    4b9e:	bf00      	nop
-    4ba0:	370c      	adds	r7, #12
-    4ba2:	46bd      	mov	sp, r7
-    4ba4:	bc80      	pop	{r7}
-    4ba6:	4770      	bx	lr
-
-00004ba8 <TIM_SetIC2Prescaler>:
-  *     @arg TIM_ICPSC_DIV4: capture is done once every 4 events
-  *     @arg TIM_ICPSC_DIV8: capture is done once every 8 events
-  * @retval None
-  */
-void TIM_SetIC2Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
-{
-    4ba8:	b480      	push	{r7}
-    4baa:	b083      	sub	sp, #12
-    4bac:	af00      	add	r7, sp, #0
-    4bae:	6078      	str	r0, [r7, #4]
-    4bb0:	460b      	mov	r3, r1
-    4bb2:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
-  /* Reset the IC2PSC Bits */
-  TIMx->CCMR1 &= (uint16_t)~((uint16_t)TIM_CCMR1_IC2PSC);
-    4bb4:	687b      	ldr	r3, [r7, #4]
-    4bb6:	8b1b      	ldrh	r3, [r3, #24]
-    4bb8:	b29b      	uxth	r3, r3
-    4bba:	f423 6340 	bic.w	r3, r3, #3072	; 0xc00
-    4bbe:	b29a      	uxth	r2, r3
-    4bc0:	687b      	ldr	r3, [r7, #4]
-    4bc2:	831a      	strh	r2, [r3, #24]
-  /* Set the IC2PSC value */
-  TIMx->CCMR1 |= (uint16_t)(TIM_ICPSC << 8);
-    4bc4:	687b      	ldr	r3, [r7, #4]
-    4bc6:	8b1b      	ldrh	r3, [r3, #24]
-    4bc8:	b29a      	uxth	r2, r3
-    4bca:	887b      	ldrh	r3, [r7, #2]
-    4bcc:	021b      	lsls	r3, r3, #8
-    4bce:	b29b      	uxth	r3, r3
-    4bd0:	4313      	orrs	r3, r2
-    4bd2:	b29a      	uxth	r2, r3
-    4bd4:	687b      	ldr	r3, [r7, #4]
-    4bd6:	831a      	strh	r2, [r3, #24]
-}
-    4bd8:	bf00      	nop
-    4bda:	370c      	adds	r7, #12
-    4bdc:	46bd      	mov	sp, r7
-    4bde:	bc80      	pop	{r7}
-    4be0:	4770      	bx	lr
-
-00004be2 <TIM_SetIC3Prescaler>:
-  *     @arg TIM_ICPSC_DIV4: capture is done once every 4 events
-  *     @arg TIM_ICPSC_DIV8: capture is done once every 8 events
-  * @retval None
-  */
-void TIM_SetIC3Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
-{
-    4be2:	b480      	push	{r7}
-    4be4:	b083      	sub	sp, #12
-    4be6:	af00      	add	r7, sp, #0
-    4be8:	6078      	str	r0, [r7, #4]
-    4bea:	460b      	mov	r3, r1
-    4bec:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
-  /* Reset the IC3PSC Bits */
-  TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC3PSC);
-    4bee:	687b      	ldr	r3, [r7, #4]
-    4bf0:	8b9b      	ldrh	r3, [r3, #28]
-    4bf2:	b29b      	uxth	r3, r3
-    4bf4:	f023 030c 	bic.w	r3, r3, #12
-    4bf8:	b29a      	uxth	r2, r3
-    4bfa:	687b      	ldr	r3, [r7, #4]
-    4bfc:	839a      	strh	r2, [r3, #28]
-  /* Set the IC3PSC value */
-  TIMx->CCMR2 |= TIM_ICPSC;
-    4bfe:	687b      	ldr	r3, [r7, #4]
-    4c00:	8b9b      	ldrh	r3, [r3, #28]
-    4c02:	b29a      	uxth	r2, r3
-    4c04:	887b      	ldrh	r3, [r7, #2]
-    4c06:	4313      	orrs	r3, r2
-    4c08:	b29a      	uxth	r2, r3
-    4c0a:	687b      	ldr	r3, [r7, #4]
-    4c0c:	839a      	strh	r2, [r3, #28]
-}
-    4c0e:	bf00      	nop
-    4c10:	370c      	adds	r7, #12
-    4c12:	46bd      	mov	sp, r7
-    4c14:	bc80      	pop	{r7}
-    4c16:	4770      	bx	lr
-
-00004c18 <TIM_SetIC4Prescaler>:
-  *     @arg TIM_ICPSC_DIV4: capture is done once every 4 events
-  *     @arg TIM_ICPSC_DIV8: capture is done once every 8 events
-  * @retval None
-  */
-void TIM_SetIC4Prescaler(TIM_TypeDef* TIMx, uint16_t TIM_ICPSC)
-{  
-    4c18:	b480      	push	{r7}
-    4c1a:	b083      	sub	sp, #12
-    4c1c:	af00      	add	r7, sp, #0
-    4c1e:	6078      	str	r0, [r7, #4]
-    4c20:	460b      	mov	r3, r1
-    4c22:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  assert_param(IS_TIM_IC_PRESCALER(TIM_ICPSC));
-  /* Reset the IC4PSC Bits */
-  TIMx->CCMR2 &= (uint16_t)~((uint16_t)TIM_CCMR2_IC4PSC);
-    4c24:	687b      	ldr	r3, [r7, #4]
-    4c26:	8b9b      	ldrh	r3, [r3, #28]
-    4c28:	b29b      	uxth	r3, r3
-    4c2a:	f423 6340 	bic.w	r3, r3, #3072	; 0xc00
-    4c2e:	b29a      	uxth	r2, r3
-    4c30:	687b      	ldr	r3, [r7, #4]
-    4c32:	839a      	strh	r2, [r3, #28]
-  /* Set the IC4PSC value */
-  TIMx->CCMR2 |= (uint16_t)(TIM_ICPSC << 8);
-    4c34:	687b      	ldr	r3, [r7, #4]
-    4c36:	8b9b      	ldrh	r3, [r3, #28]
-    4c38:	b29a      	uxth	r2, r3
-    4c3a:	887b      	ldrh	r3, [r7, #2]
-    4c3c:	021b      	lsls	r3, r3, #8
-    4c3e:	b29b      	uxth	r3, r3
-    4c40:	4313      	orrs	r3, r2
-    4c42:	b29a      	uxth	r2, r3
-    4c44:	687b      	ldr	r3, [r7, #4]
-    4c46:	839a      	strh	r2, [r3, #28]
-}
-    4c48:	bf00      	nop
-    4c4a:	370c      	adds	r7, #12
-    4c4c:	46bd      	mov	sp, r7
-    4c4e:	bc80      	pop	{r7}
-    4c50:	4770      	bx	lr
-
-00004c52 <TIM_SetClockDivision>:
-  *     @arg TIM_CKD_DIV2: TDTS = 2*Tck_tim
-  *     @arg TIM_CKD_DIV4: TDTS = 4*Tck_tim
-  * @retval None
-  */
-void TIM_SetClockDivision(TIM_TypeDef* TIMx, uint16_t TIM_CKD)
-{
-    4c52:	b480      	push	{r7}
-    4c54:	b083      	sub	sp, #12
-    4c56:	af00      	add	r7, sp, #0
-    4c58:	6078      	str	r0, [r7, #4]
-    4c5a:	460b      	mov	r3, r1
-    4c5c:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  assert_param(IS_TIM_CKD_DIV(TIM_CKD));
-  /* Reset the CKD Bits */
-  TIMx->CR1 &= (uint16_t)~((uint16_t)TIM_CR1_CKD);
-    4c5e:	687b      	ldr	r3, [r7, #4]
-    4c60:	881b      	ldrh	r3, [r3, #0]
-    4c62:	b29b      	uxth	r3, r3
-    4c64:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    4c68:	b29a      	uxth	r2, r3
-    4c6a:	687b      	ldr	r3, [r7, #4]
-    4c6c:	801a      	strh	r2, [r3, #0]
-  /* Set the CKD value */
-  TIMx->CR1 |= TIM_CKD;
-    4c6e:	687b      	ldr	r3, [r7, #4]
-    4c70:	881b      	ldrh	r3, [r3, #0]
-    4c72:	b29a      	uxth	r2, r3
-    4c74:	887b      	ldrh	r3, [r7, #2]
-    4c76:	4313      	orrs	r3, r2
-    4c78:	b29a      	uxth	r2, r3
-    4c7a:	687b      	ldr	r3, [r7, #4]
-    4c7c:	801a      	strh	r2, [r3, #0]
-}
-    4c7e:	bf00      	nop
-    4c80:	370c      	adds	r7, #12
-    4c82:	46bd      	mov	sp, r7
-    4c84:	bc80      	pop	{r7}
-    4c86:	4770      	bx	lr
-
-00004c88 <TIM_GetCapture1>:
-  * @brief  Gets the TIMx Input Capture 1 value.
-  * @param  TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral.
-  * @retval Capture Compare 1 Register value.
-  */
-uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx)
-{
-    4c88:	b480      	push	{r7}
-    4c8a:	b083      	sub	sp, #12
-    4c8c:	af00      	add	r7, sp, #0
-    4c8e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST8_PERIPH(TIMx));
-  /* Get the Capture 1 Register value */
-  return TIMx->CCR1;
-    4c90:	687b      	ldr	r3, [r7, #4]
-    4c92:	8e9b      	ldrh	r3, [r3, #52]	; 0x34
-    4c94:	b29b      	uxth	r3, r3
-}
-    4c96:	4618      	mov	r0, r3
-    4c98:	370c      	adds	r7, #12
-    4c9a:	46bd      	mov	sp, r7
-    4c9c:	bc80      	pop	{r7}
-    4c9e:	4770      	bx	lr
-
-00004ca0 <TIM_GetCapture2>:
-  * @brief  Gets the TIMx Input Capture 2 value.
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5, 8, 9, 12 or 15 to select the TIM peripheral.
-  * @retval Capture Compare 2 Register value.
-  */
-uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx)
-{
-    4ca0:	b480      	push	{r7}
-    4ca2:	b083      	sub	sp, #12
-    4ca4:	af00      	add	r7, sp, #0
-    4ca6:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
-  /* Get the Capture 2 Register value */
-  return TIMx->CCR2;
-    4ca8:	687b      	ldr	r3, [r7, #4]
-    4caa:	8f1b      	ldrh	r3, [r3, #56]	; 0x38
-    4cac:	b29b      	uxth	r3, r3
-}
-    4cae:	4618      	mov	r0, r3
-    4cb0:	370c      	adds	r7, #12
-    4cb2:	46bd      	mov	sp, r7
-    4cb4:	bc80      	pop	{r7}
-    4cb6:	4770      	bx	lr
-
-00004cb8 <TIM_GetCapture3>:
-  * @brief  Gets the TIMx Input Capture 3 value.
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
-  * @retval Capture Compare 3 Register value.
-  */
-uint16_t TIM_GetCapture3(TIM_TypeDef* TIMx)
-{
-    4cb8:	b480      	push	{r7}
-    4cba:	b083      	sub	sp, #12
-    4cbc:	af00      	add	r7, sp, #0
-    4cbe:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx)); 
-  /* Get the Capture 3 Register value */
-  return TIMx->CCR3;
-    4cc0:	687b      	ldr	r3, [r7, #4]
-    4cc2:	8f9b      	ldrh	r3, [r3, #60]	; 0x3c
-    4cc4:	b29b      	uxth	r3, r3
-}
-    4cc6:	4618      	mov	r0, r3
-    4cc8:	370c      	adds	r7, #12
-    4cca:	46bd      	mov	sp, r7
-    4ccc:	bc80      	pop	{r7}
-    4cce:	4770      	bx	lr
-
-00004cd0 <TIM_GetCapture4>:
-  * @brief  Gets the TIMx Input Capture 4 value.
-  * @param  TIMx: where x can be 1, 2, 3, 4, 5 or 8 to select the TIM peripheral.
-  * @retval Capture Compare 4 Register value.
-  */
-uint16_t TIM_GetCapture4(TIM_TypeDef* TIMx)
-{
-    4cd0:	b480      	push	{r7}
-    4cd2:	b083      	sub	sp, #12
-    4cd4:	af00      	add	r7, sp, #0
-    4cd6:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_LIST3_PERIPH(TIMx));
-  /* Get the Capture 4 Register value */
-  return TIMx->CCR4;
-    4cd8:	687b      	ldr	r3, [r7, #4]
-    4cda:	f8b3 3040 	ldrh.w	r3, [r3, #64]	; 0x40
-    4cde:	b29b      	uxth	r3, r3
-}
-    4ce0:	4618      	mov	r0, r3
-    4ce2:	370c      	adds	r7, #12
-    4ce4:	46bd      	mov	sp, r7
-    4ce6:	bc80      	pop	{r7}
-    4ce8:	4770      	bx	lr
-
-00004cea <TIM_GetCounter>:
-  * @brief  Gets the TIMx Counter value.
-  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.
-  * @retval Counter Register value.
-  */
-uint16_t TIM_GetCounter(TIM_TypeDef* TIMx)
-{
-    4cea:	b480      	push	{r7}
-    4cec:	b083      	sub	sp, #12
-    4cee:	af00      	add	r7, sp, #0
-    4cf0:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  /* Get the Counter Register value */
-  return TIMx->CNT;
-    4cf2:	687b      	ldr	r3, [r7, #4]
-    4cf4:	8c9b      	ldrh	r3, [r3, #36]	; 0x24
-    4cf6:	b29b      	uxth	r3, r3
-}
-    4cf8:	4618      	mov	r0, r3
-    4cfa:	370c      	adds	r7, #12
-    4cfc:	46bd      	mov	sp, r7
-    4cfe:	bc80      	pop	{r7}
-    4d00:	4770      	bx	lr
-
-00004d02 <TIM_GetPrescaler>:
-  * @brief  Gets the TIMx Prescaler value.
-  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.
-  * @retval Prescaler Register value.
-  */
-uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx)
-{
-    4d02:	b480      	push	{r7}
-    4d04:	b083      	sub	sp, #12
-    4d06:	af00      	add	r7, sp, #0
-    4d08:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  /* Get the Prescaler Register value */
-  return TIMx->PSC;
-    4d0a:	687b      	ldr	r3, [r7, #4]
-    4d0c:	8d1b      	ldrh	r3, [r3, #40]	; 0x28
-    4d0e:	b29b      	uxth	r3, r3
-}
-    4d10:	4618      	mov	r0, r3
-    4d12:	370c      	adds	r7, #12
-    4d14:	46bd      	mov	sp, r7
-    4d16:	bc80      	pop	{r7}
-    4d18:	4770      	bx	lr
-
-00004d1a <TIM_GetFlagStatus>:
-  *   - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15. 
-  *   - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.    
-  * @retval The new state of TIM_FLAG (SET or RESET).
-  */
-FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
-{ 
-    4d1a:	b480      	push	{r7}
-    4d1c:	b085      	sub	sp, #20
-    4d1e:	af00      	add	r7, sp, #0
-    4d20:	6078      	str	r0, [r7, #4]
-    4d22:	460b      	mov	r3, r1
-    4d24:	807b      	strh	r3, [r7, #2]
-  ITStatus bitstatus = RESET;  
-    4d26:	2300      	movs	r3, #0
-    4d28:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_GET_FLAG(TIM_FLAG));
-  
-  if ((TIMx->SR & TIM_FLAG) != (uint16_t)RESET)
-    4d2a:	687b      	ldr	r3, [r7, #4]
-    4d2c:	8a1b      	ldrh	r3, [r3, #16]
-    4d2e:	b29a      	uxth	r2, r3
-    4d30:	887b      	ldrh	r3, [r7, #2]
-    4d32:	4013      	ands	r3, r2
-    4d34:	b29b      	uxth	r3, r3
-    4d36:	2b00      	cmp	r3, #0
-    4d38:	d002      	beq.n	4d40 <TIM_GetFlagStatus+0x26>
-  {
-    bitstatus = SET;
-    4d3a:	2301      	movs	r3, #1
-    4d3c:	73fb      	strb	r3, [r7, #15]
-    4d3e:	e001      	b.n	4d44 <TIM_GetFlagStatus+0x2a>
-  }
-  else
-  {
-    bitstatus = RESET;
-    4d40:	2300      	movs	r3, #0
-    4d42:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    4d44:	7bfb      	ldrb	r3, [r7, #15]
-}
-    4d46:	4618      	mov	r0, r3
-    4d48:	3714      	adds	r7, #20
-    4d4a:	46bd      	mov	sp, r7
-    4d4c:	bc80      	pop	{r7}
-    4d4e:	4770      	bx	lr
-
-00004d50 <TIM_ClearFlag>:
-  *   - TIM_FLAG_Break is used only with TIM1, TIM8 and TIM15. 
-  *   - TIM_FLAG_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.   
-  * @retval None
-  */
-void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
-{  
-    4d50:	b480      	push	{r7}
-    4d52:	b083      	sub	sp, #12
-    4d54:	af00      	add	r7, sp, #0
-    4d56:	6078      	str	r0, [r7, #4]
-    4d58:	460b      	mov	r3, r1
-    4d5a:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG));
-   
-  /* Clear the flags */
-  TIMx->SR = (uint16_t)~TIM_FLAG;
-    4d5c:	887b      	ldrh	r3, [r7, #2]
-    4d5e:	43db      	mvns	r3, r3
-    4d60:	b29a      	uxth	r2, r3
-    4d62:	687b      	ldr	r3, [r7, #4]
-    4d64:	821a      	strh	r2, [r3, #16]
-}
-    4d66:	bf00      	nop
-    4d68:	370c      	adds	r7, #12
-    4d6a:	46bd      	mov	sp, r7
-    4d6c:	bc80      	pop	{r7}
-    4d6e:	4770      	bx	lr
-
-00004d70 <TIM_GetITStatus>:
-  *   - TIM_IT_Break is used only with TIM1, TIM8 and TIM15. 
-  *   - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.  
-  * @retval The new state of the TIM_IT(SET or RESET).
-  */
-ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
-{
-    4d70:	b480      	push	{r7}
-    4d72:	b085      	sub	sp, #20
-    4d74:	af00      	add	r7, sp, #0
-    4d76:	6078      	str	r0, [r7, #4]
-    4d78:	460b      	mov	r3, r1
-    4d7a:	807b      	strh	r3, [r7, #2]
-  ITStatus bitstatus = RESET;  
-    4d7c:	2300      	movs	r3, #0
-    4d7e:	73fb      	strb	r3, [r7, #15]
-  uint16_t itstatus = 0x0, itenable = 0x0;
-    4d80:	2300      	movs	r3, #0
-    4d82:	81bb      	strh	r3, [r7, #12]
-    4d84:	2300      	movs	r3, #0
-    4d86:	817b      	strh	r3, [r7, #10]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_GET_IT(TIM_IT));
-   
-  itstatus = TIMx->SR & TIM_IT;
-    4d88:	687b      	ldr	r3, [r7, #4]
-    4d8a:	8a1b      	ldrh	r3, [r3, #16]
-    4d8c:	b29a      	uxth	r2, r3
-    4d8e:	887b      	ldrh	r3, [r7, #2]
-    4d90:	4013      	ands	r3, r2
-    4d92:	81bb      	strh	r3, [r7, #12]
-  
-  itenable = TIMx->DIER & TIM_IT;
-    4d94:	687b      	ldr	r3, [r7, #4]
-    4d96:	899b      	ldrh	r3, [r3, #12]
-    4d98:	b29a      	uxth	r2, r3
-    4d9a:	887b      	ldrh	r3, [r7, #2]
-    4d9c:	4013      	ands	r3, r2
-    4d9e:	817b      	strh	r3, [r7, #10]
-  if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))
-    4da0:	89bb      	ldrh	r3, [r7, #12]
-    4da2:	2b00      	cmp	r3, #0
-    4da4:	d005      	beq.n	4db2 <TIM_GetITStatus+0x42>
-    4da6:	897b      	ldrh	r3, [r7, #10]
-    4da8:	2b00      	cmp	r3, #0
-    4daa:	d002      	beq.n	4db2 <TIM_GetITStatus+0x42>
-  {
-    bitstatus = SET;
-    4dac:	2301      	movs	r3, #1
-    4dae:	73fb      	strb	r3, [r7, #15]
-    4db0:	e001      	b.n	4db6 <TIM_GetITStatus+0x46>
-  }
-  else
-  {
-    bitstatus = RESET;
-    4db2:	2300      	movs	r3, #0
-    4db4:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    4db6:	7bfb      	ldrb	r3, [r7, #15]
-}
-    4db8:	4618      	mov	r0, r3
-    4dba:	3714      	adds	r7, #20
-    4dbc:	46bd      	mov	sp, r7
-    4dbe:	bc80      	pop	{r7}
-    4dc0:	4770      	bx	lr
-
-00004dc2 <TIM_ClearITPendingBit>:
-  *   - TIM_IT_Break is used only with TIM1, TIM8 and TIM15. 
-  *   - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.    
-  * @retval None
-  */
-void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
-{
-    4dc2:	b480      	push	{r7}
-    4dc4:	b083      	sub	sp, #12
-    4dc6:	af00      	add	r7, sp, #0
-    4dc8:	6078      	str	r0, [r7, #4]
-    4dca:	460b      	mov	r3, r1
-    4dcc:	807b      	strh	r3, [r7, #2]
-  /* Check the parameters */
-  assert_param(IS_TIM_ALL_PERIPH(TIMx));
-  assert_param(IS_TIM_IT(TIM_IT));
-  /* Clear the IT pending Bit */
-  TIMx->SR = (uint16_t)~TIM_IT;
-    4dce:	887b      	ldrh	r3, [r7, #2]
-    4dd0:	43db      	mvns	r3, r3
-    4dd2:	b29a      	uxth	r2, r3
-    4dd4:	687b      	ldr	r3, [r7, #4]
-    4dd6:	821a      	strh	r2, [r3, #16]
-}
-    4dd8:	bf00      	nop
-    4dda:	370c      	adds	r7, #12
-    4ddc:	46bd      	mov	sp, r7
-    4dde:	bc80      	pop	{r7}
-    4de0:	4770      	bx	lr
-
-00004de2 <TI1_Config>:
-  *   This parameter must be a value between 0x00 and 0x0F.
-  * @retval None
-  */
-static void TI1_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
-                       uint16_t TIM_ICFilter)
-{
-    4de2:	b480      	push	{r7}
-    4de4:	b087      	sub	sp, #28
-    4de6:	af00      	add	r7, sp, #0
-    4de8:	60f8      	str	r0, [r7, #12]
-    4dea:	4608      	mov	r0, r1
-    4dec:	4611      	mov	r1, r2
-    4dee:	461a      	mov	r2, r3
-    4df0:	4603      	mov	r3, r0
-    4df2:	817b      	strh	r3, [r7, #10]
-    4df4:	460b      	mov	r3, r1
-    4df6:	813b      	strh	r3, [r7, #8]
-    4df8:	4613      	mov	r3, r2
-    4dfa:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpccmr1 = 0, tmpccer = 0;
-    4dfc:	2300      	movs	r3, #0
-    4dfe:	82bb      	strh	r3, [r7, #20]
-    4e00:	2300      	movs	r3, #0
-    4e02:	82fb      	strh	r3, [r7, #22]
-  /* Disable the Channel 1: Reset the CC1E Bit */
-  TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC1E);
-    4e04:	68fb      	ldr	r3, [r7, #12]
-    4e06:	8c1b      	ldrh	r3, [r3, #32]
-    4e08:	b29b      	uxth	r3, r3
-    4e0a:	f023 0301 	bic.w	r3, r3, #1
-    4e0e:	b29a      	uxth	r2, r3
-    4e10:	68fb      	ldr	r3, [r7, #12]
-    4e12:	841a      	strh	r2, [r3, #32]
-  tmpccmr1 = TIMx->CCMR1;
-    4e14:	68fb      	ldr	r3, [r7, #12]
-    4e16:	8b1b      	ldrh	r3, [r3, #24]
-    4e18:	82bb      	strh	r3, [r7, #20]
-  tmpccer = TIMx->CCER;
-    4e1a:	68fb      	ldr	r3, [r7, #12]
-    4e1c:	8c1b      	ldrh	r3, [r3, #32]
-    4e1e:	82fb      	strh	r3, [r7, #22]
-  /* Select the Input and set the filter */
-  tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC1S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC1F)));
-    4e20:	8abb      	ldrh	r3, [r7, #20]
-    4e22:	f023 03f3 	bic.w	r3, r3, #243	; 0xf3
-    4e26:	82bb      	strh	r3, [r7, #20]
-  tmpccmr1 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
-    4e28:	88fb      	ldrh	r3, [r7, #6]
-    4e2a:	011b      	lsls	r3, r3, #4
-    4e2c:	b29a      	uxth	r2, r3
-    4e2e:	893b      	ldrh	r3, [r7, #8]
-    4e30:	4313      	orrs	r3, r2
-    4e32:	b29a      	uxth	r2, r3
-    4e34:	8abb      	ldrh	r3, [r7, #20]
-    4e36:	4313      	orrs	r3, r2
-    4e38:	82bb      	strh	r3, [r7, #20]
-  
-  if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
-    4e3a:	68fb      	ldr	r3, [r7, #12]
-    4e3c:	4a1c      	ldr	r2, [pc, #112]	; (4eb0 <TI1_Config+0xce>)
-    4e3e:	4293      	cmp	r3, r2
-    4e40:	d013      	beq.n	4e6a <TI1_Config+0x88>
-    4e42:	68fb      	ldr	r3, [r7, #12]
-    4e44:	4a1b      	ldr	r2, [pc, #108]	; (4eb4 <TI1_Config+0xd2>)
-    4e46:	4293      	cmp	r3, r2
-    4e48:	d00f      	beq.n	4e6a <TI1_Config+0x88>
-    4e4a:	68fb      	ldr	r3, [r7, #12]
-    4e4c:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    4e50:	d00b      	beq.n	4e6a <TI1_Config+0x88>
-    4e52:	68fb      	ldr	r3, [r7, #12]
-    4e54:	4a18      	ldr	r2, [pc, #96]	; (4eb8 <TI1_Config+0xd6>)
-    4e56:	4293      	cmp	r3, r2
-    4e58:	d007      	beq.n	4e6a <TI1_Config+0x88>
-    4e5a:	68fb      	ldr	r3, [r7, #12]
-    4e5c:	4a17      	ldr	r2, [pc, #92]	; (4ebc <TI1_Config+0xda>)
-    4e5e:	4293      	cmp	r3, r2
-    4e60:	d003      	beq.n	4e6a <TI1_Config+0x88>
-     (TIMx == TIM4) ||(TIMx == TIM5))
-    4e62:	68fb      	ldr	r3, [r7, #12]
-    4e64:	4a16      	ldr	r2, [pc, #88]	; (4ec0 <TI1_Config+0xde>)
-    4e66:	4293      	cmp	r3, r2
-    4e68:	d10b      	bne.n	4e82 <TI1_Config+0xa0>
-  {
-    /* Select the Polarity and set the CC1E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P));
-    4e6a:	8afb      	ldrh	r3, [r7, #22]
-    4e6c:	f023 0302 	bic.w	r3, r3, #2
-    4e70:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
-    4e72:	897a      	ldrh	r2, [r7, #10]
-    4e74:	8afb      	ldrh	r3, [r7, #22]
-    4e76:	4313      	orrs	r3, r2
-    4e78:	b29b      	uxth	r3, r3
-    4e7a:	f043 0301 	orr.w	r3, r3, #1
-    4e7e:	82fb      	strh	r3, [r7, #22]
-    4e80:	e00a      	b.n	4e98 <TI1_Config+0xb6>
-  }
-  else
-  {
-    /* Select the Polarity and set the CC1E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC1P | TIM_CCER_CC1NP));
-    4e82:	8afb      	ldrh	r3, [r7, #22]
-    4e84:	f023 030a 	bic.w	r3, r3, #10
-    4e88:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC1E);
-    4e8a:	897a      	ldrh	r2, [r7, #10]
-    4e8c:	8afb      	ldrh	r3, [r7, #22]
-    4e8e:	4313      	orrs	r3, r2
-    4e90:	b29b      	uxth	r3, r3
-    4e92:	f043 0301 	orr.w	r3, r3, #1
-    4e96:	82fb      	strh	r3, [r7, #22]
-  }
-
-  /* Write to TIMx CCMR1 and CCER registers */
-  TIMx->CCMR1 = tmpccmr1;
-    4e98:	68fb      	ldr	r3, [r7, #12]
-    4e9a:	8aba      	ldrh	r2, [r7, #20]
-    4e9c:	831a      	strh	r2, [r3, #24]
-  TIMx->CCER = tmpccer;
-    4e9e:	68fb      	ldr	r3, [r7, #12]
-    4ea0:	8afa      	ldrh	r2, [r7, #22]
-    4ea2:	841a      	strh	r2, [r3, #32]
-}
-    4ea4:	bf00      	nop
-    4ea6:	371c      	adds	r7, #28
-    4ea8:	46bd      	mov	sp, r7
-    4eaa:	bc80      	pop	{r7}
-    4eac:	4770      	bx	lr
-    4eae:	bf00      	nop
-    4eb0:	40012c00 	.word	0x40012c00
-    4eb4:	40013400 	.word	0x40013400
-    4eb8:	40000400 	.word	0x40000400
-    4ebc:	40000800 	.word	0x40000800
-    4ec0:	40000c00 	.word	0x40000c00
-
-00004ec4 <TI2_Config>:
-  *   This parameter must be a value between 0x00 and 0x0F.
-  * @retval None
-  */
-static void TI2_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
-                       uint16_t TIM_ICFilter)
-{
-    4ec4:	b480      	push	{r7}
-    4ec6:	b087      	sub	sp, #28
-    4ec8:	af00      	add	r7, sp, #0
-    4eca:	60f8      	str	r0, [r7, #12]
-    4ecc:	4608      	mov	r0, r1
-    4ece:	4611      	mov	r1, r2
-    4ed0:	461a      	mov	r2, r3
-    4ed2:	4603      	mov	r3, r0
-    4ed4:	817b      	strh	r3, [r7, #10]
-    4ed6:	460b      	mov	r3, r1
-    4ed8:	813b      	strh	r3, [r7, #8]
-    4eda:	4613      	mov	r3, r2
-    4edc:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpccmr1 = 0, tmpccer = 0, tmp = 0;
-    4ede:	2300      	movs	r3, #0
-    4ee0:	82bb      	strh	r3, [r7, #20]
-    4ee2:	2300      	movs	r3, #0
-    4ee4:	82fb      	strh	r3, [r7, #22]
-    4ee6:	2300      	movs	r3, #0
-    4ee8:	827b      	strh	r3, [r7, #18]
-  /* Disable the Channel 2: Reset the CC2E Bit */
-  TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC2E);
-    4eea:	68fb      	ldr	r3, [r7, #12]
-    4eec:	8c1b      	ldrh	r3, [r3, #32]
-    4eee:	b29b      	uxth	r3, r3
-    4ef0:	f023 0310 	bic.w	r3, r3, #16
-    4ef4:	b29a      	uxth	r2, r3
-    4ef6:	68fb      	ldr	r3, [r7, #12]
-    4ef8:	841a      	strh	r2, [r3, #32]
-  tmpccmr1 = TIMx->CCMR1;
-    4efa:	68fb      	ldr	r3, [r7, #12]
-    4efc:	8b1b      	ldrh	r3, [r3, #24]
-    4efe:	82bb      	strh	r3, [r7, #20]
-  tmpccer = TIMx->CCER;
-    4f00:	68fb      	ldr	r3, [r7, #12]
-    4f02:	8c1b      	ldrh	r3, [r3, #32]
-    4f04:	82fb      	strh	r3, [r7, #22]
-  tmp = (uint16_t)(TIM_ICPolarity << 4);
-    4f06:	897b      	ldrh	r3, [r7, #10]
-    4f08:	011b      	lsls	r3, r3, #4
-    4f0a:	827b      	strh	r3, [r7, #18]
-  /* Select the Input and set the filter */
-  tmpccmr1 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR1_CC2S)) & ((uint16_t)~((uint16_t)TIM_CCMR1_IC2F)));
-    4f0c:	8abb      	ldrh	r3, [r7, #20]
-    4f0e:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    4f12:	051b      	lsls	r3, r3, #20
-    4f14:	0d1b      	lsrs	r3, r3, #20
-    4f16:	82bb      	strh	r3, [r7, #20]
-  tmpccmr1 |= (uint16_t)(TIM_ICFilter << 12);
-    4f18:	88fb      	ldrh	r3, [r7, #6]
-    4f1a:	031b      	lsls	r3, r3, #12
-    4f1c:	b29a      	uxth	r2, r3
-    4f1e:	8abb      	ldrh	r3, [r7, #20]
-    4f20:	4313      	orrs	r3, r2
-    4f22:	82bb      	strh	r3, [r7, #20]
-  tmpccmr1 |= (uint16_t)(TIM_ICSelection << 8);
-    4f24:	893b      	ldrh	r3, [r7, #8]
-    4f26:	021b      	lsls	r3, r3, #8
-    4f28:	b29a      	uxth	r2, r3
-    4f2a:	8abb      	ldrh	r3, [r7, #20]
-    4f2c:	4313      	orrs	r3, r2
-    4f2e:	82bb      	strh	r3, [r7, #20]
-  
-  if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
-    4f30:	68fb      	ldr	r3, [r7, #12]
-    4f32:	4a1c      	ldr	r2, [pc, #112]	; (4fa4 <TI2_Config+0xe0>)
-    4f34:	4293      	cmp	r3, r2
-    4f36:	d013      	beq.n	4f60 <TI2_Config+0x9c>
-    4f38:	68fb      	ldr	r3, [r7, #12]
-    4f3a:	4a1b      	ldr	r2, [pc, #108]	; (4fa8 <TI2_Config+0xe4>)
-    4f3c:	4293      	cmp	r3, r2
-    4f3e:	d00f      	beq.n	4f60 <TI2_Config+0x9c>
-    4f40:	68fb      	ldr	r3, [r7, #12]
-    4f42:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    4f46:	d00b      	beq.n	4f60 <TI2_Config+0x9c>
-    4f48:	68fb      	ldr	r3, [r7, #12]
-    4f4a:	4a18      	ldr	r2, [pc, #96]	; (4fac <TI2_Config+0xe8>)
-    4f4c:	4293      	cmp	r3, r2
-    4f4e:	d007      	beq.n	4f60 <TI2_Config+0x9c>
-    4f50:	68fb      	ldr	r3, [r7, #12]
-    4f52:	4a17      	ldr	r2, [pc, #92]	; (4fb0 <TI2_Config+0xec>)
-    4f54:	4293      	cmp	r3, r2
-    4f56:	d003      	beq.n	4f60 <TI2_Config+0x9c>
-     (TIMx == TIM4) ||(TIMx == TIM5))
-    4f58:	68fb      	ldr	r3, [r7, #12]
-    4f5a:	4a16      	ldr	r2, [pc, #88]	; (4fb4 <TI2_Config+0xf0>)
-    4f5c:	4293      	cmp	r3, r2
-    4f5e:	d10b      	bne.n	4f78 <TI2_Config+0xb4>
-  {
-    /* Select the Polarity and set the CC2E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P));
-    4f60:	8afb      	ldrh	r3, [r7, #22]
-    4f62:	f023 0320 	bic.w	r3, r3, #32
-    4f66:	82fb      	strh	r3, [r7, #22]
-    tmpccer |=  (uint16_t)(tmp | (uint16_t)TIM_CCER_CC2E);
-    4f68:	8a7a      	ldrh	r2, [r7, #18]
-    4f6a:	8afb      	ldrh	r3, [r7, #22]
-    4f6c:	4313      	orrs	r3, r2
-    4f6e:	b29b      	uxth	r3, r3
-    4f70:	f043 0310 	orr.w	r3, r3, #16
-    4f74:	82fb      	strh	r3, [r7, #22]
-    4f76:	e00a      	b.n	4f8e <TI2_Config+0xca>
-  }
-  else
-  {
-    /* Select the Polarity and set the CC2E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC2P | TIM_CCER_CC2NP));
-    4f78:	8afb      	ldrh	r3, [r7, #22]
-    4f7a:	f023 03a0 	bic.w	r3, r3, #160	; 0xa0
-    4f7e:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC2E);
-    4f80:	897a      	ldrh	r2, [r7, #10]
-    4f82:	8afb      	ldrh	r3, [r7, #22]
-    4f84:	4313      	orrs	r3, r2
-    4f86:	b29b      	uxth	r3, r3
-    4f88:	f043 0310 	orr.w	r3, r3, #16
-    4f8c:	82fb      	strh	r3, [r7, #22]
-  }
-  
-  /* Write to TIMx CCMR1 and CCER registers */
-  TIMx->CCMR1 = tmpccmr1 ;
-    4f8e:	68fb      	ldr	r3, [r7, #12]
-    4f90:	8aba      	ldrh	r2, [r7, #20]
-    4f92:	831a      	strh	r2, [r3, #24]
-  TIMx->CCER = tmpccer;
-    4f94:	68fb      	ldr	r3, [r7, #12]
-    4f96:	8afa      	ldrh	r2, [r7, #22]
-    4f98:	841a      	strh	r2, [r3, #32]
-}
-    4f9a:	bf00      	nop
-    4f9c:	371c      	adds	r7, #28
-    4f9e:	46bd      	mov	sp, r7
-    4fa0:	bc80      	pop	{r7}
-    4fa2:	4770      	bx	lr
-    4fa4:	40012c00 	.word	0x40012c00
-    4fa8:	40013400 	.word	0x40013400
-    4fac:	40000400 	.word	0x40000400
-    4fb0:	40000800 	.word	0x40000800
-    4fb4:	40000c00 	.word	0x40000c00
-
-00004fb8 <TI3_Config>:
-  *   This parameter must be a value between 0x00 and 0x0F.
-  * @retval None
-  */
-static void TI3_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
-                       uint16_t TIM_ICFilter)
-{
-    4fb8:	b480      	push	{r7}
-    4fba:	b087      	sub	sp, #28
-    4fbc:	af00      	add	r7, sp, #0
-    4fbe:	60f8      	str	r0, [r7, #12]
-    4fc0:	4608      	mov	r0, r1
-    4fc2:	4611      	mov	r1, r2
-    4fc4:	461a      	mov	r2, r3
-    4fc6:	4603      	mov	r3, r0
-    4fc8:	817b      	strh	r3, [r7, #10]
-    4fca:	460b      	mov	r3, r1
-    4fcc:	813b      	strh	r3, [r7, #8]
-    4fce:	4613      	mov	r3, r2
-    4fd0:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
-    4fd2:	2300      	movs	r3, #0
-    4fd4:	82bb      	strh	r3, [r7, #20]
-    4fd6:	2300      	movs	r3, #0
-    4fd8:	82fb      	strh	r3, [r7, #22]
-    4fda:	2300      	movs	r3, #0
-    4fdc:	827b      	strh	r3, [r7, #18]
-  /* Disable the Channel 3: Reset the CC3E Bit */
-  TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC3E);
-    4fde:	68fb      	ldr	r3, [r7, #12]
-    4fe0:	8c1b      	ldrh	r3, [r3, #32]
-    4fe2:	b29b      	uxth	r3, r3
-    4fe4:	f423 7380 	bic.w	r3, r3, #256	; 0x100
-    4fe8:	b29a      	uxth	r2, r3
-    4fea:	68fb      	ldr	r3, [r7, #12]
-    4fec:	841a      	strh	r2, [r3, #32]
-  tmpccmr2 = TIMx->CCMR2;
-    4fee:	68fb      	ldr	r3, [r7, #12]
-    4ff0:	8b9b      	ldrh	r3, [r3, #28]
-    4ff2:	82bb      	strh	r3, [r7, #20]
-  tmpccer = TIMx->CCER;
-    4ff4:	68fb      	ldr	r3, [r7, #12]
-    4ff6:	8c1b      	ldrh	r3, [r3, #32]
-    4ff8:	82fb      	strh	r3, [r7, #22]
-  tmp = (uint16_t)(TIM_ICPolarity << 8);
-    4ffa:	897b      	ldrh	r3, [r7, #10]
-    4ffc:	021b      	lsls	r3, r3, #8
-    4ffe:	827b      	strh	r3, [r7, #18]
-  /* Select the Input and set the filter */
-  tmpccmr2 &= (uint16_t)(((uint16_t)~((uint16_t)TIM_CCMR2_CC3S)) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC3F)));
-    5000:	8abb      	ldrh	r3, [r7, #20]
-    5002:	f023 03f3 	bic.w	r3, r3, #243	; 0xf3
-    5006:	82bb      	strh	r3, [r7, #20]
-  tmpccmr2 |= (uint16_t)(TIM_ICSelection | (uint16_t)(TIM_ICFilter << (uint16_t)4));
-    5008:	88fb      	ldrh	r3, [r7, #6]
-    500a:	011b      	lsls	r3, r3, #4
-    500c:	b29a      	uxth	r2, r3
-    500e:	893b      	ldrh	r3, [r7, #8]
-    5010:	4313      	orrs	r3, r2
-    5012:	b29a      	uxth	r2, r3
-    5014:	8abb      	ldrh	r3, [r7, #20]
-    5016:	4313      	orrs	r3, r2
-    5018:	82bb      	strh	r3, [r7, #20]
-    
-  if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
-    501a:	68fb      	ldr	r3, [r7, #12]
-    501c:	4a1c      	ldr	r2, [pc, #112]	; (5090 <TI3_Config+0xd8>)
-    501e:	4293      	cmp	r3, r2
-    5020:	d013      	beq.n	504a <TI3_Config+0x92>
-    5022:	68fb      	ldr	r3, [r7, #12]
-    5024:	4a1b      	ldr	r2, [pc, #108]	; (5094 <TI3_Config+0xdc>)
-    5026:	4293      	cmp	r3, r2
-    5028:	d00f      	beq.n	504a <TI3_Config+0x92>
-    502a:	68fb      	ldr	r3, [r7, #12]
-    502c:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    5030:	d00b      	beq.n	504a <TI3_Config+0x92>
-    5032:	68fb      	ldr	r3, [r7, #12]
-    5034:	4a18      	ldr	r2, [pc, #96]	; (5098 <TI3_Config+0xe0>)
-    5036:	4293      	cmp	r3, r2
-    5038:	d007      	beq.n	504a <TI3_Config+0x92>
-    503a:	68fb      	ldr	r3, [r7, #12]
-    503c:	4a17      	ldr	r2, [pc, #92]	; (509c <TI3_Config+0xe4>)
-    503e:	4293      	cmp	r3, r2
-    5040:	d003      	beq.n	504a <TI3_Config+0x92>
-     (TIMx == TIM4) ||(TIMx == TIM5))
-    5042:	68fb      	ldr	r3, [r7, #12]
-    5044:	4a16      	ldr	r2, [pc, #88]	; (50a0 <TI3_Config+0xe8>)
-    5046:	4293      	cmp	r3, r2
-    5048:	d10b      	bne.n	5062 <TI3_Config+0xaa>
-  {
-    /* Select the Polarity and set the CC3E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P));
-    504a:	8afb      	ldrh	r3, [r7, #22]
-    504c:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    5050:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC3E);
-    5052:	8a7a      	ldrh	r2, [r7, #18]
-    5054:	8afb      	ldrh	r3, [r7, #22]
-    5056:	4313      	orrs	r3, r2
-    5058:	b29b      	uxth	r3, r3
-    505a:	f443 7380 	orr.w	r3, r3, #256	; 0x100
-    505e:	82fb      	strh	r3, [r7, #22]
-    5060:	e00a      	b.n	5078 <TI3_Config+0xc0>
-  }
-  else
-  {
-    /* Select the Polarity and set the CC3E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC3NP));
-    5062:	8afb      	ldrh	r3, [r7, #22]
-    5064:	f423 6320 	bic.w	r3, r3, #2560	; 0xa00
-    5068:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC3E);
-    506a:	897a      	ldrh	r2, [r7, #10]
-    506c:	8afb      	ldrh	r3, [r7, #22]
-    506e:	4313      	orrs	r3, r2
-    5070:	b29b      	uxth	r3, r3
-    5072:	f443 7380 	orr.w	r3, r3, #256	; 0x100
-    5076:	82fb      	strh	r3, [r7, #22]
-  }
-  
-  /* Write to TIMx CCMR2 and CCER registers */
-  TIMx->CCMR2 = tmpccmr2;
-    5078:	68fb      	ldr	r3, [r7, #12]
-    507a:	8aba      	ldrh	r2, [r7, #20]
-    507c:	839a      	strh	r2, [r3, #28]
-  TIMx->CCER = tmpccer;
-    507e:	68fb      	ldr	r3, [r7, #12]
-    5080:	8afa      	ldrh	r2, [r7, #22]
-    5082:	841a      	strh	r2, [r3, #32]
-}
-    5084:	bf00      	nop
-    5086:	371c      	adds	r7, #28
-    5088:	46bd      	mov	sp, r7
-    508a:	bc80      	pop	{r7}
-    508c:	4770      	bx	lr
-    508e:	bf00      	nop
-    5090:	40012c00 	.word	0x40012c00
-    5094:	40013400 	.word	0x40013400
-    5098:	40000400 	.word	0x40000400
-    509c:	40000800 	.word	0x40000800
-    50a0:	40000c00 	.word	0x40000c00
-
-000050a4 <TI4_Config>:
-  *   This parameter must be a value between 0x00 and 0x0F.
-  * @retval None
-  */
-static void TI4_Config(TIM_TypeDef* TIMx, uint16_t TIM_ICPolarity, uint16_t TIM_ICSelection,
-                       uint16_t TIM_ICFilter)
-{
-    50a4:	b480      	push	{r7}
-    50a6:	b087      	sub	sp, #28
-    50a8:	af00      	add	r7, sp, #0
-    50aa:	60f8      	str	r0, [r7, #12]
-    50ac:	4608      	mov	r0, r1
-    50ae:	4611      	mov	r1, r2
-    50b0:	461a      	mov	r2, r3
-    50b2:	4603      	mov	r3, r0
-    50b4:	817b      	strh	r3, [r7, #10]
-    50b6:	460b      	mov	r3, r1
-    50b8:	813b      	strh	r3, [r7, #8]
-    50ba:	4613      	mov	r3, r2
-    50bc:	80fb      	strh	r3, [r7, #6]
-  uint16_t tmpccmr2 = 0, tmpccer = 0, tmp = 0;
-    50be:	2300      	movs	r3, #0
-    50c0:	82bb      	strh	r3, [r7, #20]
-    50c2:	2300      	movs	r3, #0
-    50c4:	82fb      	strh	r3, [r7, #22]
-    50c6:	2300      	movs	r3, #0
-    50c8:	827b      	strh	r3, [r7, #18]
-
-   /* Disable the Channel 4: Reset the CC4E Bit */
-  TIMx->CCER &= (uint16_t)~((uint16_t)TIM_CCER_CC4E);
-    50ca:	68fb      	ldr	r3, [r7, #12]
-    50cc:	8c1b      	ldrh	r3, [r3, #32]
-    50ce:	b29b      	uxth	r3, r3
-    50d0:	f423 5380 	bic.w	r3, r3, #4096	; 0x1000
-    50d4:	b29a      	uxth	r2, r3
-    50d6:	68fb      	ldr	r3, [r7, #12]
-    50d8:	841a      	strh	r2, [r3, #32]
-  tmpccmr2 = TIMx->CCMR2;
-    50da:	68fb      	ldr	r3, [r7, #12]
-    50dc:	8b9b      	ldrh	r3, [r3, #28]
-    50de:	82bb      	strh	r3, [r7, #20]
-  tmpccer = TIMx->CCER;
-    50e0:	68fb      	ldr	r3, [r7, #12]
-    50e2:	8c1b      	ldrh	r3, [r3, #32]
-    50e4:	82fb      	strh	r3, [r7, #22]
-  tmp = (uint16_t)(TIM_ICPolarity << 12);
-    50e6:	897b      	ldrh	r3, [r7, #10]
-    50e8:	031b      	lsls	r3, r3, #12
-    50ea:	827b      	strh	r3, [r7, #18]
-  /* Select the Input and set the filter */
-  tmpccmr2 &= (uint16_t)((uint16_t)(~(uint16_t)TIM_CCMR2_CC4S) & ((uint16_t)~((uint16_t)TIM_CCMR2_IC4F)));
-    50ec:	8abb      	ldrh	r3, [r7, #20]
-    50ee:	f423 7340 	bic.w	r3, r3, #768	; 0x300
-    50f2:	051b      	lsls	r3, r3, #20
-    50f4:	0d1b      	lsrs	r3, r3, #20
-    50f6:	82bb      	strh	r3, [r7, #20]
-  tmpccmr2 |= (uint16_t)(TIM_ICSelection << 8);
-    50f8:	893b      	ldrh	r3, [r7, #8]
-    50fa:	021b      	lsls	r3, r3, #8
-    50fc:	b29a      	uxth	r2, r3
-    50fe:	8abb      	ldrh	r3, [r7, #20]
-    5100:	4313      	orrs	r3, r2
-    5102:	82bb      	strh	r3, [r7, #20]
-  tmpccmr2 |= (uint16_t)(TIM_ICFilter << 12);
-    5104:	88fb      	ldrh	r3, [r7, #6]
-    5106:	031b      	lsls	r3, r3, #12
-    5108:	b29a      	uxth	r2, r3
-    510a:	8abb      	ldrh	r3, [r7, #20]
-    510c:	4313      	orrs	r3, r2
-    510e:	82bb      	strh	r3, [r7, #20]
-  
-  if((TIMx == TIM1) || (TIMx == TIM8) || (TIMx == TIM2) || (TIMx == TIM3) ||
-    5110:	68fb      	ldr	r3, [r7, #12]
-    5112:	4a1d      	ldr	r2, [pc, #116]	; (5188 <TI4_Config+0xe4>)
-    5114:	4293      	cmp	r3, r2
-    5116:	d013      	beq.n	5140 <TI4_Config+0x9c>
-    5118:	68fb      	ldr	r3, [r7, #12]
-    511a:	4a1c      	ldr	r2, [pc, #112]	; (518c <TI4_Config+0xe8>)
-    511c:	4293      	cmp	r3, r2
-    511e:	d00f      	beq.n	5140 <TI4_Config+0x9c>
-    5120:	68fb      	ldr	r3, [r7, #12]
-    5122:	f1b3 4f80 	cmp.w	r3, #1073741824	; 0x40000000
-    5126:	d00b      	beq.n	5140 <TI4_Config+0x9c>
-    5128:	68fb      	ldr	r3, [r7, #12]
-    512a:	4a19      	ldr	r2, [pc, #100]	; (5190 <TI4_Config+0xec>)
-    512c:	4293      	cmp	r3, r2
-    512e:	d007      	beq.n	5140 <TI4_Config+0x9c>
-    5130:	68fb      	ldr	r3, [r7, #12]
-    5132:	4a18      	ldr	r2, [pc, #96]	; (5194 <TI4_Config+0xf0>)
-    5134:	4293      	cmp	r3, r2
-    5136:	d003      	beq.n	5140 <TI4_Config+0x9c>
-     (TIMx == TIM4) ||(TIMx == TIM5))
-    5138:	68fb      	ldr	r3, [r7, #12]
-    513a:	4a17      	ldr	r2, [pc, #92]	; (5198 <TI4_Config+0xf4>)
-    513c:	4293      	cmp	r3, r2
-    513e:	d10b      	bne.n	5158 <TI4_Config+0xb4>
-  {
-    /* Select the Polarity and set the CC4E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC4P));
-    5140:	8afb      	ldrh	r3, [r7, #22]
-    5142:	f423 5300 	bic.w	r3, r3, #8192	; 0x2000
-    5146:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(tmp | (uint16_t)TIM_CCER_CC4E);
-    5148:	8a7a      	ldrh	r2, [r7, #18]
-    514a:	8afb      	ldrh	r3, [r7, #22]
-    514c:	4313      	orrs	r3, r2
-    514e:	b29b      	uxth	r3, r3
-    5150:	f443 5380 	orr.w	r3, r3, #4096	; 0x1000
-    5154:	82fb      	strh	r3, [r7, #22]
-    5156:	e00c      	b.n	5172 <TI4_Config+0xce>
-  }
-  else
-  {
-    /* Select the Polarity and set the CC4E Bit */
-    tmpccer &= (uint16_t)~((uint16_t)(TIM_CCER_CC3P | TIM_CCER_CC4NP));
-    5158:	8afb      	ldrh	r3, [r7, #22]
-    515a:	f423 7300 	bic.w	r3, r3, #512	; 0x200
-    515e:	045b      	lsls	r3, r3, #17
-    5160:	0c5b      	lsrs	r3, r3, #17
-    5162:	82fb      	strh	r3, [r7, #22]
-    tmpccer |= (uint16_t)(TIM_ICPolarity | (uint16_t)TIM_CCER_CC4E);
-    5164:	897a      	ldrh	r2, [r7, #10]
-    5166:	8afb      	ldrh	r3, [r7, #22]
-    5168:	4313      	orrs	r3, r2
-    516a:	b29b      	uxth	r3, r3
-    516c:	f443 5380 	orr.w	r3, r3, #4096	; 0x1000
-    5170:	82fb      	strh	r3, [r7, #22]
-  }
-  /* Write to TIMx CCMR2 and CCER registers */
-  TIMx->CCMR2 = tmpccmr2;
-    5172:	68fb      	ldr	r3, [r7, #12]
-    5174:	8aba      	ldrh	r2, [r7, #20]
-    5176:	839a      	strh	r2, [r3, #28]
-  TIMx->CCER = tmpccer;
-    5178:	68fb      	ldr	r3, [r7, #12]
-    517a:	8afa      	ldrh	r2, [r7, #22]
-    517c:	841a      	strh	r2, [r3, #32]
-}
-    517e:	bf00      	nop
-    5180:	371c      	adds	r7, #28
-    5182:	46bd      	mov	sp, r7
-    5184:	bc80      	pop	{r7}
-    5186:	4770      	bx	lr
-    5188:	40012c00 	.word	0x40012c00
-    518c:	40013400 	.word	0x40013400
-    5190:	40000400 	.word	0x40000400
-    5194:	40000800 	.word	0x40000800
-    5198:	40000c00 	.word	0x40000c00
-
-0000519c <RTC_ITConfig>:
-  * @param  NewState: new state of the specified RTC interrupts.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState)
-{
-    519c:	b480      	push	{r7}
-    519e:	b083      	sub	sp, #12
-    51a0:	af00      	add	r7, sp, #0
-    51a2:	4603      	mov	r3, r0
-    51a4:	460a      	mov	r2, r1
-    51a6:	80fb      	strh	r3, [r7, #6]
-    51a8:	4613      	mov	r3, r2
-    51aa:	717b      	strb	r3, [r7, #5]
-  /* Check the parameters */
-  assert_param(IS_RTC_IT(RTC_IT));  
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  
-  if (NewState != DISABLE)
-    51ac:	797b      	ldrb	r3, [r7, #5]
-    51ae:	2b00      	cmp	r3, #0
-    51b0:	d008      	beq.n	51c4 <RTC_ITConfig+0x28>
-  {
-    RTC->CRH |= RTC_IT;
-    51b2:	4b0c      	ldr	r3, [pc, #48]	; (51e4 <RTC_ITConfig+0x48>)
-    51b4:	881b      	ldrh	r3, [r3, #0]
-    51b6:	b29a      	uxth	r2, r3
-    51b8:	490a      	ldr	r1, [pc, #40]	; (51e4 <RTC_ITConfig+0x48>)
-    51ba:	88fb      	ldrh	r3, [r7, #6]
-    51bc:	4313      	orrs	r3, r2
-    51be:	b29b      	uxth	r3, r3
-    51c0:	800b      	strh	r3, [r1, #0]
-  }
-  else
-  {
-    RTC->CRH &= (uint16_t)~RTC_IT;
-  }
-}
-    51c2:	e009      	b.n	51d8 <RTC_ITConfig+0x3c>
-    RTC->CRH &= (uint16_t)~RTC_IT;
-    51c4:	4b07      	ldr	r3, [pc, #28]	; (51e4 <RTC_ITConfig+0x48>)
-    51c6:	881b      	ldrh	r3, [r3, #0]
-    51c8:	b29a      	uxth	r2, r3
-    51ca:	88fb      	ldrh	r3, [r7, #6]
-    51cc:	43db      	mvns	r3, r3
-    51ce:	b29b      	uxth	r3, r3
-    51d0:	4904      	ldr	r1, [pc, #16]	; (51e4 <RTC_ITConfig+0x48>)
-    51d2:	4013      	ands	r3, r2
-    51d4:	b29b      	uxth	r3, r3
-    51d6:	800b      	strh	r3, [r1, #0]
-}
-    51d8:	bf00      	nop
-    51da:	370c      	adds	r7, #12
-    51dc:	46bd      	mov	sp, r7
-    51de:	bc80      	pop	{r7}
-    51e0:	4770      	bx	lr
-    51e2:	bf00      	nop
-    51e4:	40002800 	.word	0x40002800
-
-000051e8 <RTC_EnterConfigMode>:
-  * @brief  Enters the RTC configuration mode.
-  * @param  None
-  * @retval None
-  */
-void RTC_EnterConfigMode(void)
-{
-    51e8:	b480      	push	{r7}
-    51ea:	af00      	add	r7, sp, #0
-  /* Set the CNF flag to enter in the Configuration Mode */
-  RTC->CRL |= RTC_CRL_CNF;
-    51ec:	4b05      	ldr	r3, [pc, #20]	; (5204 <RTC_EnterConfigMode+0x1c>)
-    51ee:	889b      	ldrh	r3, [r3, #4]
-    51f0:	b29b      	uxth	r3, r3
-    51f2:	4a04      	ldr	r2, [pc, #16]	; (5204 <RTC_EnterConfigMode+0x1c>)
-    51f4:	f043 0310 	orr.w	r3, r3, #16
-    51f8:	b29b      	uxth	r3, r3
-    51fa:	8093      	strh	r3, [r2, #4]
-}
-    51fc:	bf00      	nop
-    51fe:	46bd      	mov	sp, r7
-    5200:	bc80      	pop	{r7}
-    5202:	4770      	bx	lr
-    5204:	40002800 	.word	0x40002800
-
-00005208 <RTC_ExitConfigMode>:
-  * @brief  Exits from the RTC configuration mode.
-  * @param  None
-  * @retval None
-  */
-void RTC_ExitConfigMode(void)
-{
-    5208:	b480      	push	{r7}
-    520a:	af00      	add	r7, sp, #0
-  /* Reset the CNF flag to exit from the Configuration Mode */
-  RTC->CRL &= (uint16_t)~((uint16_t)RTC_CRL_CNF); 
-    520c:	4b05      	ldr	r3, [pc, #20]	; (5224 <RTC_ExitConfigMode+0x1c>)
-    520e:	889b      	ldrh	r3, [r3, #4]
-    5210:	b29b      	uxth	r3, r3
-    5212:	4a04      	ldr	r2, [pc, #16]	; (5224 <RTC_ExitConfigMode+0x1c>)
-    5214:	f023 0310 	bic.w	r3, r3, #16
-    5218:	b29b      	uxth	r3, r3
-    521a:	8093      	strh	r3, [r2, #4]
-}
-    521c:	bf00      	nop
-    521e:	46bd      	mov	sp, r7
-    5220:	bc80      	pop	{r7}
-    5222:	4770      	bx	lr
-    5224:	40002800 	.word	0x40002800
-
-00005228 <RTC_GetCounter>:
-  * @brief  Gets the RTC counter value.
-  * @param  None
-  * @retval RTC counter value.
-  */
-uint32_t RTC_GetCounter(void)
-{
-    5228:	b480      	push	{r7}
-    522a:	b083      	sub	sp, #12
-    522c:	af00      	add	r7, sp, #0
-  uint16_t tmp = 0;
-    522e:	2300      	movs	r3, #0
-    5230:	80fb      	strh	r3, [r7, #6]
-  tmp = RTC->CNTL;
-    5232:	4b07      	ldr	r3, [pc, #28]	; (5250 <RTC_GetCounter+0x28>)
-    5234:	8b9b      	ldrh	r3, [r3, #28]
-    5236:	80fb      	strh	r3, [r7, #6]
-  return (((uint32_t)RTC->CNTH << 16 ) | tmp) ;
-    5238:	4b05      	ldr	r3, [pc, #20]	; (5250 <RTC_GetCounter+0x28>)
-    523a:	8b1b      	ldrh	r3, [r3, #24]
-    523c:	b29b      	uxth	r3, r3
-    523e:	041a      	lsls	r2, r3, #16
-    5240:	88fb      	ldrh	r3, [r7, #6]
-    5242:	4313      	orrs	r3, r2
-}
-    5244:	4618      	mov	r0, r3
-    5246:	370c      	adds	r7, #12
-    5248:	46bd      	mov	sp, r7
-    524a:	bc80      	pop	{r7}
-    524c:	4770      	bx	lr
-    524e:	bf00      	nop
-    5250:	40002800 	.word	0x40002800
-
-00005254 <RTC_SetCounter>:
-  * @brief  Sets the RTC counter value.
-  * @param  CounterValue: RTC counter new value.
-  * @retval None
-  */
-void RTC_SetCounter(uint32_t CounterValue)
-{ 
-    5254:	b580      	push	{r7, lr}
-    5256:	b082      	sub	sp, #8
-    5258:	af00      	add	r7, sp, #0
-    525a:	6078      	str	r0, [r7, #4]
-  RTC_EnterConfigMode();
-    525c:	f7ff ffc4 	bl	51e8 <RTC_EnterConfigMode>
-  /* Set RTC COUNTER MSB word */
-  RTC->CNTH = CounterValue >> 16;
-    5260:	687b      	ldr	r3, [r7, #4]
-    5262:	0c1a      	lsrs	r2, r3, #16
-    5264:	4b06      	ldr	r3, [pc, #24]	; (5280 <RTC_SetCounter+0x2c>)
-    5266:	b292      	uxth	r2, r2
-    5268:	831a      	strh	r2, [r3, #24]
-  /* Set RTC COUNTER LSB word */
-  RTC->CNTL = (CounterValue & RTC_LSB_MASK);
-    526a:	4b05      	ldr	r3, [pc, #20]	; (5280 <RTC_SetCounter+0x2c>)
-    526c:	687a      	ldr	r2, [r7, #4]
-    526e:	b292      	uxth	r2, r2
-    5270:	839a      	strh	r2, [r3, #28]
-  RTC_ExitConfigMode();
-    5272:	f7ff ffc9 	bl	5208 <RTC_ExitConfigMode>
-}
-    5276:	bf00      	nop
-    5278:	3708      	adds	r7, #8
-    527a:	46bd      	mov	sp, r7
-    527c:	bd80      	pop	{r7, pc}
-    527e:	bf00      	nop
-    5280:	40002800 	.word	0x40002800
-
-00005284 <RTC_SetPrescaler>:
-  * @brief  Sets the RTC prescaler value.
-  * @param  PrescalerValue: RTC prescaler new value.
-  * @retval None
-  */
-void RTC_SetPrescaler(uint32_t PrescalerValue)
-{
-    5284:	b580      	push	{r7, lr}
-    5286:	b082      	sub	sp, #8
-    5288:	af00      	add	r7, sp, #0
-    528a:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_RTC_PRESCALER(PrescalerValue));
-  
-  RTC_EnterConfigMode();
-    528c:	f7ff ffac 	bl	51e8 <RTC_EnterConfigMode>
-  /* Set RTC PRESCALER MSB word */
-  RTC->PRLH = (PrescalerValue & PRLH_MSB_MASK) >> 16;
-    5290:	687b      	ldr	r3, [r7, #4]
-    5292:	0c1b      	lsrs	r3, r3, #16
-    5294:	b29b      	uxth	r3, r3
-    5296:	4a07      	ldr	r2, [pc, #28]	; (52b4 <RTC_SetPrescaler+0x30>)
-    5298:	f003 030f 	and.w	r3, r3, #15
-    529c:	b29b      	uxth	r3, r3
-    529e:	8113      	strh	r3, [r2, #8]
-  /* Set RTC PRESCALER LSB word */
-  RTC->PRLL = (PrescalerValue & RTC_LSB_MASK);
-    52a0:	4b04      	ldr	r3, [pc, #16]	; (52b4 <RTC_SetPrescaler+0x30>)
-    52a2:	687a      	ldr	r2, [r7, #4]
-    52a4:	b292      	uxth	r2, r2
-    52a6:	819a      	strh	r2, [r3, #12]
-  RTC_ExitConfigMode();
-    52a8:	f7ff ffae 	bl	5208 <RTC_ExitConfigMode>
-}
-    52ac:	bf00      	nop
-    52ae:	3708      	adds	r7, #8
-    52b0:	46bd      	mov	sp, r7
-    52b2:	bd80      	pop	{r7, pc}
-    52b4:	40002800 	.word	0x40002800
-
-000052b8 <RTC_SetAlarm>:
-  * @brief  Sets the RTC alarm value.
-  * @param  AlarmValue: RTC alarm new value.
-  * @retval None
-  */
-void RTC_SetAlarm(uint32_t AlarmValue)
-{  
-    52b8:	b580      	push	{r7, lr}
-    52ba:	b082      	sub	sp, #8
-    52bc:	af00      	add	r7, sp, #0
-    52be:	6078      	str	r0, [r7, #4]
-  RTC_EnterConfigMode();
-    52c0:	f7ff ff92 	bl	51e8 <RTC_EnterConfigMode>
-  /* Set the ALARM MSB word */
-  RTC->ALRH = AlarmValue >> 16;
-    52c4:	687b      	ldr	r3, [r7, #4]
-    52c6:	0c1a      	lsrs	r2, r3, #16
-    52c8:	4b06      	ldr	r3, [pc, #24]	; (52e4 <RTC_SetAlarm+0x2c>)
-    52ca:	b292      	uxth	r2, r2
-    52cc:	841a      	strh	r2, [r3, #32]
-  /* Set the ALARM LSB word */
-  RTC->ALRL = (AlarmValue & RTC_LSB_MASK);
-    52ce:	4b05      	ldr	r3, [pc, #20]	; (52e4 <RTC_SetAlarm+0x2c>)
-    52d0:	687a      	ldr	r2, [r7, #4]
-    52d2:	b292      	uxth	r2, r2
-    52d4:	849a      	strh	r2, [r3, #36]	; 0x24
-  RTC_ExitConfigMode();
-    52d6:	f7ff ff97 	bl	5208 <RTC_ExitConfigMode>
-}
-    52da:	bf00      	nop
-    52dc:	3708      	adds	r7, #8
-    52de:	46bd      	mov	sp, r7
-    52e0:	bd80      	pop	{r7, pc}
-    52e2:	bf00      	nop
-    52e4:	40002800 	.word	0x40002800
-
-000052e8 <RTC_GetDivider>:
-  * @brief  Gets the RTC divider value.
-  * @param  None
-  * @retval RTC Divider value.
-  */
-uint32_t RTC_GetDivider(void)
-{
-    52e8:	b480      	push	{r7}
-    52ea:	b083      	sub	sp, #12
-    52ec:	af00      	add	r7, sp, #0
-  uint32_t tmp = 0x00;
-    52ee:	2300      	movs	r3, #0
-    52f0:	607b      	str	r3, [r7, #4]
-  tmp = ((uint32_t)RTC->DIVH & (uint32_t)0x000F) << 16;
-    52f2:	4b0a      	ldr	r3, [pc, #40]	; (531c <RTC_GetDivider+0x34>)
-    52f4:	8a1b      	ldrh	r3, [r3, #16]
-    52f6:	b29b      	uxth	r3, r3
-    52f8:	041b      	lsls	r3, r3, #16
-    52fa:	f403 2370 	and.w	r3, r3, #983040	; 0xf0000
-    52fe:	607b      	str	r3, [r7, #4]
-  tmp |= RTC->DIVL;
-    5300:	4b06      	ldr	r3, [pc, #24]	; (531c <RTC_GetDivider+0x34>)
-    5302:	8a9b      	ldrh	r3, [r3, #20]
-    5304:	b29b      	uxth	r3, r3
-    5306:	461a      	mov	r2, r3
-    5308:	687b      	ldr	r3, [r7, #4]
-    530a:	4313      	orrs	r3, r2
-    530c:	607b      	str	r3, [r7, #4]
-  return tmp;
-    530e:	687b      	ldr	r3, [r7, #4]
-}
-    5310:	4618      	mov	r0, r3
-    5312:	370c      	adds	r7, #12
-    5314:	46bd      	mov	sp, r7
-    5316:	bc80      	pop	{r7}
-    5318:	4770      	bx	lr
-    531a:	bf00      	nop
-    531c:	40002800 	.word	0x40002800
-
-00005320 <RTC_WaitForLastTask>:
-  * @note   This function must be called before any write to RTC registers.
-  * @param  None
-  * @retval None
-  */
-void RTC_WaitForLastTask(void)
-{
-    5320:	b480      	push	{r7}
-    5322:	af00      	add	r7, sp, #0
-  /* Loop until RTOFF flag is set */
-  while ((RTC->CRL & RTC_FLAG_RTOFF) == (uint16_t)RESET)
-    5324:	bf00      	nop
-    5326:	4b06      	ldr	r3, [pc, #24]	; (5340 <RTC_WaitForLastTask+0x20>)
-    5328:	889b      	ldrh	r3, [r3, #4]
-    532a:	b29b      	uxth	r3, r3
-    532c:	f003 0320 	and.w	r3, r3, #32
-    5330:	2b00      	cmp	r3, #0
-    5332:	d0f8      	beq.n	5326 <RTC_WaitForLastTask+0x6>
-  {
-  }
-}
-    5334:	bf00      	nop
-    5336:	bf00      	nop
-    5338:	46bd      	mov	sp, r7
-    533a:	bc80      	pop	{r7}
-    533c:	4770      	bx	lr
-    533e:	bf00      	nop
-    5340:	40002800 	.word	0x40002800
-
-00005344 <RTC_WaitForSynchro>:
-  *   or an APB clock stop.
-  * @param  None
-  * @retval None
-  */
-void RTC_WaitForSynchro(void)
-{
-    5344:	b480      	push	{r7}
-    5346:	af00      	add	r7, sp, #0
-  /* Clear RSF flag */
-  RTC->CRL &= (uint16_t)~RTC_FLAG_RSF;
-    5348:	4b0a      	ldr	r3, [pc, #40]	; (5374 <RTC_WaitForSynchro+0x30>)
-    534a:	889b      	ldrh	r3, [r3, #4]
-    534c:	b29b      	uxth	r3, r3
-    534e:	4a09      	ldr	r2, [pc, #36]	; (5374 <RTC_WaitForSynchro+0x30>)
-    5350:	f023 0308 	bic.w	r3, r3, #8
-    5354:	b29b      	uxth	r3, r3
-    5356:	8093      	strh	r3, [r2, #4]
-  /* Loop until RSF flag is set */
-  while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET)
-    5358:	bf00      	nop
-    535a:	4b06      	ldr	r3, [pc, #24]	; (5374 <RTC_WaitForSynchro+0x30>)
-    535c:	889b      	ldrh	r3, [r3, #4]
-    535e:	b29b      	uxth	r3, r3
-    5360:	f003 0308 	and.w	r3, r3, #8
-    5364:	2b00      	cmp	r3, #0
-    5366:	d0f8      	beq.n	535a <RTC_WaitForSynchro+0x16>
-  {
-  }
-}
-    5368:	bf00      	nop
-    536a:	bf00      	nop
-    536c:	46bd      	mov	sp, r7
-    536e:	bc80      	pop	{r7}
-    5370:	4770      	bx	lr
-    5372:	bf00      	nop
-    5374:	40002800 	.word	0x40002800
-
-00005378 <RTC_GetFlagStatus>:
-  *     @arg RTC_FLAG_ALR: Alarm flag
-  *     @arg RTC_FLAG_SEC: Second flag
-  * @retval The new state of RTC_FLAG (SET or RESET).
-  */
-FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG)
-{
-    5378:	b480      	push	{r7}
-    537a:	b085      	sub	sp, #20
-    537c:	af00      	add	r7, sp, #0
-    537e:	4603      	mov	r3, r0
-    5380:	80fb      	strh	r3, [r7, #6]
-  FlagStatus bitstatus = RESET;
-    5382:	2300      	movs	r3, #0
-    5384:	73fb      	strb	r3, [r7, #15]
-  
-  /* Check the parameters */
-  assert_param(IS_RTC_GET_FLAG(RTC_FLAG)); 
-  
-  if ((RTC->CRL & RTC_FLAG) != (uint16_t)RESET)
-    5386:	4b09      	ldr	r3, [pc, #36]	; (53ac <RTC_GetFlagStatus+0x34>)
-    5388:	889b      	ldrh	r3, [r3, #4]
-    538a:	b29a      	uxth	r2, r3
-    538c:	88fb      	ldrh	r3, [r7, #6]
-    538e:	4013      	ands	r3, r2
-    5390:	b29b      	uxth	r3, r3
-    5392:	2b00      	cmp	r3, #0
-    5394:	d002      	beq.n	539c <RTC_GetFlagStatus+0x24>
-  {
-    bitstatus = SET;
-    5396:	2301      	movs	r3, #1
-    5398:	73fb      	strb	r3, [r7, #15]
-    539a:	e001      	b.n	53a0 <RTC_GetFlagStatus+0x28>
-  }
-  else
-  {
-    bitstatus = RESET;
-    539c:	2300      	movs	r3, #0
-    539e:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    53a0:	7bfb      	ldrb	r3, [r7, #15]
-}
-    53a2:	4618      	mov	r0, r3
-    53a4:	3714      	adds	r7, #20
-    53a6:	46bd      	mov	sp, r7
-    53a8:	bc80      	pop	{r7}
-    53aa:	4770      	bx	lr
-    53ac:	40002800 	.word	0x40002800
-
-000053b0 <RTC_ClearFlag>:
-  *     @arg RTC_FLAG_ALR: Alarm flag
-  *     @arg RTC_FLAG_SEC: Second flag
-  * @retval None
-  */
-void RTC_ClearFlag(uint16_t RTC_FLAG)
-{
-    53b0:	b480      	push	{r7}
-    53b2:	b083      	sub	sp, #12
-    53b4:	af00      	add	r7, sp, #0
-    53b6:	4603      	mov	r3, r0
-    53b8:	80fb      	strh	r3, [r7, #6]
-  /* Check the parameters */
-  assert_param(IS_RTC_CLEAR_FLAG(RTC_FLAG)); 
-    
-  /* Clear the corresponding RTC flag */
-  RTC->CRL &= (uint16_t)~RTC_FLAG;
-    53ba:	4b07      	ldr	r3, [pc, #28]	; (53d8 <RTC_ClearFlag+0x28>)
-    53bc:	889b      	ldrh	r3, [r3, #4]
-    53be:	b29a      	uxth	r2, r3
-    53c0:	88fb      	ldrh	r3, [r7, #6]
-    53c2:	43db      	mvns	r3, r3
-    53c4:	b29b      	uxth	r3, r3
-    53c6:	4904      	ldr	r1, [pc, #16]	; (53d8 <RTC_ClearFlag+0x28>)
-    53c8:	4013      	ands	r3, r2
-    53ca:	b29b      	uxth	r3, r3
-    53cc:	808b      	strh	r3, [r1, #4]
-}
-    53ce:	bf00      	nop
-    53d0:	370c      	adds	r7, #12
-    53d2:	46bd      	mov	sp, r7
-    53d4:	bc80      	pop	{r7}
-    53d6:	4770      	bx	lr
-    53d8:	40002800 	.word	0x40002800
-
-000053dc <RTC_GetITStatus>:
-  *     @arg RTC_IT_ALR: Alarm interrupt
-  *     @arg RTC_IT_SEC: Second interrupt
-  * @retval The new state of the RTC_IT (SET or RESET).
-  */
-ITStatus RTC_GetITStatus(uint16_t RTC_IT)
-{
-    53dc:	b480      	push	{r7}
-    53de:	b085      	sub	sp, #20
-    53e0:	af00      	add	r7, sp, #0
-    53e2:	4603      	mov	r3, r0
-    53e4:	80fb      	strh	r3, [r7, #6]
-  ITStatus bitstatus = RESET;
-    53e6:	2300      	movs	r3, #0
-    53e8:	73fb      	strb	r3, [r7, #15]
-  /* Check the parameters */
-  assert_param(IS_RTC_GET_IT(RTC_IT)); 
-  
-  bitstatus = (ITStatus)(RTC->CRL & RTC_IT);
-    53ea:	4b0f      	ldr	r3, [pc, #60]	; (5428 <RTC_GetITStatus+0x4c>)
-    53ec:	889b      	ldrh	r3, [r3, #4]
-    53ee:	b29b      	uxth	r3, r3
-    53f0:	b2da      	uxtb	r2, r3
-    53f2:	88fb      	ldrh	r3, [r7, #6]
-    53f4:	b2db      	uxtb	r3, r3
-    53f6:	4013      	ands	r3, r2
-    53f8:	73fb      	strb	r3, [r7, #15]
-  if (((RTC->CRH & RTC_IT) != (uint16_t)RESET) && (bitstatus != (uint16_t)RESET))
-    53fa:	4b0b      	ldr	r3, [pc, #44]	; (5428 <RTC_GetITStatus+0x4c>)
-    53fc:	881b      	ldrh	r3, [r3, #0]
-    53fe:	b29a      	uxth	r2, r3
-    5400:	88fb      	ldrh	r3, [r7, #6]
-    5402:	4013      	ands	r3, r2
-    5404:	b29b      	uxth	r3, r3
-    5406:	2b00      	cmp	r3, #0
-    5408:	d005      	beq.n	5416 <RTC_GetITStatus+0x3a>
-    540a:	7bfb      	ldrb	r3, [r7, #15]
-    540c:	2b00      	cmp	r3, #0
-    540e:	d002      	beq.n	5416 <RTC_GetITStatus+0x3a>
-  {
-    bitstatus = SET;
-    5410:	2301      	movs	r3, #1
-    5412:	73fb      	strb	r3, [r7, #15]
-    5414:	e001      	b.n	541a <RTC_GetITStatus+0x3e>
-  }
-  else
-  {
-    bitstatus = RESET;
-    5416:	2300      	movs	r3, #0
-    5418:	73fb      	strb	r3, [r7, #15]
-  }
-  return bitstatus;
-    541a:	7bfb      	ldrb	r3, [r7, #15]
-}
-    541c:	4618      	mov	r0, r3
-    541e:	3714      	adds	r7, #20
-    5420:	46bd      	mov	sp, r7
-    5422:	bc80      	pop	{r7}
-    5424:	4770      	bx	lr
-    5426:	bf00      	nop
-    5428:	40002800 	.word	0x40002800
-
-0000542c <RTC_ClearITPendingBit>:
-  *     @arg RTC_IT_ALR: Alarm interrupt
-  *     @arg RTC_IT_SEC: Second interrupt
-  * @retval None
-  */
-void RTC_ClearITPendingBit(uint16_t RTC_IT)
-{
-    542c:	b480      	push	{r7}
-    542e:	b083      	sub	sp, #12
-    5430:	af00      	add	r7, sp, #0
-    5432:	4603      	mov	r3, r0
-    5434:	80fb      	strh	r3, [r7, #6]
-  /* Check the parameters */
-  assert_param(IS_RTC_IT(RTC_IT));  
-  
-  /* Clear the corresponding RTC pending bit */
-  RTC->CRL &= (uint16_t)~RTC_IT;
-    5436:	4b07      	ldr	r3, [pc, #28]	; (5454 <RTC_ClearITPendingBit+0x28>)
-    5438:	889b      	ldrh	r3, [r3, #4]
-    543a:	b29a      	uxth	r2, r3
-    543c:	88fb      	ldrh	r3, [r7, #6]
-    543e:	43db      	mvns	r3, r3
-    5440:	b29b      	uxth	r3, r3
-    5442:	4904      	ldr	r1, [pc, #16]	; (5454 <RTC_ClearITPendingBit+0x28>)
-    5444:	4013      	ands	r3, r2
-    5446:	b29b      	uxth	r3, r3
-    5448:	808b      	strh	r3, [r1, #4]
-}
-    544a:	bf00      	nop
-    544c:	370c      	adds	r7, #12
-    544e:	46bd      	mov	sp, r7
-    5450:	bc80      	pop	{r7}
-    5452:	4770      	bx	lr
-    5454:	40002800 	.word	0x40002800
-
-00005458 <DAC_DeInit>:
-  * @brief  Deinitializes the DAC peripheral registers to their default reset values.
-  * @param  None
-  * @retval None
-  */
-void DAC_DeInit(void)
-{
-    5458:	b580      	push	{r7, lr}
-    545a:	af00      	add	r7, sp, #0
-  /* Enable DAC reset state */
-  RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, ENABLE);
-    545c:	2101      	movs	r1, #1
-    545e:	f04f 5000 	mov.w	r0, #536870912	; 0x20000000
-    5462:	f7fc f9ab 	bl	17bc <RCC_APB1PeriphResetCmd>
-  /* Release DAC from reset state */
-  RCC_APB1PeriphResetCmd(RCC_APB1Periph_DAC, DISABLE);
-    5466:	2100      	movs	r1, #0
-    5468:	f04f 5000 	mov.w	r0, #536870912	; 0x20000000
-    546c:	f7fc f9a6 	bl	17bc <RCC_APB1PeriphResetCmd>
-}
-    5470:	bf00      	nop
-    5472:	bd80      	pop	{r7, pc}
-
-00005474 <DAC_Init>:
-  * @param  DAC_InitStruct: pointer to a DAC_InitTypeDef structure that
-  *        contains the configuration information for the specified DAC channel.
-  * @retval None
-  */
-void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
-{
-    5474:	b480      	push	{r7}
-    5476:	b085      	sub	sp, #20
-    5478:	af00      	add	r7, sp, #0
-    547a:	6078      	str	r0, [r7, #4]
-    547c:	6039      	str	r1, [r7, #0]
-  uint32_t tmpreg1 = 0, tmpreg2 = 0;
-    547e:	2300      	movs	r3, #0
-    5480:	60fb      	str	r3, [r7, #12]
-    5482:	2300      	movs	r3, #0
-    5484:	60bb      	str	r3, [r7, #8]
-  assert_param(IS_DAC_GENERATE_WAVE(DAC_InitStruct->DAC_WaveGeneration));
-  assert_param(IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude));
-  assert_param(IS_DAC_OUTPUT_BUFFER_STATE(DAC_InitStruct->DAC_OutputBuffer));
-/*---------------------------- DAC CR Configuration --------------------------*/
-  /* Get the DAC CR value */
-  tmpreg1 = DAC->CR;
-    5486:	4b13      	ldr	r3, [pc, #76]	; (54d4 <DAC_Init+0x60>)
-    5488:	681b      	ldr	r3, [r3, #0]
-    548a:	60fb      	str	r3, [r7, #12]
-  /* Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits */
-  tmpreg1 &= ~(CR_CLEAR_MASK << DAC_Channel);
-    548c:	f640 72fe 	movw	r2, #4094	; 0xffe
-    5490:	687b      	ldr	r3, [r7, #4]
-    5492:	fa02 f303 	lsl.w	r3, r2, r3
-    5496:	43db      	mvns	r3, r3
-    5498:	68fa      	ldr	r2, [r7, #12]
-    549a:	4013      	ands	r3, r2
-    549c:	60fb      	str	r3, [r7, #12]
-     mask/amplitude for wave generation */
-  /* Set TSELx and TENx bits according to DAC_Trigger value */
-  /* Set WAVEx bits according to DAC_WaveGeneration value */
-  /* Set MAMPx bits according to DAC_LFSRUnmask_TriangleAmplitude value */ 
-  /* Set BOFFx bit according to DAC_OutputBuffer value */   
-  tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
-    549e:	683b      	ldr	r3, [r7, #0]
-    54a0:	681a      	ldr	r2, [r3, #0]
-    54a2:	683b      	ldr	r3, [r7, #0]
-    54a4:	685b      	ldr	r3, [r3, #4]
-    54a6:	431a      	orrs	r2, r3
-             DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
-    54a8:	683b      	ldr	r3, [r7, #0]
-    54aa:	689b      	ldr	r3, [r3, #8]
-  tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
-    54ac:	431a      	orrs	r2, r3
-             DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude | DAC_InitStruct->DAC_OutputBuffer);
-    54ae:	683b      	ldr	r3, [r7, #0]
-    54b0:	68db      	ldr	r3, [r3, #12]
-  tmpreg2 = (DAC_InitStruct->DAC_Trigger | DAC_InitStruct->DAC_WaveGeneration |
-    54b2:	4313      	orrs	r3, r2
-    54b4:	60bb      	str	r3, [r7, #8]
-  /* Calculate CR register value depending on DAC_Channel */
-  tmpreg1 |= tmpreg2 << DAC_Channel;
-    54b6:	68ba      	ldr	r2, [r7, #8]
-    54b8:	687b      	ldr	r3, [r7, #4]
-    54ba:	fa02 f303 	lsl.w	r3, r2, r3
-    54be:	68fa      	ldr	r2, [r7, #12]
-    54c0:	4313      	orrs	r3, r2
-    54c2:	60fb      	str	r3, [r7, #12]
-  /* Write to DAC CR */
-  DAC->CR = tmpreg1;
-    54c4:	4a03      	ldr	r2, [pc, #12]	; (54d4 <DAC_Init+0x60>)
-    54c6:	68fb      	ldr	r3, [r7, #12]
-    54c8:	6013      	str	r3, [r2, #0]
-}
-    54ca:	bf00      	nop
-    54cc:	3714      	adds	r7, #20
-    54ce:	46bd      	mov	sp, r7
-    54d0:	bc80      	pop	{r7}
-    54d2:	4770      	bx	lr
-    54d4:	40007400 	.word	0x40007400
-
-000054d8 <DAC_StructInit>:
-  * @param  DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will
-  *         be initialized.
-  * @retval None
-  */
-void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct)
-{
-    54d8:	b480      	push	{r7}
-    54da:	b083      	sub	sp, #12
-    54dc:	af00      	add	r7, sp, #0
-    54de:	6078      	str	r0, [r7, #4]
-/*--------------- Reset DAC init structure parameters values -----------------*/
-  /* Initialize the DAC_Trigger member */
-  DAC_InitStruct->DAC_Trigger = DAC_Trigger_None;
-    54e0:	687b      	ldr	r3, [r7, #4]
-    54e2:	2200      	movs	r2, #0
-    54e4:	601a      	str	r2, [r3, #0]
-  /* Initialize the DAC_WaveGeneration member */
-  DAC_InitStruct->DAC_WaveGeneration = DAC_WaveGeneration_None;
-    54e6:	687b      	ldr	r3, [r7, #4]
-    54e8:	2200      	movs	r2, #0
-    54ea:	605a      	str	r2, [r3, #4]
-  /* Initialize the DAC_LFSRUnmask_TriangleAmplitude member */
-  DAC_InitStruct->DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
-    54ec:	687b      	ldr	r3, [r7, #4]
-    54ee:	2200      	movs	r2, #0
-    54f0:	609a      	str	r2, [r3, #8]
-  /* Initialize the DAC_OutputBuffer member */
-  DAC_InitStruct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;
-    54f2:	687b      	ldr	r3, [r7, #4]
-    54f4:	2200      	movs	r2, #0
-    54f6:	60da      	str	r2, [r3, #12]
-}
-    54f8:	bf00      	nop
-    54fa:	370c      	adds	r7, #12
-    54fc:	46bd      	mov	sp, r7
-    54fe:	bc80      	pop	{r7}
-    5500:	4770      	bx	lr
-
-00005502 <DAC_Cmd>:
-  * @param  NewState: new state of the DAC channel. 
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState)
-{
-    5502:	b480      	push	{r7}
-    5504:	b083      	sub	sp, #12
-    5506:	af00      	add	r7, sp, #0
-    5508:	6078      	str	r0, [r7, #4]
-    550a:	460b      	mov	r3, r1
-    550c:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_DAC_CHANNEL(DAC_Channel));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    550e:	78fb      	ldrb	r3, [r7, #3]
-    5510:	2b00      	cmp	r3, #0
-    5512:	d009      	beq.n	5528 <DAC_Cmd+0x26>
-  {
-    /* Enable the selected DAC channel */
-    DAC->CR |= (DAC_CR_EN1 << DAC_Channel);
-    5514:	4b0c      	ldr	r3, [pc, #48]	; (5548 <DAC_Cmd+0x46>)
-    5516:	681a      	ldr	r2, [r3, #0]
-    5518:	2101      	movs	r1, #1
-    551a:	687b      	ldr	r3, [r7, #4]
-    551c:	fa01 f303 	lsl.w	r3, r1, r3
-    5520:	4909      	ldr	r1, [pc, #36]	; (5548 <DAC_Cmd+0x46>)
-    5522:	4313      	orrs	r3, r2
-    5524:	600b      	str	r3, [r1, #0]
-  else
-  {
-    /* Disable the selected DAC channel */
-    DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);
-  }
-}
-    5526:	e009      	b.n	553c <DAC_Cmd+0x3a>
-    DAC->CR &= ~(DAC_CR_EN1 << DAC_Channel);
-    5528:	4b07      	ldr	r3, [pc, #28]	; (5548 <DAC_Cmd+0x46>)
-    552a:	681a      	ldr	r2, [r3, #0]
-    552c:	2101      	movs	r1, #1
-    552e:	687b      	ldr	r3, [r7, #4]
-    5530:	fa01 f303 	lsl.w	r3, r1, r3
-    5534:	43db      	mvns	r3, r3
-    5536:	4904      	ldr	r1, [pc, #16]	; (5548 <DAC_Cmd+0x46>)
-    5538:	4013      	ands	r3, r2
-    553a:	600b      	str	r3, [r1, #0]
-}
-    553c:	bf00      	nop
-    553e:	370c      	adds	r7, #12
-    5540:	46bd      	mov	sp, r7
-    5542:	bc80      	pop	{r7}
-    5544:	4770      	bx	lr
-    5546:	bf00      	nop
-    5548:	40007400 	.word	0x40007400
-
-0000554c <DAC_DMACmd>:
-  * @param  NewState: new state of the selected DAC channel DMA request.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState)
-{
-    554c:	b480      	push	{r7}
-    554e:	b083      	sub	sp, #12
-    5550:	af00      	add	r7, sp, #0
-    5552:	6078      	str	r0, [r7, #4]
-    5554:	460b      	mov	r3, r1
-    5556:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_DAC_CHANNEL(DAC_Channel));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    5558:	78fb      	ldrb	r3, [r7, #3]
-    555a:	2b00      	cmp	r3, #0
-    555c:	d00a      	beq.n	5574 <DAC_DMACmd+0x28>
-  {
-    /* Enable the selected DAC channel DMA request */
-    DAC->CR |= (DAC_CR_DMAEN1 << DAC_Channel);
-    555e:	4b0d      	ldr	r3, [pc, #52]	; (5594 <DAC_DMACmd+0x48>)
-    5560:	681a      	ldr	r2, [r3, #0]
-    5562:	f44f 5180 	mov.w	r1, #4096	; 0x1000
-    5566:	687b      	ldr	r3, [r7, #4]
-    5568:	fa01 f303 	lsl.w	r3, r1, r3
-    556c:	4909      	ldr	r1, [pc, #36]	; (5594 <DAC_DMACmd+0x48>)
-    556e:	4313      	orrs	r3, r2
-    5570:	600b      	str	r3, [r1, #0]
-  else
-  {
-    /* Disable the selected DAC channel DMA request */
-    DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);
-  }
-}
-    5572:	e00a      	b.n	558a <DAC_DMACmd+0x3e>
-    DAC->CR &= ~(DAC_CR_DMAEN1 << DAC_Channel);
-    5574:	4b07      	ldr	r3, [pc, #28]	; (5594 <DAC_DMACmd+0x48>)
-    5576:	681a      	ldr	r2, [r3, #0]
-    5578:	f44f 5180 	mov.w	r1, #4096	; 0x1000
-    557c:	687b      	ldr	r3, [r7, #4]
-    557e:	fa01 f303 	lsl.w	r3, r1, r3
-    5582:	43db      	mvns	r3, r3
-    5584:	4903      	ldr	r1, [pc, #12]	; (5594 <DAC_DMACmd+0x48>)
-    5586:	4013      	ands	r3, r2
-    5588:	600b      	str	r3, [r1, #0]
-}
-    558a:	bf00      	nop
-    558c:	370c      	adds	r7, #12
-    558e:	46bd      	mov	sp, r7
-    5590:	bc80      	pop	{r7}
-    5592:	4770      	bx	lr
-    5594:	40007400 	.word	0x40007400
-
-00005598 <DAC_SoftwareTriggerCmd>:
-  * @param  NewState: new state of the selected DAC channel software trigger.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState)
-{
-    5598:	b480      	push	{r7}
-    559a:	b083      	sub	sp, #12
-    559c:	af00      	add	r7, sp, #0
-    559e:	6078      	str	r0, [r7, #4]
-    55a0:	460b      	mov	r3, r1
-    55a2:	70fb      	strb	r3, [r7, #3]
-  /* Check the parameters */
-  assert_param(IS_DAC_CHANNEL(DAC_Channel));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    55a4:	78fb      	ldrb	r3, [r7, #3]
-    55a6:	2b00      	cmp	r3, #0
-    55a8:	d00a      	beq.n	55c0 <DAC_SoftwareTriggerCmd+0x28>
-  {
-    /* Enable software trigger for the selected DAC channel */
-    DAC->SWTRIGR |= (uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4);
-    55aa:	4b0d      	ldr	r3, [pc, #52]	; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
-    55ac:	685a      	ldr	r2, [r3, #4]
-    55ae:	687b      	ldr	r3, [r7, #4]
-    55b0:	091b      	lsrs	r3, r3, #4
-    55b2:	2101      	movs	r1, #1
-    55b4:	fa01 f303 	lsl.w	r3, r1, r3
-    55b8:	4909      	ldr	r1, [pc, #36]	; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
-    55ba:	4313      	orrs	r3, r2
-    55bc:	604b      	str	r3, [r1, #4]
-  else
-  {
-    /* Disable software trigger for the selected DAC channel */
-    DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
-  }
-}
-    55be:	e00a      	b.n	55d6 <DAC_SoftwareTriggerCmd+0x3e>
-    DAC->SWTRIGR &= ~((uint32_t)DAC_SWTRIGR_SWTRIG1 << (DAC_Channel >> 4));
-    55c0:	4b07      	ldr	r3, [pc, #28]	; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
-    55c2:	685a      	ldr	r2, [r3, #4]
-    55c4:	687b      	ldr	r3, [r7, #4]
-    55c6:	091b      	lsrs	r3, r3, #4
-    55c8:	2101      	movs	r1, #1
-    55ca:	fa01 f303 	lsl.w	r3, r1, r3
-    55ce:	43db      	mvns	r3, r3
-    55d0:	4903      	ldr	r1, [pc, #12]	; (55e0 <DAC_SoftwareTriggerCmd+0x48>)
-    55d2:	4013      	ands	r3, r2
-    55d4:	604b      	str	r3, [r1, #4]
-}
-    55d6:	bf00      	nop
-    55d8:	370c      	adds	r7, #12
-    55da:	46bd      	mov	sp, r7
-    55dc:	bc80      	pop	{r7}
-    55de:	4770      	bx	lr
-    55e0:	40007400 	.word	0x40007400
-
-000055e4 <DAC_DualSoftwareTriggerCmd>:
-  * @param  NewState: new state of the DAC channels software triggers.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void DAC_DualSoftwareTriggerCmd(FunctionalState NewState)
-{
-    55e4:	b480      	push	{r7}
-    55e6:	b083      	sub	sp, #12
-    55e8:	af00      	add	r7, sp, #0
-    55ea:	4603      	mov	r3, r0
-    55ec:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    55ee:	79fb      	ldrb	r3, [r7, #7]
-    55f0:	2b00      	cmp	r3, #0
-    55f2:	d006      	beq.n	5602 <DAC_DualSoftwareTriggerCmd+0x1e>
-  {
-    /* Enable software trigger for both DAC channels */
-    DAC->SWTRIGR |= DUAL_SWTRIG_SET ;
-    55f4:	4b08      	ldr	r3, [pc, #32]	; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
-    55f6:	685b      	ldr	r3, [r3, #4]
-    55f8:	4a07      	ldr	r2, [pc, #28]	; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
-    55fa:	f043 0303 	orr.w	r3, r3, #3
-    55fe:	6053      	str	r3, [r2, #4]
-  else
-  {
-    /* Disable software trigger for both DAC channels */
-    DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
-  }
-}
-    5600:	e005      	b.n	560e <DAC_DualSoftwareTriggerCmd+0x2a>
-    DAC->SWTRIGR &= DUAL_SWTRIG_RESET;
-    5602:	4b05      	ldr	r3, [pc, #20]	; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
-    5604:	685b      	ldr	r3, [r3, #4]
-    5606:	4a04      	ldr	r2, [pc, #16]	; (5618 <DAC_DualSoftwareTriggerCmd+0x34>)
-    5608:	f023 0303 	bic.w	r3, r3, #3
-    560c:	6053      	str	r3, [r2, #4]
-}
-    560e:	bf00      	nop
-    5610:	370c      	adds	r7, #12
-    5612:	46bd      	mov	sp, r7
-    5614:	bc80      	pop	{r7}
-    5616:	4770      	bx	lr
-    5618:	40007400 	.word	0x40007400
-
-0000561c <DAC_WaveGenerationCmd>:
-  * @param  NewState: new state of the selected DAC channel wave generation.
-  *   This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState)
-{
-    561c:	b480      	push	{r7}
-    561e:	b085      	sub	sp, #20
-    5620:	af00      	add	r7, sp, #0
-    5622:	60f8      	str	r0, [r7, #12]
-    5624:	60b9      	str	r1, [r7, #8]
-    5626:	4613      	mov	r3, r2
-    5628:	71fb      	strb	r3, [r7, #7]
-  /* Check the parameters */
-  assert_param(IS_DAC_CHANNEL(DAC_Channel));
-  assert_param(IS_DAC_WAVE(DAC_Wave)); 
-  assert_param(IS_FUNCTIONAL_STATE(NewState));
-  if (NewState != DISABLE)
-    562a:	79fb      	ldrb	r3, [r7, #7]
-    562c:	2b00      	cmp	r3, #0
-    562e:	d009      	beq.n	5644 <DAC_WaveGenerationCmd+0x28>
-  {
-    /* Enable the selected wave generation for the selected DAC channel */
-    DAC->CR |= DAC_Wave << DAC_Channel;
-    5630:	4b0c      	ldr	r3, [pc, #48]	; (5664 <DAC_WaveGenerationCmd+0x48>)
-    5632:	681a      	ldr	r2, [r3, #0]
-    5634:	68b9      	ldr	r1, [r7, #8]
-    5636:	68fb      	ldr	r3, [r7, #12]
-    5638:	fa01 f303 	lsl.w	r3, r1, r3
-    563c:	4909      	ldr	r1, [pc, #36]	; (5664 <DAC_WaveGenerationCmd+0x48>)
-    563e:	4313      	orrs	r3, r2
-    5640:	600b      	str	r3, [r1, #0]
-  else
-  {
-    /* Disable the selected wave generation for the selected DAC channel */
-    DAC->CR &= ~(DAC_Wave << DAC_Channel);
-  }
-}
-    5642:	e009      	b.n	5658 <DAC_WaveGenerationCmd+0x3c>
-    DAC->CR &= ~(DAC_Wave << DAC_Channel);
-    5644:	4b07      	ldr	r3, [pc, #28]	; (5664 <DAC_WaveGenerationCmd+0x48>)
-    5646:	681a      	ldr	r2, [r3, #0]
-    5648:	68b9      	ldr	r1, [r7, #8]
-    564a:	68fb      	ldr	r3, [r7, #12]
-    564c:	fa01 f303 	lsl.w	r3, r1, r3
-    5650:	43db      	mvns	r3, r3
-    5652:	4904      	ldr	r1, [pc, #16]	; (5664 <DAC_WaveGenerationCmd+0x48>)
-    5654:	4013      	ands	r3, r2
-    5656:	600b      	str	r3, [r1, #0]
-}
-    5658:	bf00      	nop
-    565a:	3714      	adds	r7, #20
-    565c:	46bd      	mov	sp, r7
-    565e:	bc80      	pop	{r7}
-    5660:	4770      	bx	lr
-    5662:	bf00      	nop
-    5664:	40007400 	.word	0x40007400
-
-00005668 <DAC_SetChannel1Data>:
-  *     @arg DAC_Align_12b_R: 12bit right data alignment selected
-  * @param  Data : Data to be loaded in the selected data holding register.
-  * @retval None
-  */
-void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
-{  
-    5668:	b480      	push	{r7}
-    566a:	b085      	sub	sp, #20
-    566c:	af00      	add	r7, sp, #0
-    566e:	6078      	str	r0, [r7, #4]
-    5670:	460b      	mov	r3, r1
-    5672:	807b      	strh	r3, [r7, #2]
-  __IO uint32_t tmp = 0;
-    5674:	2300      	movs	r3, #0
-    5676:	60fb      	str	r3, [r7, #12]
-  
-  /* Check the parameters */
-  assert_param(IS_DAC_ALIGN(DAC_Align));
-  assert_param(IS_DAC_DATA(Data));
-  
-  tmp = (uint32_t)DAC_BASE; 
-    5678:	4b07      	ldr	r3, [pc, #28]	; (5698 <DAC_SetChannel1Data+0x30>)
-    567a:	60fb      	str	r3, [r7, #12]
-  tmp += DHR12R1_OFFSET + DAC_Align;
-    567c:	68fa      	ldr	r2, [r7, #12]
-    567e:	687b      	ldr	r3, [r7, #4]
-    5680:	4413      	add	r3, r2
-    5682:	3308      	adds	r3, #8
-    5684:	60fb      	str	r3, [r7, #12]
-
-  /* Set the DAC channel1 selected data holding register */
-  *(__IO uint32_t *) tmp = Data;
-    5686:	68fb      	ldr	r3, [r7, #12]
-    5688:	461a      	mov	r2, r3
-    568a:	887b      	ldrh	r3, [r7, #2]
-    568c:	6013      	str	r3, [r2, #0]
-}
-    568e:	bf00      	nop
-    5690:	3714      	adds	r7, #20
-    5692:	46bd      	mov	sp, r7
-    5694:	bc80      	pop	{r7}
-    5696:	4770      	bx	lr
-    5698:	40007400 	.word	0x40007400
-
-0000569c <DAC_SetChannel2Data>:
-  *     @arg DAC_Align_12b_R: 12bit right data alignment selected
-  * @param  Data : Data to be loaded in the selected data holding register.
-  * @retval None
-  */
-void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)
-{
-    569c:	b480      	push	{r7}
-    569e:	b085      	sub	sp, #20
-    56a0:	af00      	add	r7, sp, #0
-    56a2:	6078      	str	r0, [r7, #4]
-    56a4:	460b      	mov	r3, r1
-    56a6:	807b      	strh	r3, [r7, #2]
-  __IO uint32_t tmp = 0;
-    56a8:	2300      	movs	r3, #0
-    56aa:	60fb      	str	r3, [r7, #12]
-
-  /* Check the parameters */
-  assert_param(IS_DAC_ALIGN(DAC_Align));
-  assert_param(IS_DAC_DATA(Data));
-  
-  tmp = (uint32_t)DAC_BASE;
-    56ac:	4b07      	ldr	r3, [pc, #28]	; (56cc <DAC_SetChannel2Data+0x30>)
-    56ae:	60fb      	str	r3, [r7, #12]
-  tmp += DHR12R2_OFFSET + DAC_Align;
-    56b0:	68fa      	ldr	r2, [r7, #12]
-    56b2:	687b      	ldr	r3, [r7, #4]
-    56b4:	4413      	add	r3, r2
-    56b6:	3314      	adds	r3, #20
-    56b8:	60fb      	str	r3, [r7, #12]
-
-  /* Set the DAC channel2 selected data holding register */
-  *(__IO uint32_t *)tmp = Data;
-    56ba:	68fb      	ldr	r3, [r7, #12]
-    56bc:	461a      	mov	r2, r3
-    56be:	887b      	ldrh	r3, [r7, #2]
-    56c0:	6013      	str	r3, [r2, #0]
-}
-    56c2:	bf00      	nop
-    56c4:	3714      	adds	r7, #20
-    56c6:	46bd      	mov	sp, r7
-    56c8:	bc80      	pop	{r7}
-    56ca:	4770      	bx	lr
-    56cc:	40007400 	.word	0x40007400
-
-000056d0 <DAC_SetDualChannelData>:
-  * @param  Data1: Data for DAC Channel1 to be loaded in the selected data 
-  *   holding register.
-  * @retval None
-  */
-void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)
-{
-    56d0:	b480      	push	{r7}
-    56d2:	b085      	sub	sp, #20
-    56d4:	af00      	add	r7, sp, #0
-    56d6:	6078      	str	r0, [r7, #4]
-    56d8:	460b      	mov	r3, r1
-    56da:	807b      	strh	r3, [r7, #2]
-    56dc:	4613      	mov	r3, r2
-    56de:	803b      	strh	r3, [r7, #0]
-  uint32_t data = 0, tmp = 0;
-    56e0:	2300      	movs	r3, #0
-    56e2:	60fb      	str	r3, [r7, #12]
-    56e4:	2300      	movs	r3, #0
-    56e6:	60bb      	str	r3, [r7, #8]
-  assert_param(IS_DAC_ALIGN(DAC_Align));
-  assert_param(IS_DAC_DATA(Data1));
-  assert_param(IS_DAC_DATA(Data2));
-  
-  /* Calculate and set dual DAC data holding register value */
-  if (DAC_Align == DAC_Align_8b_R)
-    56e8:	687b      	ldr	r3, [r7, #4]
-    56ea:	2b08      	cmp	r3, #8
-    56ec:	d105      	bne.n	56fa <DAC_SetDualChannelData+0x2a>
-  {
-    data = ((uint32_t)Data2 << 8) | Data1; 
-    56ee:	887b      	ldrh	r3, [r7, #2]
-    56f0:	021a      	lsls	r2, r3, #8
-    56f2:	883b      	ldrh	r3, [r7, #0]
-    56f4:	4313      	orrs	r3, r2
-    56f6:	60fb      	str	r3, [r7, #12]
-    56f8:	e004      	b.n	5704 <DAC_SetDualChannelData+0x34>
-  }
-  else
-  {
-    data = ((uint32_t)Data2 << 16) | Data1;
-    56fa:	887b      	ldrh	r3, [r7, #2]
-    56fc:	041a      	lsls	r2, r3, #16
-    56fe:	883b      	ldrh	r3, [r7, #0]
-    5700:	4313      	orrs	r3, r2
-    5702:	60fb      	str	r3, [r7, #12]
-  }
-  
-  tmp = (uint32_t)DAC_BASE;
-    5704:	4b07      	ldr	r3, [pc, #28]	; (5724 <DAC_SetDualChannelData+0x54>)
-    5706:	60bb      	str	r3, [r7, #8]
-  tmp += DHR12RD_OFFSET + DAC_Align;
-    5708:	687a      	ldr	r2, [r7, #4]
-    570a:	68bb      	ldr	r3, [r7, #8]
-    570c:	4413      	add	r3, r2
-    570e:	3320      	adds	r3, #32
-    5710:	60bb      	str	r3, [r7, #8]
-
-  /* Set the dual DAC selected data holding register */
-  *(__IO uint32_t *)tmp = data;
-    5712:	68bb      	ldr	r3, [r7, #8]
-    5714:	68fa      	ldr	r2, [r7, #12]
-    5716:	601a      	str	r2, [r3, #0]
-}
-    5718:	bf00      	nop
-    571a:	3714      	adds	r7, #20
-    571c:	46bd      	mov	sp, r7
-    571e:	bc80      	pop	{r7}
-    5720:	4770      	bx	lr
-    5722:	bf00      	nop
-    5724:	40007400 	.word	0x40007400
-
-00005728 <DAC_GetDataOutputValue>:
-  *     @arg DAC_Channel_1: DAC Channel1 selected
-  *     @arg DAC_Channel_2: DAC Channel2 selected
-  * @retval The selected DAC channel data output value.
-  */
-uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)
-{
-    5728:	b480      	push	{r7}
-    572a:	b085      	sub	sp, #20
-    572c:	af00      	add	r7, sp, #0
-    572e:	6078      	str	r0, [r7, #4]
-  __IO uint32_t tmp = 0;
-    5730:	2300      	movs	r3, #0
-    5732:	60fb      	str	r3, [r7, #12]
-  
-  /* Check the parameters */
-  assert_param(IS_DAC_CHANNEL(DAC_Channel));
-  
-  tmp = (uint32_t) DAC_BASE ;
-    5734:	4b07      	ldr	r3, [pc, #28]	; (5754 <DAC_GetDataOutputValue+0x2c>)
-    5736:	60fb      	str	r3, [r7, #12]
-  tmp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2);
-    5738:	687b      	ldr	r3, [r7, #4]
-    573a:	089a      	lsrs	r2, r3, #2
-    573c:	68fb      	ldr	r3, [r7, #12]
-    573e:	4413      	add	r3, r2
-    5740:	332c      	adds	r3, #44	; 0x2c
-    5742:	60fb      	str	r3, [r7, #12]
-  
-  /* Returns the DAC channel data output register value */
-  return (uint16_t) (*(__IO uint32_t*) tmp);
-    5744:	68fb      	ldr	r3, [r7, #12]
-    5746:	681b      	ldr	r3, [r3, #0]
-    5748:	b29b      	uxth	r3, r3
-}
-    574a:	4618      	mov	r0, r3
-    574c:	3714      	adds	r7, #20
-    574e:	46bd      	mov	sp, r7
-    5750:	bc80      	pop	{r7}
-    5752:	4770      	bx	lr
-    5754:	40007400 	.word	0x40007400
-
-00005758 <NVIC_PriorityGroupConfig>:
-  *     @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority
-  *                                0 bits for subpriority
-  * @retval None
-  */
-void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
-{
-    5758:	b480      	push	{r7}
-    575a:	b083      	sub	sp, #12
-    575c:	af00      	add	r7, sp, #0
-    575e:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
-  
-  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
-  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
-    5760:	4a05      	ldr	r2, [pc, #20]	; (5778 <NVIC_PriorityGroupConfig+0x20>)
-    5762:	687b      	ldr	r3, [r7, #4]
-    5764:	f043 63bf 	orr.w	r3, r3, #100139008	; 0x5f80000
-    5768:	f443 3300 	orr.w	r3, r3, #131072	; 0x20000
-    576c:	60d3      	str	r3, [r2, #12]
-}
-    576e:	bf00      	nop
-    5770:	370c      	adds	r7, #12
-    5772:	46bd      	mov	sp, r7
-    5774:	bc80      	pop	{r7}
-    5776:	4770      	bx	lr
-    5778:	e000ed00 	.word	0xe000ed00
-
-0000577c <NVIC_Init>:
-  * @param  NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains
-  *         the configuration information for the specified NVIC peripheral.
-  * @retval None
-  */
-void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
-{
-    577c:	b480      	push	{r7}
-    577e:	b087      	sub	sp, #28
-    5780:	af00      	add	r7, sp, #0
-    5782:	6078      	str	r0, [r7, #4]
-  uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F;
-    5784:	2300      	movs	r3, #0
-    5786:	617b      	str	r3, [r7, #20]
-    5788:	2300      	movs	r3, #0
-    578a:	613b      	str	r3, [r7, #16]
-    578c:	230f      	movs	r3, #15
-    578e:	60fb      	str	r3, [r7, #12]
-  /* Check the parameters */
-  assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd));
-  assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority));  
-  assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority));
-    
-  if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE)
-    5790:	687b      	ldr	r3, [r7, #4]
-    5792:	78db      	ldrb	r3, [r3, #3]
-    5794:	2b00      	cmp	r3, #0
-    5796:	d03a      	beq.n	580e <NVIC_Init+0x92>
-  {
-    /* Compute the Corresponding IRQ Priority --------------------------------*/    
-    tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
-    5798:	4b27      	ldr	r3, [pc, #156]	; (5838 <NVIC_Init+0xbc>)
-    579a:	68db      	ldr	r3, [r3, #12]
-    579c:	43db      	mvns	r3, r3
-    579e:	0a1b      	lsrs	r3, r3, #8
-    57a0:	f003 0307 	and.w	r3, r3, #7
-    57a4:	617b      	str	r3, [r7, #20]
-    tmppre = (0x4 - tmppriority);
-    57a6:	697b      	ldr	r3, [r7, #20]
-    57a8:	f1c3 0304 	rsb	r3, r3, #4
-    57ac:	613b      	str	r3, [r7, #16]
-    tmpsub = tmpsub >> tmppriority;
-    57ae:	68fa      	ldr	r2, [r7, #12]
-    57b0:	697b      	ldr	r3, [r7, #20]
-    57b2:	fa22 f303 	lsr.w	r3, r2, r3
-    57b6:	60fb      	str	r3, [r7, #12]
-
-    tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
-    57b8:	687b      	ldr	r3, [r7, #4]
-    57ba:	785b      	ldrb	r3, [r3, #1]
-    57bc:	461a      	mov	r2, r3
-    57be:	693b      	ldr	r3, [r7, #16]
-    57c0:	fa02 f303 	lsl.w	r3, r2, r3
-    57c4:	617b      	str	r3, [r7, #20]
-    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
-    57c6:	687b      	ldr	r3, [r7, #4]
-    57c8:	789b      	ldrb	r3, [r3, #2]
-    57ca:	461a      	mov	r2, r3
-    57cc:	68fb      	ldr	r3, [r7, #12]
-    57ce:	4013      	ands	r3, r2
-    57d0:	697a      	ldr	r2, [r7, #20]
-    57d2:	4313      	orrs	r3, r2
-    57d4:	617b      	str	r3, [r7, #20]
-    tmppriority = tmppriority << 0x04;
-    57d6:	697b      	ldr	r3, [r7, #20]
-    57d8:	011b      	lsls	r3, r3, #4
-    57da:	617b      	str	r3, [r7, #20]
-        
-    NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
-    57dc:	4a17      	ldr	r2, [pc, #92]	; (583c <NVIC_Init+0xc0>)
-    57de:	687b      	ldr	r3, [r7, #4]
-    57e0:	781b      	ldrb	r3, [r3, #0]
-    57e2:	6979      	ldr	r1, [r7, #20]
-    57e4:	b2c9      	uxtb	r1, r1
-    57e6:	4413      	add	r3, r2
-    57e8:	460a      	mov	r2, r1
-    57ea:	f883 2300 	strb.w	r2, [r3, #768]	; 0x300
-    
-    /* Enable the Selected IRQ Channels --------------------------------------*/
-    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
-    57ee:	687b      	ldr	r3, [r7, #4]
-    57f0:	781b      	ldrb	r3, [r3, #0]
-    57f2:	f003 031f 	and.w	r3, r3, #31
-    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-    57f6:	4911      	ldr	r1, [pc, #68]	; (583c <NVIC_Init+0xc0>)
-    57f8:	687a      	ldr	r2, [r7, #4]
-    57fa:	7812      	ldrb	r2, [r2, #0]
-    57fc:	0952      	lsrs	r2, r2, #5
-    57fe:	b2d2      	uxtb	r2, r2
-    5800:	4610      	mov	r0, r2
-      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
-    5802:	2201      	movs	r2, #1
-    5804:	fa02 f303 	lsl.w	r3, r2, r3
-    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-    5808:	f841 3020 	str.w	r3, [r1, r0, lsl #2]
-  {
-    /* Disable the Selected IRQ Channels -------------------------------------*/
-    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
-  }
-}
-    580c:	e00f      	b.n	582e <NVIC_Init+0xb2>
-      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
-    580e:	687b      	ldr	r3, [r7, #4]
-    5810:	781b      	ldrb	r3, [r3, #0]
-    5812:	f003 031f 	and.w	r3, r3, #31
-    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-    5816:	4909      	ldr	r1, [pc, #36]	; (583c <NVIC_Init+0xc0>)
-    5818:	687a      	ldr	r2, [r7, #4]
-    581a:	7812      	ldrb	r2, [r2, #0]
-    581c:	0952      	lsrs	r2, r2, #5
-    581e:	b2d2      	uxtb	r2, r2
-    5820:	4610      	mov	r0, r2
-      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
-    5822:	2201      	movs	r2, #1
-    5824:	409a      	lsls	r2, r3
-    NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
-    5826:	f100 0320 	add.w	r3, r0, #32
-    582a:	f841 2023 	str.w	r2, [r1, r3, lsl #2]
-}
-    582e:	bf00      	nop
-    5830:	371c      	adds	r7, #28
-    5832:	46bd      	mov	sp, r7
-    5834:	bc80      	pop	{r7}
-    5836:	4770      	bx	lr
-    5838:	e000ed00 	.word	0xe000ed00
-    583c:	e000e100 	.word	0xe000e100
-
-00005840 <NVIC_SetVectorTable>:
-  * @param  Offset: Vector Table base offset field. This value must be a multiple 
-  *         of 0x200.
-  * @retval None
-  */
-void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)
-{ 
-    5840:	b480      	push	{r7}
-    5842:	b083      	sub	sp, #12
-    5844:	af00      	add	r7, sp, #0
-    5846:	6078      	str	r0, [r7, #4]
-    5848:	6039      	str	r1, [r7, #0]
-  /* Check the parameters */
-  assert_param(IS_NVIC_VECTTAB(NVIC_VectTab));
-  assert_param(IS_NVIC_OFFSET(Offset));  
-   
-  SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80);
-    584a:	683b      	ldr	r3, [r7, #0]
-    584c:	f023 4360 	bic.w	r3, r3, #3758096384	; 0xe0000000
-    5850:	f023 037f 	bic.w	r3, r3, #127	; 0x7f
-    5854:	4904      	ldr	r1, [pc, #16]	; (5868 <NVIC_SetVectorTable+0x28>)
-    5856:	687a      	ldr	r2, [r7, #4]
-    5858:	4313      	orrs	r3, r2
-    585a:	608b      	str	r3, [r1, #8]
-}
-    585c:	bf00      	nop
-    585e:	370c      	adds	r7, #12
-    5860:	46bd      	mov	sp, r7
-    5862:	bc80      	pop	{r7}
-    5864:	4770      	bx	lr
-    5866:	bf00      	nop
-    5868:	e000ed00 	.word	0xe000ed00
-
-0000586c <NVIC_SystemLPConfig>:
-  *     @arg NVIC_LP_SLEEPONEXIT
-  * @param  NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE.
-  * @retval None
-  */
-void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)
-{
-    586c:	b480      	push	{r7}
-    586e:	b083      	sub	sp, #12
-    5870:	af00      	add	r7, sp, #0
-    5872:	4603      	mov	r3, r0
-    5874:	460a      	mov	r2, r1
-    5876:	71fb      	strb	r3, [r7, #7]
-    5878:	4613      	mov	r3, r2
-    587a:	71bb      	strb	r3, [r7, #6]
-  /* Check the parameters */
-  assert_param(IS_NVIC_LP(LowPowerMode));
-  assert_param(IS_FUNCTIONAL_STATE(NewState));  
-  
-  if (NewState != DISABLE)
-    587c:	79bb      	ldrb	r3, [r7, #6]
-    587e:	2b00      	cmp	r3, #0
-    5880:	d006      	beq.n	5890 <NVIC_SystemLPConfig+0x24>
-  {
-    SCB->SCR |= LowPowerMode;
-    5882:	4b09      	ldr	r3, [pc, #36]	; (58a8 <NVIC_SystemLPConfig+0x3c>)
-    5884:	691a      	ldr	r2, [r3, #16]
-    5886:	79fb      	ldrb	r3, [r7, #7]
-    5888:	4907      	ldr	r1, [pc, #28]	; (58a8 <NVIC_SystemLPConfig+0x3c>)
-    588a:	4313      	orrs	r3, r2
-    588c:	610b      	str	r3, [r1, #16]
-  }
-  else
-  {
-    SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
-  }
-}
-    588e:	e006      	b.n	589e <NVIC_SystemLPConfig+0x32>
-    SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode);
-    5890:	4b05      	ldr	r3, [pc, #20]	; (58a8 <NVIC_SystemLPConfig+0x3c>)
-    5892:	691a      	ldr	r2, [r3, #16]
-    5894:	79fb      	ldrb	r3, [r7, #7]
-    5896:	43db      	mvns	r3, r3
-    5898:	4903      	ldr	r1, [pc, #12]	; (58a8 <NVIC_SystemLPConfig+0x3c>)
-    589a:	4013      	ands	r3, r2
-    589c:	610b      	str	r3, [r1, #16]
-}
-    589e:	bf00      	nop
-    58a0:	370c      	adds	r7, #12
-    58a2:	46bd      	mov	sp, r7
-    58a4:	bc80      	pop	{r7}
-    58a6:	4770      	bx	lr
-    58a8:	e000ed00 	.word	0xe000ed00
-
-000058ac <SysTick_CLKSourceConfig>:
-  *     @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
-  *     @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
-  * @retval None
-  */
-void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
-{
-    58ac:	b480      	push	{r7}
-    58ae:	b083      	sub	sp, #12
-    58b0:	af00      	add	r7, sp, #0
-    58b2:	6078      	str	r0, [r7, #4]
-  /* Check the parameters */
-  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
-  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
-    58b4:	687b      	ldr	r3, [r7, #4]
-    58b6:	2b04      	cmp	r3, #4
-    58b8:	d106      	bne.n	58c8 <SysTick_CLKSourceConfig+0x1c>
-  {
-    SysTick->CTRL |= SysTick_CLKSource_HCLK;
-    58ba:	4b09      	ldr	r3, [pc, #36]	; (58e0 <SysTick_CLKSourceConfig+0x34>)
-    58bc:	681b      	ldr	r3, [r3, #0]
-    58be:	4a08      	ldr	r2, [pc, #32]	; (58e0 <SysTick_CLKSourceConfig+0x34>)
-    58c0:	f043 0304 	orr.w	r3, r3, #4
-    58c4:	6013      	str	r3, [r2, #0]
-  }
-  else
-  {
-    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
-  }
-}
-    58c6:	e005      	b.n	58d4 <SysTick_CLKSourceConfig+0x28>
-    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
-    58c8:	4b05      	ldr	r3, [pc, #20]	; (58e0 <SysTick_CLKSourceConfig+0x34>)
-    58ca:	681b      	ldr	r3, [r3, #0]
-    58cc:	4a04      	ldr	r2, [pc, #16]	; (58e0 <SysTick_CLKSourceConfig+0x34>)
-    58ce:	f023 0304 	bic.w	r3, r3, #4
-    58d2:	6013      	str	r3, [r2, #0]
-}
-    58d4:	bf00      	nop
-    58d6:	370c      	adds	r7, #12
-    58d8:	46bd      	mov	sp, r7
-    58da:	bc80      	pop	{r7}
-    58dc:	4770      	bx	lr
-    58de:	bf00      	nop
-    58e0:	e000e010 	.word	0xe000e010
-
-000058e4 <sleep>:
-#define USE_STDPERIPH_DRIVER
-#include "stm32_p103.h"
-#include "myprintk.h"
-
-void sleep()
-{
-    58e4:	b480      	push	{r7}
-    58e6:	b083      	sub	sp, #12
-    58e8:	af00      	add	r7, sp, #0
-   int i=1000000;
-    58ea:	4b07      	ldr	r3, [pc, #28]	; (5908 <sleep+0x24>)
-    58ec:	607b      	str	r3, [r7, #4]
-   while(i-->0);
-    58ee:	bf00      	nop
-    58f0:	687b      	ldr	r3, [r7, #4]
-    58f2:	1e5a      	subs	r2, r3, #1
-    58f4:	607a      	str	r2, [r7, #4]
-    58f6:	2b00      	cmp	r3, #0
-    58f8:	dcfa      	bgt.n	58f0 <sleep+0xc>
-}
-    58fa:	bf00      	nop
-    58fc:	bf00      	nop
-    58fe:	370c      	adds	r7, #12
-    5900:	46bd      	mov	sp, r7
-    5902:	bc80      	pop	{r7}
-    5904:	4770      	bx	lr
-    5906:	bf00      	nop
-    5908:	000f4240 	.word	0x000f4240
-
-0000590c <main>:
-
-int main(void)
-{
-    590c:	b580      	push	{r7, lr}
-    590e:	b086      	sub	sp, #24
-    5910:	af02      	add	r7, sp, #8
-    uint8_t b;
-    int32_t num1=0x1234;
-    5912:	f241 2334 	movw	r3, #4660	; 0x1234
-    5916:	60fb      	str	r3, [r7, #12]
-    char *str1="Strings";
-    5918:	4b08      	ldr	r3, [pc, #32]	; (593c <main+0x30>)
-    591a:	60bb      	str	r3, [r7, #8]
-    char ch1='Z';
-    591c:	235a      	movs	r3, #90	; 0x5a
-    591e:	71fb      	strb	r3, [r7, #7]
-
-    //first init myprintf device(usart2)
-    myprintf_init();
-    5920:	f7fa ffbe 	bl	8a0 <myprintf_init>
-    while(1) {
-        myprintf("test num %d=0x%x str %s ch %c\n",num1,num1,str1,ch1);
-    5924:	79fb      	ldrb	r3, [r7, #7]
-    5926:	9300      	str	r3, [sp, #0]
-    5928:	68bb      	ldr	r3, [r7, #8]
-    592a:	68fa      	ldr	r2, [r7, #12]
-    592c:	68f9      	ldr	r1, [r7, #12]
-    592e:	4804      	ldr	r0, [pc, #16]	; (5940 <main+0x34>)
-    5930:	f7fb fbfb 	bl	112a <myprintf>
-        sleep();
-    5934:	f7ff ffd6 	bl	58e4 <sleep>
-        myprintf("test num %d=0x%x str %s ch %c\n",num1,num1,str1,ch1);
-    5938:	e7f4      	b.n	5924 <main+0x18>
-    593a:	bf00      	nop
-    593c:	00005a84 	.word	0x00005a84
-    5940:	00005a8c 	.word	0x00005a8c
-
-00005944 <memset>:
-    5944:	b4f0      	push	{r4, r5, r6, r7}
-    5946:	0786      	lsls	r6, r0, #30
-    5948:	d046      	beq.n	59d8 <memset+0x94>
-    594a:	1e54      	subs	r4, r2, #1
-    594c:	2a00      	cmp	r2, #0
-    594e:	d03c      	beq.n	59ca <memset+0x86>
-    5950:	4603      	mov	r3, r0
-    5952:	b2ca      	uxtb	r2, r1
-    5954:	e001      	b.n	595a <memset+0x16>
-    5956:	3c01      	subs	r4, #1
-    5958:	d337      	bcc.n	59ca <memset+0x86>
-    595a:	f803 2b01 	strb.w	r2, [r3], #1
-    595e:	079d      	lsls	r5, r3, #30
-    5960:	d1f9      	bne.n	5956 <memset+0x12>
-    5962:	2c03      	cmp	r4, #3
-    5964:	d92a      	bls.n	59bc <memset+0x78>
-    5966:	b2cd      	uxtb	r5, r1
-    5968:	ea45 2505 	orr.w	r5, r5, r5, lsl #8
-    596c:	2c0f      	cmp	r4, #15
-    596e:	ea45 4505 	orr.w	r5, r5, r5, lsl #16
-    5972:	d934      	bls.n	59de <memset+0x9a>
-    5974:	f1a4 0210 	sub.w	r2, r4, #16
-    5978:	f022 0c0f 	bic.w	ip, r2, #15
-    597c:	f103 0720 	add.w	r7, r3, #32
-    5980:	0916      	lsrs	r6, r2, #4
-    5982:	4467      	add	r7, ip
-    5984:	f103 0210 	add.w	r2, r3, #16
-    5988:	e942 5504 	strd	r5, r5, [r2, #-16]
-    598c:	e942 5502 	strd	r5, r5, [r2, #-8]
-    5990:	3210      	adds	r2, #16
-    5992:	42ba      	cmp	r2, r7
-    5994:	d1f8      	bne.n	5988 <memset+0x44>
-    5996:	1c72      	adds	r2, r6, #1
-    5998:	f014 0f0c 	tst.w	r4, #12
-    599c:	eb03 1202 	add.w	r2, r3, r2, lsl #4
-    59a0:	f004 060f 	and.w	r6, r4, #15
-    59a4:	d013      	beq.n	59ce <memset+0x8a>
-    59a6:	1f33      	subs	r3, r6, #4
-    59a8:	f023 0303 	bic.w	r3, r3, #3
-    59ac:	3304      	adds	r3, #4
-    59ae:	4413      	add	r3, r2
-    59b0:	f842 5b04 	str.w	r5, [r2], #4
-    59b4:	4293      	cmp	r3, r2
-    59b6:	d1fb      	bne.n	59b0 <memset+0x6c>
-    59b8:	f006 0403 	and.w	r4, r6, #3
-    59bc:	b12c      	cbz	r4, 59ca <memset+0x86>
-    59be:	b2ca      	uxtb	r2, r1
-    59c0:	441c      	add	r4, r3
-    59c2:	f803 2b01 	strb.w	r2, [r3], #1
-    59c6:	429c      	cmp	r4, r3
-    59c8:	d1fb      	bne.n	59c2 <memset+0x7e>
-    59ca:	bcf0      	pop	{r4, r5, r6, r7}
-    59cc:	4770      	bx	lr
-    59ce:	4634      	mov	r4, r6
-    59d0:	4613      	mov	r3, r2
-    59d2:	2c00      	cmp	r4, #0
-    59d4:	d1f3      	bne.n	59be <memset+0x7a>
-    59d6:	e7f8      	b.n	59ca <memset+0x86>
-    59d8:	4614      	mov	r4, r2
-    59da:	4603      	mov	r3, r0
-    59dc:	e7c1      	b.n	5962 <memset+0x1e>
-    59de:	461a      	mov	r2, r3
-    59e0:	4626      	mov	r6, r4
-    59e2:	e7e0      	b.n	59a6 <memset+0x62>
-
-000059e4 <Reset_Handler>:
-	.weak	Reset_Handler
-	.type	Reset_Handler, %function
-Reset_Handler:	
-
-/* Copy the data segment initializers from flash to SRAM */  
-  movs	r1, #0
-    59e4:	2100      	movs	r1, #0
-  b	LoopCopyDataInit
-    59e6:	e003      	b.n	59f0 <LoopCopyDataInit>
-
-000059e8 <CopyDataInit>:
-
-CopyDataInit:
-	ldr	r3, =_sidata
-    59e8:	4b0a      	ldr	r3, [pc, #40]	; (5a14 <LoopFillZerobss+0x10>)
-	ldr	r3, [r3, r1]
-    59ea:	585b      	ldr	r3, [r3, r1]
-	str	r3, [r0, r1]
-    59ec:	5043      	str	r3, [r0, r1]
-	adds	r1, r1, #4
-    59ee:	3104      	adds	r1, #4
-
-000059f0 <LoopCopyDataInit>:
-    
-LoopCopyDataInit:
-	ldr	r0, =_sdata
-    59f0:	4809      	ldr	r0, [pc, #36]	; (5a18 <LoopFillZerobss+0x14>)
-	ldr	r3, =_edata
-    59f2:	4b0a      	ldr	r3, [pc, #40]	; (5a1c <LoopFillZerobss+0x18>)
-	adds	r2, r0, r1
-    59f4:	1842      	adds	r2, r0, r1
-	cmp	r2, r3
-    59f6:	429a      	cmp	r2, r3
-	bcc	CopyDataInit
-    59f8:	d3f6      	bcc.n	59e8 <CopyDataInit>
-	ldr	r2, =_sbss
-    59fa:	4a09      	ldr	r2, [pc, #36]	; (5a20 <LoopFillZerobss+0x1c>)
-	b	LoopFillZerobss
-    59fc:	e002      	b.n	5a04 <LoopFillZerobss>
-
-000059fe <FillZerobss>:
-/* Zero fill the bss segment. */  
-FillZerobss:
-	movs	r3, #0
-    59fe:	2300      	movs	r3, #0
-	str	r3, [r2], #4
-    5a00:	f842 3b04 	str.w	r3, [r2], #4
-
-00005a04 <LoopFillZerobss>:
-    
-LoopFillZerobss:
-	ldr	r3, = _ebss
-    5a04:	4b07      	ldr	r3, [pc, #28]	; (5a24 <LoopFillZerobss+0x20>)
-	cmp	r2, r3
-    5a06:	429a      	cmp	r2, r3
-	bcc	FillZerobss
-    5a08:	d3f9      	bcc.n	59fe <FillZerobss>
-/* Call the clock system intitialization function.*/
-  bl  SystemInit 	
-    5a0a:	f7fa fca9 	bl	360 <SystemInit>
-/* Call the application's entry point.*/
-	bl	main
-    5a0e:	f7ff ff7d 	bl	590c <main>
-	bx	lr    
-    5a12:	4770      	bx	lr
-	ldr	r3, =_sidata
-    5a14:	00005bad 	.word	0x00005bad
-	ldr	r0, =_sdata
-    5a18:	20000000 	.word	0x20000000
-	ldr	r3, =_edata
-    5a1c:	20000028 	.word	0x20000028
-	ldr	r2, =_sbss
-    5a20:	20000028 	.word	0x20000028
-	ldr	r3, = _ebss
-    5a24:	20000028 	.word	0x20000028
-
-00005a28 <ADC1_2_IRQHandler>:
- * @retval None       
-*/
-    .section	.text.Default_Handler,"ax",%progbits
-Default_Handler:
-Infinite_Loop:
-	b	Infinite_Loop
-    5a28:	e7fe      	b.n	5a28 <ADC1_2_IRQHandler>
-    5a2a:	0000      	movs	r0, r0
-    5a2c:	33323130 	.word	0x33323130
-    5a30:	37363534 	.word	0x37363534
-    5a34:	62613938 	.word	0x62613938
-    5a38:	66656463 	.word	0x66656463
-    5a3c:	6a696867 	.word	0x6a696867
-    5a40:	6e6d6c6b 	.word	0x6e6d6c6b
-    5a44:	7271706f 	.word	0x7271706f
-    5a48:	76757473 	.word	0x76757473
-    5a4c:	7a797877 	.word	0x7a797877
-    5a50:	00000000 	.word	0x00000000
-    5a54:	33323130 	.word	0x33323130
-    5a58:	37363534 	.word	0x37363534
-    5a5c:	42413938 	.word	0x42413938
-    5a60:	46454443 	.word	0x46454443
-    5a64:	4a494847 	.word	0x4a494847
-    5a68:	4e4d4c4b 	.word	0x4e4d4c4b
-    5a6c:	5251504f 	.word	0x5251504f
-    5a70:	56555453 	.word	0x56555453
-    5a74:	5a595857 	.word	0x5a595857
-    5a78:	00000000 	.word	0x00000000
-    5a7c:	4c554e3c 	.word	0x4c554e3c
-    5a80:	00003e4c 	.word	0x00003e4c
-    5a84:	69727453 	.word	0x69727453
-    5a88:	0073676e 	.word	0x0073676e
-    5a8c:	74736574 	.word	0x74736574
-    5a90:	6d756e20 	.word	0x6d756e20
-    5a94:	3d642520 	.word	0x3d642520
-    5a98:	78257830 	.word	0x78257830
-    5a9c:	72747320 	.word	0x72747320
-    5aa0:	20732520 	.word	0x20732520
-    5aa4:	25206863 	.word	0x25206863
-    5aa8:	00000a63 	.word	0x00000a63
-
-00005aac <_ctype_>:
-    5aac:	20202000 20202020 28282020 20282828     .         ((((( 
-    5abc:	20202020 20202020 20202020 20202020                     
-    5acc:	10108820 10101010 10101010 10101010      ...............
-    5adc:	04040410 04040404 10040404 10101010     ................
-    5aec:	41411010 41414141 01010101 01010101     ..AAAAAA........
-    5afc:	01010101 01010101 01010101 10101010     ................
-    5b0c:	42421010 42424242 02020202 02020202     ..BBBBBB........
-    5b1c:	02020202 02020202 02020202 10101010     ................
-    5b2c:	00000020 00000000 00000000 00000000      ...............
-	...

+ 7 - 16
port/qemu/demos/systick/main.c

@@ -1,14 +1,11 @@
 #define USE_STDPERIPH_DRIVER
 #include "stm32_p103.h"
-#include "stm32_p103.h"
 
-void SysTick_Handler(void)
-{
+void SysTick_Handler(void) {
     GPIOC->ODR ^= 0x00001000;
 }
 
-int main(void)
-{
+int main(void) {
     int last_button_state, new_button_state;
     uint32_t hclk_ticks_per_sec, ext_clock_ticks_per_sec;
 
@@ -26,24 +23,18 @@ int main(void)
      */
     hclk_ticks_per_sec = SystemCoreClock;
     ext_clock_ticks_per_sec = hclk_ticks_per_sec / 8;
-    if (SysTick_Config(ext_clock_ticks_per_sec))
-    {
+    if (SysTick_Config(ext_clock_ticks_per_sec)) {
         /* If SysTick_Config returns 1, that means the number ticks exceeds the
          * limit. */
-        while (1);
+        while (1)
+            ;
     }
 
     /* Infinite loop - when the button changes state, toggle the SysTick clock
      * source.
      */
     last_button_state = GPIOA->IDR & 0x00000001;
-    while(1) {
-        new_button_state = GPIOA->IDR & 0x00000001;
-        if(new_button_state ^ last_button_state) {
-            if(new_button_state) {
-                SysTick->CTRL ^= SysTick_CTRL_CLKSOURCE_Msk;
-            }
-        }
-        last_button_state = new_button_state;
+    while (1) {
+        SysTick->CTRL ^= SysTick_CTRL_CLKSOURCE_Msk;
     }
 }

+ 1 - 0
port/qemu/makefile

@@ -49,6 +49,7 @@ COMMON_FILES += $(STD_PERIPH_SRC)/misc.c
 
 # List all demos
 DEMOS = printf_demo
+DEMOS += systick
 
 # List all demo folders
 DEMO_FOLDERS = $(addprefix demos/,$(DEMOS))