STM32 |
您所在的位置:网站首页 › amda46300cpu升级 › STM32 |
引言
在我们把产品封装到了机器里面之后,当需要升级代码就变得很麻烦了,就要拆外壳,连接烧写器才能进行代码的升级,比如是买出去的产品,那更新就变得更加麻烦了,所以造成代码升级就变得非常麻烦。所以就有了一种新的更新程序的方法(IAP)。使用了该方式的单片机产品,只要在最开始预留了“SD卡”或者“串口接口”就能简单的进行程序的升级更新了。这里我们使用对“串口”更新程序的方式进行步骤讲解。 一、思路简介首先我们理出一条思路,就如手机一样,我们在开机的时候长按某个键就能进行系统的升级一样,这里我们就按着这个思路,做一个单片机进行IAP升级程序的思路: (1)Bootloader程序首先我们需要在单片机里面写一个程序,这个程序(Bootloader)的功能是: 没有按下+ 被按下 单片机上电+ 按键被按下了吗??+++ 跳转到程序代码区++ 单片机接收电脑的串口数据+++ 覆盖旧程序的方式写入单片机Flash里++++ 运行功能代码+ (2)更新的程序然后下面就是我们要更新程序了,这个首先需要单片机直接跳转到“跳转到程序代码区”的Flash进行程序的运行,功能是: 单片机上电+ 跳转到程序代码区++ 运行功能代码+ 二、代码具体实现方法 (1)Bootloader程序具体实现方法 否 是 num位为0+ num位为1+ Key被按下++ Key没有按下++ 通电+ if判断Key被按下为低电平?+++ while循环+ 打开uart2串口接收,使代码更新标志位:num=1++++ if判断num代码更新标志位为0吗?+++ 通过iap_load_app函数跳转到程序地址执行++++ 电脑通过串口把bin文件发送给单片机+++ if判断Key被按下为低电平??+++ 单片机把DATA缓存的串口数据通过iap_write_appbin函数覆盖旧代码的方式写入单片机Flash里+++++++++ 返回循环+ 运行程序功能代码++具体代码展示: 文件下载链接: https://download.csdn.net/download/qq_26043945/82885061 (1)操作第一步烧录(旧程序)为了模拟真实情况,我们先用下载器烧录(旧程序)。打开工程文件 “ LED每1000毫秒闪一次(旧程序) ” ,在烧录前设置IROM1的Start为:0x8020000 ;设置IROM1的Size为:0x20000 ,然后使用烧写器进行代码烧录即可。 1.Bootloader程序只会在单片机通电的时候运行一次,它的功能为:判断Key是否按下?假如:①Key按下,就打开串口,然后电脑把新程序通过串口发送给单片机,然后再按下Key键,单片机则把接收的数据覆盖掉原来 0x8020000 的(旧程序),最后跳转到Flash的 0x8020000 地址执行覆盖后的新程序。 2.打开工程文件 “ Bootloader程序 ” ,在烧录前设置IROM1的Start为:0x8000000 ;设置IROM1的Size为:0x40000 ,然后使用烧写器进行代码烧录即可。 打开工程文件 “ LED每100毫秒闪一次(替换程序) ” ,并且设置IROM1的Start为:0x8020000 ;设置IROM1的Size为:0x20000 。 在下面设置:C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o D:\xxxx\xxxx\xxxx\LED.bin D:\xxxx\xxxx\xxxx\LED.axf (注意:xxxx\xxxx\xxxx 是按你工程的位置进行填写),然后编译该工程后,就会生成bin文件,在该工程下面找到bin文件。 单片机在通电前长按Key键(PC15拉低),单片机打开了串口接收等待数据接收,通电几秒后松开Key键,这时把bin文件通过电脑串口把文件发送给单片机。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |