第一篇:STM32啟動文件的選擇及宏定義及芯片型號更改IAP總結(jié)(精)
STM32啟動文件的選擇及宏定義 及芯片型號更改 IAP總結(jié)
startup_stm32f10x_cl.s 互聯(lián)型的器件,STM32F105xx,STM32F107xx
startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_hd_vl.s 大容量的STM32F100xx
startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_ld_vl.s 小容量的STM32F100xx
startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM32F103xx
startup_stm32f10x_md_vl.s 中容量的STM32F100xx
startup_stm32f10x_xl.s FLASH在512K到1024K字節(jié)的STM32F101xx,STM32F102xx,STM32F103xx
cl:互聯(lián)型產(chǎn)品,stm32f105/107系列
vl:超值型產(chǎn)品,stm32f100系列
xl:超高密度產(chǎn)品,stm32f101/103系列
ld:低密度產(chǎn)品,F(xiàn)LASH小于64K
md:中等密度產(chǎn)品,F(xiàn)LASH=64 or 128
hd:高密度產(chǎn)品,F(xiàn)LASH大于128
在KEIL下可以在項目的選項C/C++/PREPROMCESSOR symbols的Define欄里定義,比如STM32F10X_CL 也可以在STM32F10X.H里用宏定義
#if!defined(STM32F10X_LD &&!defined(STM32F10X_LD_VL &&!defined(STM32F10X_MD &&!defined(STM32F10X_MD_VL &&!defined(STM32F10X_HD &&!defined(STM32F10X_XL &&!defined(STM32F10X_CL
#define STM32F10X_HD #endif
如果芯片更換,除了做如上所述的更改外,還需以下幾步: 第一步 system_stm32f10x.c的系統(tǒng)主頻率,依實際情況修改 #if defined(STM32F10X_LD_VL ||(defined STM32F10X_MD_VL #define SYSCLK_FREQ_24MHz 24000000 #else
#define SYSCLK_FREQ_72MHz 72000000 #endif
另外外部時鐘在文件:stm32f10x.h 依實際修改 第二步 定時器的參數(shù)依系統(tǒng)主時鐘做適當(dāng)修改
第三步 flash地址misc.h中的NVIC_VectTab_Flash 0x08000000 要與KEIL選項target的IROM1的地址一致,如果是IAP程序,依ISP程序占用大小,APP的FLASH地址向后延,比如0X8002000,那么KEIL選項target的IROM1的地址也要就0x8002000,SIZE因為ISP占用了2000,所以就為0x40000-0x2000,即只能填寫0X3E000
第四步 ISP程序與APP程序連接----(這一步我還不明白意思,需要驗證)
打開 User 選項卡 在 Run User Programs Before Build/Rebuild 中,勾選 Run#1,并在 其中填入
D:KeilARMBIN40fromelf.exe--bin-o./obj/Project.bin./obj/Project.axf
其中,Project.bin 和 Project.axf 要和 Output 選項卡中的 Name of Executable 的名字
IAP我的總結(jié) 先FLASH_Unlock(;小于或等于128K的STM每頁為1k bytes,大于128K的每頁為2K BYTES,減去從地址0x8002000占用的0x2000后,算出頁數(shù),比如IAP占用8K,則64K的MD的STM32F系列用for(i=0;i<(64-8;i++ FLASH_ErasePage(0x8002000+0x400*i;循環(huán)按頁擦除FLASH 按從外部串口獲取到的數(shù)據(jù),F(xiàn)LASH_ProgramWord(address,dat;//注意是按4字節(jié)方式寫入的
if(*(uint32_t*address!= dat//字編程后校驗