找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4868|回复: 0
收起左侧

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

[复制链接]
ID:75263 发表于 2015-6-9 03:05 | 显示全部楼层 |阅读模式
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.sFLASH在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++/PREPROMCESSORsymbols的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)
     
     
     
     
   #defineSTM32F10X_HD     
      
     
#endif
如果芯片更换,除了做如上所述的更改外,还需以下几步
第一步  system_stm32f10x.c的系统主频率,依实际情况修改
#if defined (STM32F10X_LD_VL) || (definedSTM32F10X_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 UserPrograms 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的每页为2KBYTES,减去从地址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)//字编程后校验

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表