打印
[STM32F1]

通过串口USART实现STM32F10x的IAP在线升级

[复制链接]
1878|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
734774645|  楼主 | 2016-11-27 20:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
STM32F10x的IAP在线升级功能非常实用——不必拆开设备的外壳,然后通过JLINK或是其它工具烧录程序。而是仅通过设备上的串口、USB或是CAN,即可完成程序的更新,实现固件升级。

    整个过程用到两个程序,一个IAP程序,它用来实现通过串口下载用户程序。另一个就是用户应用程序了。

    通过串口实现在线升级的原理如下:
    1、首先通过JLINK或其它工具将IAP程序下载至STM32的FLASH中,其占据的地址空间为0x800 0000到0x800 2fff,这段空间用来存放IAP程序,IAP代码大小不能超过(0x800 2fff - 0x800 0000 = 12K)。
    2、打开“超级终端”,按照IAP程序里设置的参数(波特率、数据长度、校验位等),对“超级终端”作相应设置。
    3、将设备断电,按住设备上的某一开关或是按键(这个可以在IAP程序里自已定义,下文有叙述)。然后给设备上电,这时“超级终端”上会显示操作界面,让用户选择:1、给STM32下载新的用户程序;2、将STM32内现存的用户程序上传至电脑;3、运行新下载的用户程序。出现这个界面后,就可以松开开关或是按键了。
    4、通过电脑键盘上的“1”、“2”、“3”这几个数字键选择你想执行的操作。若是希望下载,按下数字键“1”.接下来电脑屏幕上会弹出对话框,让你选择希望下载的二进制文件,以及传输协议,这个得选“Ymodem”协议。完成后按“确定”就开始下载了。

沙发
734774645|  楼主 | 2016-11-27 20:59 | 只看该作者
再来看一下两个源程序里,用户根据自己的需要可能得改动的地方。   
    an2557.zip里面就是IAP程序
    这个程序里面,用户可能要改动的就是IAP的触发方式,即如何进入IAP来进行新的用户程序的下载。该源程序里定义的是一个连接至PB9的按键,当设备刚上电的时候,如果该按键按下,则进入IAP模式,否则跳至0x800 3000运行用户程序。如何触发IAP,用户可以根据自己的实际情况,自行定义。另外,这里面初始化了一个串口,即用来和PC通信的串口,波特率、数据长度、校验位等,也是这里设置的。
    再来看用用户应用程序里需要改动两个的地方。
    1、将中断向量表映射至0x800 3000处。在main函数里,待系统初始化后,可以通过这条语句即可实现:
       NVIC_SetVectorTable(0x08000000,0x00003000);
    2、将用户应用程序的起始地址设置为0x800 3000,在keil4中如下图所示:
      

    另外请注意,在线升级时只能选择BIN格式的二进制文件,可以通过H-JTAG里面的Convert工具,将Keil编译生成的HEX文件转换成BIN文件。


使用特权

评论回复
板凳
734774645|  楼主 | 2016-11-27 21:00 | 只看该作者
本帖最后由 734774645 于 2016-11-27 21:01 编辑

以上就是通过串口实现STM32IAP在线升级的原理及过程。
    若有不清楚的地方请看an2557:STM32F10x in-application programming using the USART 这个PDF文档,里面有详细的说明。
   
an2557 Application Note.pdf下载地址:
http://www.st.com/st-web-ui/stat ... note/CD00161640.pdf

an2557.zip下载地址:(IAP源代码)
http://www.st.com/st-web-ui/stat ... e/stsw-stm32008.zip

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

197

主题

3451

帖子

14

粉丝