STM32启动文件的选择及宏定义及芯片型号更改IAP总结(精)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32启动文件的选择及宏定义及芯片型号更改 IAP总结

startup_stm32f10x_cl.s 互联型的器件,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字节的STM32F101xx,

STM32F102xx,STM32F103xx

cl:互联型产品,stm32f105/107系列

vl:超值型产品,stm32f100系列

xl:超高密度产品,stm32f101/103系列

ld:低密度产品,FLASH小于64K

md:中等密度产品,FLASH=64 or 128

hd:高密度产品,FLASH大于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的系统主频率,依实际情况修改

#if defined (STM32F10X_LD_VL || (defined STM32F10X_MD_VL

#define SYSCLK_FREQ_24MHz 24000000

#else

#define SYSCLK_FREQ_72MHz 72000000

#endif

另外外部时钟在文件:stm32f10x.h 依实际修改

第二步定时器的参数依系统主时钟做适当修改

第三步 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:\Keil\ARM\BIN40\fromelf.exe --bin -o ./obj/Project.bin ./obj/Project.axf 其中,Project.bin 和 Project.axf 要和 Output 选项卡中的 Name of Executable 的名字

IAP我的总结

1 先FLASH_Unlock(;

2 小于或等于128K的STM每页为1k bytes,大于128K的每页为2K BYTES,减去从地址

0x8002000占用的0x2000后,算出页数,比如IAP占用8K,则64K的MD的STM32F系列用for(i=0;i<(64-8;i++ FLASH_ErasePage(0x8002000+0x400*i;循环按页擦除FLASH

3 按从外部串口获取到的数据,FLASH_ProgramWord(address,dat;//注意是按4字节方式写入的 if (*(uint32_t*address!= dat//字编程后校验

相关文档
最新文档