STM32芯片怎么通过无线更新程序?

STM32芯片怎么通过无线更新程序?,第1张

可以的,但是程序需要由两部分组成:1.bootloader;2.应用程序\x0d\x0abootloader:负责更新程序的拷贝和跳转到应用程序;\x0d\x0a应用程序:运行程序要实现的功能和更新程序的下载、保存。\x0d\x0a首先,开机时运行bootloader,bootloader检测片内Flash(或者片外Flash或者FRAM)“程序更新标志”是否置位,如果没有,则直接跳转到应用程序。应用程序运行时检测无线模块收到的数据命令,如果有updata命令,则接收程序,并保存到片内Flash的靠后的代码段(或者片外Flash),接收保存完数据后,片内Flash(或者片外Flash或者FRAM)“程序更新标志”置位,然后重启MCU。MCU重新运行bootloader,此时bootloader检测到有程序更新标志,则将片内Flash的靠后的代码段(或者片外Flash)的更新代码拷贝回应用程序代码段,并复位更新程序标志,然后跳转到应用程序,至此程序更新完毕。\x0d\x0aps:网上有已经实现的代码,你可以搜索“STM32 IAP”。

程序

1、使用STM32CubeProgrammer软件,连接STM32开发板,点击Erase,擦除Flash;

2、点击Program,选择新的程序文件,点击Program,烧录新的程序;

3、点击Verify,校验烧录的程序是否正确;

4、点击Reset,重启STM32,新的程序就烧录成功了。

1,stm32的bootloader,网上有很多例程,官网也有。文章最后我也会附上源代码链接。

开发环境keil.

设置地址如下:

这里需要一个按键(根据自己使用的开发板调整)

STM_EVAL_PBInit()//按键初始化

if(STM_EVAL_PBGetState()) //判断按键是否进入bootloader.

......

Main_Menu ()//这部分主要是bootloader升级部分,要重点细看

......

/* 这里是跳转到应用程序部分*/

if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

{

/* Jump to user application */

JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4)

Jump_To_Application = (pFunction) JumpAddress

/* Initialize user application's Stack Pointer */

__set_MSP(*(__IO uint32_t*) ApplicationAddress)

Jump_To_Application()

}

......

2,找一个支持Ymodem的串口工具,这个很重要。有很多都不能升级,然后我去secureCRT官网下载了个试用版本就可以IAP了。

Download - SecureCRT (vandyke.com)

http://pan.baidu.com/s/1dELQHY5

 密码:9yum   打开软件     根据自己电脑系统,选择对应版本   第一次打开会d出快速链接,选择串口协议,然后点击连接。 , 根据实际情况设置端口,和波特率,去掉流控制, 点连接。 如果什么也没有提示说明连接成功。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12122378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存