IAR_STM32_BootLoader
1.STM32 Bootloader与APP
IROM中可以分成两个区域,起始代码运行地址为0x08000000,这是基本固定的,可以将IROM的0x08000000 ~ 0x08002000这8KB的空间存放Bootloader代码,而0x08002000 ~ 上限的位置存放APP代码。
需要实现两个工程,分别为bootloader工程与app工程。
1.1 先说bootloader工程,以IAR为例
建立基本stm32工程需要的工程文件等,工程的建立这里不去说明,有了工程后,需要将该工程代码的链接地址配置为0x08000000 ~ 0x08002000,对于IAR可以在icf文件中进行修改参数达到效果,也可在工程配置中修改达到效果,中断向量表的地址为程序运行起始地址就行。
1.1.1 在icf中修改链接地址,__ICFEDIT_intvec_start__是中断向量表位置,按照上面说的bootloader地址范围,这里要填起始地址0x08000000,__ICFEDIT_region_ROM_start和__ICFEDIT_region_ROM_end__是配置这部分bootloader代码在IROM中的位置,根据上面说的划分区域,这里start应是0x08000000、end应是0x08002000,后面的RAM_Start与RAM_end是内存的起始地址与结束地址,IROM和RAM的范围应该能根据实际芯片手册去划分修改。修改后到时编译好程序,链接脚本就会将程序链接到对应IROM中。
直接通过icf文件修改,其实就是一个链接脚本
直接通过工程修改,Vector Table是设置向量表的位置
1.1.2 之后就可以开始撸起bootloader代码了,看你的需求是什么,普遍bootloader的需求都是起到一个搬运工的作用,当发现有app的升级文件需要升级时,从一个存放的介质中搬运到IROM中对应的APP代码位置,然后跳转到APP代码位置进行运行。
先贴代码
头文件
1 #ifndef __TOTOAL_H__
2 #define __TOTOAL_H__
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7
8
9 /****************ST*********************/
10 #include "stm32l1xx.h"
11 #include "misc.h"
12 #include "stm32l1xx_flash.h"
13 #include "stm32l1xx_usart.h"
14 #include "stm32l1xx_gpio.h"
15 #include "stm32l1xx_rcc.h"
16 #include "stm32l1xx_syscfg.h"
17 /**************************************/
18
19
20 /*****************SELF********************/
21 #include "bsp.h"
22 #include "spi.h"
23 #include "flash.h"
24 #include "USART.h"
25 /***************************************/
26
27 #define CONFIG_RELASE 0
28
29 #if (CONFIG_RELASE == 0)
30 #define Debug(fmt,arg...) printf(fmt,##arg)
31 #else
32 #define Debug(fmt,arg...)
33 #endif
34
35 #define u8 unsigned char
36 #define u16 unsigned short
37 #define u32 unsigned int
38
39 #define SPIFLASHBUF_MAX_LEN (4096) //spi flash最大缓冲
40
41 #define APPLICATIONADDRESS (0x08002000)
42
43
44 extern unsigned char SPI_FLASH_BUF[]; //Spi Flash使用的临时缓冲
45
46 #endif //__TOTOAL_H__
C文件
1 #include "total.h"
2
3
4 unsigned char SPI_FLASH_BUF[4096]; //Spi Flash使用的临时缓冲
5
6
7 typedef void (*pFunction)(void);
8 pFunction Jump_To_Application;
9 unsigned int JumpAddress;
10
11
12 extern int LoopCount;
13
14 /*************************************
15 *
16 * Funciton Name : System_Initializes
17 * Function :
18 *
19 *************************************/
20 void System_Initializes(void)
21 {
22 unsigned int UpdateFileLogo = 0;
23 unsigned int WriteUpdateFileLogo = 0x00000000;
24
25 memset(SPI_FLASH_BUF, 0, sizeof(SPI_FLASH_BUF));
26
27 BSP_Initializes();
28
29 Debug("----[Boot]BootLoader Running... \r\n");
30
31 SysTick_Config(36000000 / 1000);
32
33 // 读取外部flash有无升级文件需要更新
34 SPI_Flash_Read((unsigned char *)&UpdateFileLogo, CONFIG_UPDATE_FILE_ADDR_LOGO, 4);
35
36 // 是否有未更新的升级文件在外部flash中
37 if ( UpdateFileLogo == 0x98765432 )
38 {
39 unsigned int i = 0;
40 unsigned int FalshData = 0x0;
41
42 FLASH_Unlock();
43
44 //擦除内部app程序flash位置
45 for ( i = 0; i < 100; i++ )
46 {
47 FLASH_ErasePage(0x8002000 + (0x400 * i)); //1K 1K擦
48 }
49
50 // 将外部flash存储升级文件的数据,复制到IROM中的APP区域,,升级包的校验什么的都应该去做处理计算 0x19000 100KB
51 for ( i = 0; i < 0x19000 / 4; i++ )
52 {
53 SPI_Flash_Read((unsigned char *)&FalshData, CONFIG_FLASH_SAVE_UPDATE_INDEX + i * 4, 4);
54
55 FLASH_FastProgramWord(0x8002000 + i * 4, FalshData);
56 }
57
58 FLASH_Lock();
59
60 // 更新完毕,将外部flash代表有无未更新的升级标志变为无更新
61 SPI_Flash_Write((unsigned char *)&WriteUpdateFileLogo, CONFIG_UPDATE_FILE_ADDR_LOGO, 4);
62
63 NVIC_SystemReset(); //复位
64 }
65
66 while ( LoopCount > 0 );
67
68 __disable_irq();
69
70 /* Test if user code is programmed starting from address "ApplicationAddress" */
71 if (((*(__IO uint32_t*)APPLICATIONADDRESS) & 0x2FFE0000 ) == 0x20000000)
72 {
73
74 Debug("----[Boot]Jump_To_Application!!!\r\n");
75
76 /* Jump to user application */
77 JumpAddress = *(__IO uint32_t*) (APPLICATIONADDRESS + 4);
78 Jump_To_Application = (pFunction) JumpAddress;
79 /* Initialize user application's Stack Pointer */
80 __set_MSP(*(__IO uint32_t*) APPLICATIONADDRESS);
81 Jump_To_Application();
82 }
83 else
84 {
85 Debug("----[Boot]APPLICATIONADDRESS is ERROR!!!\r\n");
86 }
87 }
88
89 int main(void)
90 {
91 System_Initializes();
92
93
94 while (1);
95 }
说明:主要就是判断介质中是否有升级文件需要升级,如果有则擦除IROM中APP代码对应的位置,然后将介质中的APP升级文件搬运到IROM中的APP位置去,没问题后,定义一个函数指针指向APP应用程序代码段的地址,就是链接地址0x08002000,然后调用函数指针直接到这个代码段运行,运行之前设置一下APP链接地址数的堆栈。栈顶设置为起始地址的前4个字节,函数指针指向的其实是这个起始地址的后4个字节,表示中断向量表的复位中断向量位置。所以起始地址+4,然后运行。
1.2 APP工程,APP的工程搭建好后,同样的要修改链接位置,将程序代码链接到指定的位置去,同样的可以通过icf文件修改,也可以直接通过工程修改,这里就不在进行说明,IROM链接的起始地址为0x08002000,上限就是IROM的上限即可。配置好链接地址后,就可以撸起你的代码了,但如果想要让bootloader跳转到app能够成功,则必须在app代码的开始设置好中断向量的表偏移,因为app的代码是在0x08002000开始,所以中断向量表的位置设置为0x08002000即可。
1 /* 设置中断向量表位置 0x08002000 */
2 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
如此就完成了bootloader与app工程。一般bootloader写好后是不需要重复的更改的,而只会该应用程序,可以将bootloader代码编译成bin文件,因为bin文件全都是数据,所以可以转换成一个数组,表示一个代码段,然后将这个数据放入到APP的工程中,将这个bootloader的数组指定到一个IROM的位置,这样就可以达到一次烧写两个工程的效果。
如何将bootloader的数组指定到固定的IROM中,使用#pragma loation = 0Xxxxxxxxx __root 就可以指定,我是这么指定的,指定到了0x08000000位置。同时APP的工程链接地址要为0x08002000,因为按照上面说的对IROM的划分,应该要如此划分。
1 #pragma location = 0x08000000
2 __root const unsigned char STM32L15_BootLoader[]={200,20,0,32,117,20,0,8,5,18,0,8,7,18,0,8,
3 9,18,0,8,11,18,0,8,13,18,0,8,0,0,0,0,
4 0,0,0,0,0,0,0,0,0,0,0,0,145,20,0,8,
5 15,18,0,8,0,0,0,0,149,20,0,8,17,18,0,8,
6 153,20,0,8,157,20,0,8,161,20,0,8,209,18,0,8,
7 165,20,0,8,169,20,0,8,173,20,0,8,177,20,0,8,
8 181,20,0,8,185,20,0,8,189,20,0,8,193,20,0,8,
9 197,20,0,8,201,20,0,8,205,20,0,8,209,20,0,8,
10 213,20,0,8,217,20,0,8,221,20,0,8,225,20,0,8,
11 229,20,0,8,233,20,0,8,237,20,0,8,241,20,0,8,
12 245,20,0,8,249,20,0,8,253,20,0,8,1,21,0,8,
13 5,21,0,8,205,18,0,8,9,21,0,8,13,21,0,8,
14 17,21,0,8,21,21,0,8,25,21,0,8,29,21,0,8,
15 33,21,0,8,37,21,0,8,41,21,0,8,45,21,0,8,
16 207,18,0,8,49,21,0,8,53,21,0,8,57,21,0,8,
17 61,21,0,8,56,181,0,36,79,244,128,81,223,248,204,2,
18 0,240,223,249,5,32,0,240,100,250,255,32,0,240,97,250,
19 5,0,79,244,128,81,223,248,180,2,0,240,208,249,40,0,
20 192,178,50,189,128,181,79,244,128,81,223,248,160,2,0,240,
21 200,249,6,32,0,240,77,250,79,244,128,81,223,248,140,2,
22 0,240,189,249,1,189,45,233,240,65,4,0,13,0,22,0,
23 0,39,79,244,128,81,223,248,116,2,0,240,178,249,3,32,
24 0,240,55,250,40,0,0,12,192,178,0,240,50,250,40,0,
25 0,10,192,178,0,240,45,250,40,0,192,178,0,240,41,250,
26 95,240,0,8,64,70,49,0,128,178,137,178,136,66,8,210,
27 255,32,0,240,30,250,65,70,137,178,96,84,24,241,1,8,
28 240,231,79,244,128,81,223,248,36,2,0,240,136,249,189,232,
29 240,129,248,181,4,0,13,0,22,0,255,247,179,255,79,244,
30 128,81,130,72,0,240,125,249,2,32,0,240,2,250,40,0,
31 0,12,192,178,0,240,253,249,40,0,0,10,192,178,0,240,
32 248,249,40,0,192,178,0,240,244,249,0,39,56,0,49,0,
33 128,178,137,178,136,66,6,210,56,0,128,178,32,92,0,240,
34 232,249,127,28,242,231,79,244,128,81,112,72,0,240,87,249,
35 0,240,214,248,241,189,248,181,4,0,13,0,22,0,21,240,
36 255,7,215,245,128,119,56,0,49,0,128,178,137,178,136,66,
37 0,211,55,0,58,0,146,178,41,0,32,0,255,247,185,255,
38 48,0,57,0,128,178,137,178,136,66,18,208,56,0,128,178,
39 4,68,56,0,128,178,69,25,246,27,48,0,128,178,64,242,
40 1,17,136,66,3,219,79,244,128,112,7,0,226,231,55,0,
41 224,231,241,189,45,233,240,71,4,0,13,0,22,0,47,0,
42 63,11,168,70,95,234,8,88,95,234,24,88,216,245,128,89,
43 72,70,49,0,128,178,137,178,136,66,0,211,177,70,79,244,
44 128,82,79,244,128,81,1,251,7,241,73,72,255,247,75,255,
45 0,32,130,70,80,70,73,70,128,178,137,178,136,66,11,210,
46 67,73,66,70,146,178,80,70,128,178,130,24,136,92,255,40,
47 2,209,26,241,1,10,237,231,80,70,73,70,128,178,137,178,
48 136,66,33,210,56,0,0,240,68,248,0,32,130,70,80,70,
49 73,70,128,178,137,178,136,66,12,210,80,70,128,178,33,92,
50 51,74,83,70,155,178,64,70,128,178,195,24,209,84,26,241,
51 1,10,236,231,79,244,128,82,79,244,128,81,1,251,7,241,
52 43,72,255,247,120,255,5,224,74,70,146,178,41,0,32,0,
53 255,247,113,255,48,0,73,70,128,178,137,178,136,66,22,208,
54 127,28,0,32,128,70,72,70,128,178,4,68,72,70,128,178,
55 69,25,182,235,9,6,48,0,128,178,65,242,1,1,136,66,
56 3,219,79,244,128,80,129,70,153,231,177,70,151,231,189,232,
57 240,135,16,181,4,0,79,244,128,80,68,67,255,247,210,254,
58 0,240,30,248,79,244,128,81,16,72,0,240,154,248,32,32,
59 0,240,31,249,32,0,0,12,192,178,0,240,26,249,32,0,
60 0,10,192,178,0,240,21,249,32,0,192,178,0,240,17,249,
61 79,244,128,81,5,72,0,240,130,248,0,240,1,248,16,189,
62 128,181,255,247,151,254,192,7,251,212,1,189,0,4,2,64,
63 104,0,0,32,240,180,0,34,0,35,0,36,0,39,0,37,
64 16,45,92,210,1,34,170,64,19,0,10,104,26,64,20,0,
65 156,66,82,209,6,104,95,240,3,12,42,0,210,178,82,0,
66 28,250,2,252,54,234,12,6,145,248,4,192,42,0,210,178,
67 82,0,28,250,2,252,92,234,6,6,6,96,10,121,1,42,
68 2,208,10,121,2,42,36,209,135,104,95,240,3,12,42,0,
69 210,178,82,0,28,250,2,252,55,234,12,7,145,248,5,192,
70 42,0,210,178,82,0,28,250,2,252,92,234,7,7,135,96,
71 130,136,95,240,1,12,28,250,5,252,50,234,12,2,145,248,
72 6,192,28,250,5,252,31,250,140,252,92,234,2,2,22,0,
73 134,128,194,104,95,240,3,12,47,0,255,178,127,0,28,250,
74 7,247,50,234,7,7,145,248,7,192,42,0,210,178,82,0,
75 28,250,2,252,92,234,7,7,199,96,109,28,160,231,240,188,
76 112,71,16,180,2,0,0,35,16,138,12,0,164,178,32,66,
77 1,208,1,32,0,224,0,32,192,178,16,188,112,71,1,131,
78 112,71,65,131,112,71,240,181,0,36,0,37,19,0,219,178,
79 17,240,7,6,246,178,182,0,19,250,6,246,11,0,155,178,
80 219,16,0,235,131,7,11,0,155,178,219,16,0,235,131,3,
81 211,248,32,192,95,240,15,14,17,240,7,3,219,178,155,0,
82 30,250,3,254,60,234,14,12,199,248,32,192,11,0,155,178,
83 219,16,0,235,131,3,27,106,51,67,15,0,191,178,255,16,
84 0,235,135,7,59,98,240,189,224,181,79,244,0,96,0,144,
85 1,32,141,248,4,0,0,32,141,248,6,0,1,32,141,248,
86 5,0,105,70,65,72,255,247,69,255,79,244,0,97,63,72,
87 255,247,181,255,79,244,32,64,0,144,1,32,141,248,5,0,
88 1,32,141,248,4,0,0,32,141,248,6,0,105,70,55,72,
89 255,247,48,255,79,244,128,80,0,144,105,70,51,72,255,247,
90 41,255,79,244,128,112,0,144,105,70,49,72,255,247,34,255,
91 79,244,128,64,0,144,0,32,141,248,7,0,0,32,141,248,
92 4,0,105,70,41,72,255,247,21,255,7,189,128,181,255,247,
93 187,255,79,244,128,81,37,72,255,247,129,255,79,244,128,113,
94 35,72,255,247,124,255,79,244,0,81,32,72,255,247,121,255,
95 1,189,56,181,4,0,0,32,0,37,40,0,192,178,8,40,
96 43,218,79,244,0,81,25,72,255,247,107,255,32,6,5,213,
97 79,244,0,65,21,72,255,247,98,255,4,224,79,244,0,65,
98 18,72,255,247,94,255,79,244,0,81,16,72,255,247,87,255,
99 100,0,0,191,0,191,0,191,0,191,79,244,128,65,11,72,
100 255,247,63,255,0,40,1,208,84,240,1,4,79,244,0,81,
101 6,72,255,247,70,255,109,28,207,231,79,244,0,81,3,72,
102 255,247,63,255,32,0,192,178,50,189,0,0,0,4,2,64,
103 0,0,2,64,16,180,2,0,82,178,0,42,9,213,10,1,
104 83,75,4,0,100,178,20,240,15,4,35,68,3,248,4,44,
105 4,224,10,1,79,75,4,0,100,178,26,85,16,188,112,71,
106 191,243,79,143,76,72,1,104,17,244,224,97,75,72,1,67,
107 73,72,1,96,191,243,79,143,254,231,16,181,4,0,96,30,
108 176,241,128,127,1,211,1,32,14,224,96,30,68,73,8,96,
109 15,33,95,240,255,48,255,247,205,255,0,32,65,73,8,96,
110 7,32,65,73,8,96,0,32,16,189,127,181,0,32,1,144,
111 0,32,2,144,79,244,128,84,0,37,60,78,42,0,33,0,
112 48,0,0,240,141,248,0,240,4,249,57,72,0,240,34,249,
113 72,246,160,64,255,247,209,255,4,34,95,244,80,1,1,168,
114 255,247,33,253,1,152,51,73,136,66,45,209,0,36,0,32,
115 0,144,0,240,35,249,0,37,100,45,8,210,79,244,128,96,
116 45,73,0,251,5,16,0,240,53,249,109,28,244,231,0,36,
117 180,245,200,79,14,210,4,34,161,0,17,245,80,1,104,70,
118 255,247,1,253,0,153,36,72,16,235,132,0,0,240,88,249,
119 100,28,237,231,0,240,21,249,4,34,95,244,80,1,2,168,
120 255,247,136,253,255,247,140,255,28,72,0,104,1,40,251,218,
121 114,182,25,72,1,104,26,72,1,64,177,241,0,95,18,209,
122 24,72,0,240,215,248,24,72,0,104,24,73,8,96,23,72,
123 0,104,23,73,8,96,16,72,0,104,128,243,8,136,20,72,
124 0,104,128,71,2,224,19,72,0,240,196,248,127,189,0,0,
125 24,237,0,224,0,228,0,224,12,237,0,224,4,0,250,5,
126 20,224,0,224,24,224,0,224,16,224,0,224,104,0,0,32,
127 160,19,0,8,50,84,118,152,0,32,0,8,0,0,0,32,
128 0,0,254,47,196,19,0,8,4,32,0,8,188,16,0,32,
129 184,16,0,32,76,19,0,8,128,181,255,247,102,255,254,231,
130 98,243,15,34,98,243,31,66,64,24,16,240,3,3,8,208,
131 201,26,31,211,219,7,72,191,0,248,1,45,40,191,32,248,
132 2,45,19,0,48,180,20,70,21,70,16,57,40,191,32,233,
133 60,0,250,216,73,7,40,191,32,233,12,0,72,191,64,248,
134 4,45,137,0,40,191,32,248,2,45,72,191,0,248,1,45,
135 48,188,112,71,201,24,24,191,0,248,1,45,203,7,40,191,
136 0,248,1,45,112,71,0,0,128,181,1,33,15,32,0,240,
137 215,249,1,33,79,244,128,64,0,240,226,249,1,189,224,181,
138 128,32,0,144,1,32,141,248,4,0,0,32,141,248,6,0,
139 1,32,141,248,5,0,105,70,34,72,255,247,155,253,128,33,
140 32,72,255,247,12,254,7,189,224,181,79,244,0,80,0,144,
141 1,32,141,248,4,0,0,32,141,248,6,0,1,32,141,248,
142 5,0,105,70,24,72,255,247,133,253,16,32,0,144,1,32,
143 141,248,4,0,0,32,141,248,6,0,1,32,141,248,5,0,
144 105,70,18,72,255,247,118,253,16,33,16,72,255,247,231,253,
145 7,189,128,181,255,247,184,255,255,247,193,255,255,247,212,255,
146 79,244,0,81,8,72,255,247,218,253,1,32,0,144,0,35,
147 8,34,95,244,225,49,6,72,0,240,195,249,255,247,70,254,
148 1,189,0,0,0,4,2,64,0,8,2,64,0,0,2,64,
149 0,56,1,64,14,180,192,181,2,70,3,168,0,33,1,144,
150 0,145,1,171,1,33,4,72,120,68,12,48,0,240,42,250,
151 6,188,93,248,16,251,0,191,249,10,0,0,128,181,223,248,
152 28,1,0,104,128,7,11,213,0,240,96,248,223,248,16,1,
153 223,248,16,17,8,96,223,248,16,1,223,248,8,17,8,96,
154 1,189,223,248,248,0,0,104,80,240,2,0,223,248,236,16,
155 8,96,112,71,112,181,4,0,4,38,79,244,0,64,0,240,
156 125,248,5,0,40,0,192,178,4,40,38,209,223,248,204,0,
157 0,104,80,244,0,112,223,248,196,16,8,96,223,248,188,0,
158 0,104,80,240,8,0,223,248,180,16,8,96,0,32,32,96,
159 79,244,0,64,0,240,98,248,5,0,223,248,160,0,0,104,
160 48,240,8,0,223,248,148,16,8,96,223,248,144,0,0,104,
161 48,244,0,112,223,248,132,16,8,96,40,0,192,178,112,189,
162 248,181,4,0,13,0,4,38,79,244,0,64,0,240,70,248,
163 7,0,56,0,192,178,4,40,5,209,37,96,79,244,0,64,
164 0,240,60,248,7,0,56,0,192,178,242,189,223,248,76,0,
165 0,104,192,7,9,213,223,248,84,0,223,248,84,16,8,96,
166 223,248,80,0,223,248,72,16,8,96,112,71,4,33,18,72,
167 0,104,192,7,1,213,1,32,13,224,15,72,0,104,192,5,
168 1,213,2,32,7,224,12,72,0,104,16,244,240,95,1,208,
169 3,32,0,224,4,32,192,178,112,71,0,0,4,60,2,64,
170 191,174,157,140,16,60,2,64,22,21,20,19,239,205,171,137,
171 12,60,2,64,5,4,3,2,24,60,2,64,28,181,4,0,
172 4,32,141,248,0,0,255,247,209,255,141,248,0,0,157,248,
173 0,0,1,40,7,209,0,44,5,208,255,247,199,255,141,248,
174 0,0,100,30,243,231,0,44,2,209,5,32,141,248,0,0,
175 157,248,0,0,22,189,0,0,45,233,240,79,0,34,0,35,
176 0,36,0,33,0,37,0,38,223,248,116,113,63,104,23,240,
177 12,7,188,70,188,241,0,15,9,208,188,241,4,15,24,208,
178 188,241,8,15,25,208,188,241,12,15,26,208,67,224,223,248,
179 84,33,18,104,194,243,66,50,22,0,95,240,1,12,114,28,
180 28,250,2,252,79,244,0,66,2,251,12,252,192,248,0,192,
181 65,224,223,248,52,33,2,96,61,224,223,248,48,33,2,96,
182 57,224,71,74,18,104,18,244,112,18,223,248,20,193,220,248,
183 0,192,28,244,64,12,223,248,24,225,146,12,30,248,2,32,
184 19,0,95,234,156,92,28,241,1,12,100,70,60,74,18,104,
185 18,244,128,50,17,0,0,41,6,209,59,74,2,251,3,242,
186 178,251,244,242,2,96,5,224,56,74,2,251,3,242,178,251,
187 244,242,2,96,15,224,51,74,18,104,194,243,66,50,22,0,
188 95,240,1,12,114,28,28,250,2,252,79,244,0,66,2,251,
189 12,252,192,248,0,192,42,74,18,104,18,240,240,2,18,9,
190 223,248,176,192,28,248,2,192,208,248,0,224,62,250,12,254,
191 192,248,4,224,223,248,136,224,222,248,0,224,30,244,224,110,
192 95,234,30,46,223,248,140,128,24,248,14,128,208,248,4,144,
193 57,250,8,249,192,248,8,144,223,248,100,144,217,248,0,144,
194 25,244,96,89,95,234,217,41,223,248,104,160,26,248,9,160,
195 208,248,4,176,59,250,10,251,192,248,12,176,189,232,240,143,
196 10,0,210,178,0,42,5,208,19,74,18,104,2,67,18,75,
197 26,96,4,224,16,74,18,104,130,67,15,75,26,96,112,71,
198 10,0,210,178,0,42,5,208,12,74,18,104,2,67,11,75,
199 26,96,4,224,9,74,18,104,130,67,8,75,26,96,112,71,
200 8,56,2,64,4,56,2,64,0,36,244,0,0,18,122,0,
201 4,0,0,32,16,0,0,32,28,56,2,64,32,56,2,64,
202 56,181,4,0,13,0,33,0,201,178,137,178,60,72,0,240,
203 152,249,128,33,58,72,0,240,208,249,0,40,249,208,32,0,
204 50,189,248,181,134,176,4,0,13,0,22,0,31,0,79,244,
205 0,112,0,144,2,32,141,248,4,0,0,32,141,248,6,0,
206 3,32,141,248,5,0,1,32,141,248,7,0,105,70,45,72,
207 255,247,128,251,79,244,128,96,0,144,105,70,41,72,255,247,
208 121,251,7,34,9,33,39,72,255,247,237,251,7,34,10,33,
209 36,72,255,247,232,251,2,149,0,32,173,248,14,0,56,0,
210 192,178,0,40,6,209,0,32,173,248,12,0,0,32,173,248,
211 16,0,31,224,56,0,192,178,1,40,8,209,79,244,128,80,
212 173,248,12,0,79,244,192,96,173,248,16,0,18,224,56,0,
213 192,178,2,40,8,209,79,244,128,80,173,248,12,0,79,244,
214 128,96,173,248,16,0,5,224,0,32,173,248,12,0,0,32,
215 173,248,16,0,0,32,173,248,20,0,12,32,173,248,18,0,
216 2,169,7,72,0,240,178,248,1,34,64,242,37,81,4,72,
217 0,240,43,249,1,33,2,72,0,240,20,249,7,176,240,189,
218 0,56,1,64,0,0,2,64,112,181,28,0,5,70,22,70,
219 6,208,8,70,22,248,1,27,168,71,100,30,250,209,1,70,
220 8,70,112,189,45,233,252,67,131,176,129,70,136,70,23,70,
221 29,70,7,224,1,35,58,70,65,70,72,70,255,247,228,255,
222 128,70,127,28,56,120,224,177,37,40,243,209,121,120,191,28,
223 37,41,18,208,88,41,90,208,99,41,21,208,100,41,24,191,
224 105,41,24,208,111,41,82,208,112,41,86,208,115,41,91,208,
225 117,41,24,191,120,41,74,208,228,231,64,70,200,71,128,70,
226 224,231,5,176,189,232,240,131,40,104,40,96,80,248,4,27,
227 40,96,201,178,241,231,40,104,40,96,80,248,4,107,40,96,
228 0,46,3,213,45,33,64,70,200,71,128,70,100,33,111,41,
229 8,191,8,34,5,208,65,240,32,0,120,40,20,191,10,34,
230 16,34,11,36,100,41,48,70,2,209,0,46,72,191,64,66,
231 176,251,242,252,2,251,28,0,48,48,100,30,195,178,58,43,
232 164,191,161,241,81,3,24,24,13,248,4,0,95,234,12,0,
233 1,208,0,44,236,220,13,235,4,6,212,241,11,4,64,70,
234 189,208,22,248,1,27,200,71,100,30,250,209,183,231,40,104,
235 40,96,80,248,4,107,40,96,201,231,40,104,40,96,120,33,
236 80,248,4,107,40,96,194,231,40,104,40,96,80,248,4,107,
237 40,96,48,70,0,240,208,248,4,0,64,70,159,208,22,248,
238 1,27,200,71,100,30,250,209,153,231,0,0,45,233,240,79,
239 133,176,4,0,13,0,0,38,0,39,95,240,0,8,95,240,
240 0,9,168,137,0,40,33,138,49,244,64,81,232,136,1,67,
241 0,145,0,152,32,130,180,248,12,160,41,72,16,234,10,10,
242 169,136,40,137,1,67,104,137,1,67,81,234,10,10,164,248,
243 12,160,180,248,20,176,59,244,64,123,168,137,80,234,11,11,
244 164,248,20,176,1,168,255,247,215,253,28,72,132,66,1,209,
245 4,153,0,224,3,153,160,137,0,4,7,213,25,32,0,251,
246 1,240,42,104,82,0,176,251,242,242,6,224,25,32,0,251,
247 1,240,42,104,146,0,176,251,242,242,100,32,178,251,240,246,
248 54,1,51,0,27,9,100,32,0,251,19,35,160,137,0,4,
249 8,213,216,0,50,48,100,39,176,251,247,240,16,240,7,0,
250 6,67,7,224,24,1,50,48,100,39,176,251,247,240,16,240,
251 15,0,6,67,38,129,5,176,189,232,240,143,0,56,1,64,
252 243,233,255,255,10,0,210,178,0,42,4,208,130,137,82,244,
253 0,82,130,129,4,224,131,137,77,246,255,114,19,64,131,129,
254 112,71,202,5,210,13,130,128,112,71,45,233,240,65,0,35,
255 0,37,0,39,95,240,0,14,12,0,164,178,64,246,106,22,
256 180,66,128,70,12,0,228,178,100,9,228,178,14,0,182,178,
257 22,240,31,6,95,240,1,12,28,250,6,252,1,44,2,209,
258 24,241,12,8,6,224,2,44,2,209,24,241,16,8,1,224,
259 24,241,20,8,19,0,219,178,0,43,6,208,216,248,0,48,
260 92,234,3,3,200,248,0,48,5,224,216,248,0,48,51,234,
261 12,3,200,248,0,48,189,232,240,129,2,0,0,35,8,0,
262 128,178,176,245,0,127,16,136,8,66,1,208,1,32,0,224,
263 0,32,192,178,112,71,0,0,0,241,1,3,129,7,4,208,
264 16,248,1,27,137,177,129,7,250,209,2,104,178,241,1,49,
265 145,67,17,240,128,63,4,191,80,248,4,47,246,231,16,248,
266 1,27,17,177,16,248,1,27,251,231,192,26,112,71,0,0,
267 128,181,82,72,0,104,80,244,128,112,80,73,8,96,80,72,
268 1,104,80,72,1,64,78,72,1,96,76,72,1,104,78,72,
269 1,64,74,72,1,96,73,72,0,104,48,244,128,32,71,73,
270 8,96,71,72,0,104,48,244,125,0,69,73,8,96,0,32,
271 70,73,8,96,0,240,5,248,95,240,0,96,68,73,8,96,
272 1,189,130,176,0,32,1,144,0,32,0,144,59,72,0,104,
273 80,244,128,48,57,73,8,96,56,72,0,104,16,244,0,48,
274 0,144,1,152,64,28,1,144,0,152,0,40,3,209,1,152,
275 176,245,160,79,240,209,49,72,0,104,128,3,2,213,1,32,
276 0,144,1,224,0,32,0,144,0,152,1,40,83,209,49,72,
277 0,104,80,240,4,0,47,73,8,96,46,72,0,104,80,240,
278 2,0,44,73,8,96,43,72,0,104,80,240,1,0,41,73,
279 8,96,41,72,0,104,80,240,128,80,39,73,8,96,79,244,
280 0,96,38,73,8,96,38,72,0,104,192,6,251,212,28,72,
281 0,104,27,73,8,96,26,72,0,104,25,73,8,96,24,72,
282 0,104,23,73,8,96,22,72,0,104,48,244,125,0,20,73,
283 8,96,19,72,0,104,80,244,17,0,17,73,8,96,15,72,
284 0,104,80,240,128,112,13,73,8,96,12,72,0,104,128,1,
285 251,213,11,72,0,104,128,8,128,0,9,73,8,96,8,72,
286 0,104,80,240,3,0,6,73,8,96,5,72,0,104,16,240,
287 12,0,12,40,249,209,2,176,112,71,0,0,0,56,2,64,
288 8,56,2,64,12,192,255,136,254,255,254,238,12,56,2,64,
289 8,237,0,224,0,60,2,64,36,56,2,64,0,112,0,64,
290 4,112,0,64,112,71,254,231,254,231,254,231,254,231,112,71,
291 128,181,43,72,0,104,65,28,41,74,17,96,64,242,245,17,
292 136,66,7,211,0,32,38,73,8,96,38,72,0,104,64,30,
293 36,73,8,96,34,72,0,104,50,40,4,210,128,33,34,72,
294 255,247,63,249,59,224,30,72,0,104,100,40,4,210,128,33,
295 29,72,255,247,52,249,50,224,25,72,0,104,150,40,4,210,
296 128,33,25,72,255,247,45,249,41,224,21,72,0,104,200,40,
297 4,210,128,33,20,72,255,247,34,249,32,224,16,72,0,104,
298 250,40,4,210,128,33,16,72,255,247,27,249,23,224,12,72,
299 0,104,176,245,150,127,4,210,128,33,11,72,255,247,15,249,
300 13,224,7,72,0,104,176,245,175,127,4,210,128,33,6,72,
301 255,247,7,249,3,224,128,33,3,72,255,247,0,249,1,189,
302 192,16,0,32,0,0,0,32,0,4,2,64,112,71,112,71,
303 112,71,25,224,80,248,4,43,211,7,68,191,169,241,1,3,
304 154,24,9,31,0,35,4,41,66,248,4,59,249,210,95,234,
305 129,124,19,70,4,213,79,240,0,12,162,248,0,192,155,28,
306 201,7,68,191,0,33,25,112,80,248,4,27,0,41,225,209,
307 112,71,48,181,1,104,132,104,66,24,65,104,2,235,81,3,
308 201,7,11,213,76,68,9,224,18,249,1,27,18,248,1,91,
309 0,41,4,248,1,91,5,213,73,28,249,209,154,66,243,209,
310 12,48,48,189,73,30,241,213,248,231,0,0,45,45,45,45,
311 91,66,111,111,116,93,65,80,80,76,73,67,65,84,73,79,
312 78,65,68,68,82,69,83,83,32,105,115,32,69,82,82,79,
313 82,33,33,33,13,10,0,0,16,181,7,73,121,68,24,49,
314 6,76,124,68,22,52,4,224,10,104,8,29,17,68,136,71,
315 1,70,161,66,248,209,16,189,80,0,0,0,108,0,0,0,
316 45,45,45,45,91,66,111,111,116,93,66,111,111,116,76,111,
317 97,100,101,114,32,82,117,110,110,105,110,103,46,46,46,32,
318 13,10,0,0,45,45,45,45,91,66,111,111,116,93,74,117,
319 109,112,95,84,111,95,65,112,112,108,105,99,97,116,105,111,
320 110,33,33,33,13,10,0,0,235,254,255,255,92,16,0,0,
321 104,0,0,32,0,0,0,0,27,255,255,255,68,1,0,0,
322 138,0,0,0,0,0,0,32,0,240,13,248,0,40,1,208,
323 255,247,178,255,175,243,0,128,0,32,175,243,0,128,255,247,
324 235,249,0,240,2,248,1,32,112,71,0,240,1,184,0,0,
325 7,70,56,70,0,240,2,248,251,231,0,0,128,181,175,243,
326 0,128,2,74,17,0,24,32,171,190,251,231,38,0,2,0,
327 56,181,4,70,13,70,40,70,0,240,6,248,168,66,24,191,
328 0,36,32,70,50,189,0,0,1,73,255,247,9,188,0,191,
329 32,0,0,32,1,72,128,71,1,72,0,71,145,16,0,8,
330 133,20,0,8,175,243,0,128,175,243,0,128,255,247,188,255,
331 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
332 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
333 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
334 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
335 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
336 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
337 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
338 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
339 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
340 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
341 255,247,254,191,255,247,254,191,255,247,254,191,255,247,254,191,
342 0,10,253,0,8,3,4,6,8,12,16,24,32,48,249,0,
343 31,1,2,3,4,1,2,3,4,6,7,8,9,2,4,1,
344 1,104,16,0,32,184,16,0,32,104,16,0,32,104,16,0,
345 32,252,0,3,104,16,0,32,252,0,7,100,0,0,32,80,
346 0,0,32,224,0};
IAR_STM32_BootLoader的更多相关文章
随机推荐
- 生成流水号(20060210-0001)的SQL函数
create table t_sql(id int identity(1,1),code char(13),[name] nvarchar(10)) go create function f_crea ...
- Python函数递归调用
函数的递归调用: 是函数嵌套调用的一种特殊形式 具体是指: 在调用一个函数的过程中又直接或间接地调用到了本身 # 直接调用本身 def func(): print('我是func') func() f ...
- wifi - 无线相关命令
1.Linux环境下的无线相关操作命令 interface 指代当前网卡 一般是 wifi0 , eth0 , ath1等 ifconfig - 常用查看网络设定及控制网卡(Windows下是ip ...
- Cypress系列(70)- server() 命令详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 启动服务器以开始将响应路由到 cy ...
- codevs1298, hdu1392 (凸包模板)
题意: 求凸包周长. 总结: 测试模板. 代码: #include <iostream> #include <cstdio> #include <cstring> ...
- 女朋友看了我的博客,说太LOW了,于是我搞了一天~
持续原创输出,点击上方蓝字关注我 原创博客+1,点击左下角阅读原文进入 目录 前言 如何下载? 配置文件的分类 基本信息配置 修改主题 Next主题样式设置 添加动态背景 修改链接的样式 添加文章搜索 ...
- Layui treeSelect 回写与对应选中
今天遇到个问题就是Layui treeSelect 的回写与特定选中,网络上居然没啥资料,有的也是不全的,于是花了点时间处理好了,这里写一下,方便以后有遇到的朋友借鉴. 一.父页面 二.Form编辑框 ...
- 关于linux epoll的了解
使用select/poll模型假设一台服务器需要支持100w的并发连接,在_FD_SETSIZE为1024时,则至少需要1k个进程 除了进程间的上下文切换的时间消耗外,从内核/用户空间,大量的无脑内存 ...
- Python作业1
name = " aleX" # 1 移除 name 变量对应的值两边的空格,并输出处理结果 print(name.strip()) # 2 判断 name 变量对应的值是否以 & ...
- python打印水仙花数的个人总结
面试过程中,提到python,面试最多的就是让你现场写代码实现水仙花.冒泡.九九乘法表,这些面试方法旨在校验面试者的python基础和思维逻辑. 先从水仙花说起,水仙花是指一个n位正整数(n>= ...