stm32f103的串口IAP(使用Ymodem)调试过程记录

准备
  1. 开发环境:IAR EWARM v8
  2. 下载官方Bootloader程序包 en.stsw-stm32008.zip和应用手册 AN2557下载页面
Bootloader程序修改
  1. 解压缩 en.stsw-stm32008.zip 文件,进入目录 STM32F10x_AN2557_FW_V3.3.0\Project\IAP\EWARM\ 中,用IAR打开 IAP.eww
  2. 由于这里采用的处理器为stm32f103re,为hd型处理器,所以在IAR打开的界面中,根据 AN2557 P5(第5页)Workspace中,选择STM3210E-EVAL,此时IAR的工程文件夹EWARMv5中,使用启动文件 startup_stm32f10x_hd.s
  3. option – General Options 中选择处理器为 stm32f103re。尝试编译工程,会发现多个问题,解决过程不再详述,多为开发stm32所需的基本功。如Warning[25]可参考此文章。另外,core_cm3.c文件中的代码
uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
  __ASM("strexh r0, r0, [r1]");
  __ASM("bx lr");
}

会出现错误,替换成如下代码即可:

uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
   return(result);
}
  1. 修正官方ymodem.c文件:flash擦除(line 214)、flash写入(line 236)前后加入解锁、加锁语句:
FLASH_Unlock();
......
FLASH_Lock();
  1. 修改IAP的触发条件和下载流程,原程序采用按键触发,可以修改为检测flash某个地址的数据来触发等。
  2. 确认工程选项,在 Linker 中,Vector Table: 0x08000000, Memory Regions: ROM: 0x08000000~0x08005FFF(这里app的起始地址为0x08006000),RAM默认。
  3. 编译下载Bootloader。
App程序修改
  1. 使用已经测试验证没问题的app工程。
  2. 修改工程选项,在 Linker 中,Vector Table: 0x08006000, Memory Regions: ROM: 0x08006000~0x0807FFFF(这里app的起始地址为0x08006000),RAM默认。
  3. 在app中修改中断向量表偏移地址,可在main函数中加入如下语句实现:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x6000);
  1. 修改工程选项,在 Linker 中,Output Converter中设置生成bin文件。
  2. Rebuild All,生成app.bin。
IAP测试
  1. 建议使用SecureCRT作为PC端软件。
  2. 触发IAP,用SecureCRT – Transfer – Send Ymodem,发送app.bin。
  3. 验证app是否成功执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值