基于STM32F4,实现RT-Thread的串口OTA(Ymodem_ota的方式)
手把手教学,从零到一实现RT-Thread的Ymodem-ota
文章目录
前言
前言:主要还是基于RT-Thread的文档中心(以下简述为“文档中心”:https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/),然后自己根据实际操作实现Ymodem-ota,如果有什么疑问的,欢迎留言交流~
一、首先准备好一个可以使用Env工具的工程
直接参考:https://blog.youkuaiyun.com/Jerry_Han0/article/details/112652922。
我这里以正点原子的STM32F407ZGT6,探索者作为例子,来进行实验,用一个简单BSP例子来实现Ymodem-ota,保持RTT和原子哥的开源精神,绝对手把手实现
二、使用官方的bootloader文件
生成方式可以看一下文档中心只是特别强调一下对于F407ZGT6的相关配置
生成官网网址:Bootloader 在线获取地址: http://iot.rt-thread.com
通过上面的步骤后,将收到一个压缩包,里面包含了一个bin文件
三、下载bootloader文件
直接参考文档中心即可,我这里不再赘述,值得强调的事需要注意两点,一,注意不自己把Flash给写保护了,防止被锁;二,在烧录bootloader之前,还是将整个芯片的flash都擦除一遍吧
四、制作APP程序(重点)
1.APP修改连接脚本(偏移地址)
1.修改偏移地址
2.修改中断向量表的跳转基址
修改后可以直接烧录,即将代码下载到偏移地址处
3.运行APP程序
2.APP添加FAL
看图即可,简单易懂
1.
2.
3.
4.
5.
6.
7.如果 BSP 没有该选项,则需要手动在 board 文件夹的 Kconfig 添加下面定义,保存,然后重新进入 menuconfig 即可
8.
9.
10.若9有错误,说明没有执行7
3.定义flash分区表
修改E:\My_desktop\RT_thread_learn\rt-thread-master\bsp\stm32\stm32f407-atk-explorer\board\ports/fal_cfg.h 文件中的分区表,使分区表中 download 分区的起始地址和大小与 Bootloader 中的 download 分区一致
1.先将该文件复制到工程board\ports文件夹中(如果没有则创建文件夹ports),由于工程原本就是参考atk-explorer的BSP,因此此分区表(头文件)已经在相应的文件中
2.修改board文件夹中的SConscript文件,将上面的分区表(fal_cfg.h头文件)的路径加入即可(如:path += [cwd + ‘/ports’])
3.使用Env工具重新生成工程(scons --target=mdk5)
4.修改FAL分区表(fal_cfg.h头文件)
5.初始化FAL配置
4.APP添加OTA下载器
1.APP添加OTA下载器(这里我都选上了,最好不要选择Enable HTTP/HTTPS OTA,我们这里主要只演示使用串口Ymodem的方式来进行OTA,而且添加了有点问题,如下)
2.添加头文件(这一步我是参考的blibili上RTT国际哥的视频,但还是有问题,见下)
3.更新包并生成工程
4.添加了头文件还是有一个错误
5.使能此选项(参考的文档中心的使用,但是有大量问题,见下)
6.使能后,错误高达30
7.然后再用Env取消使能后,错误消失(之前那个缺乏头文件的故障也消失了。。很奇怪,求解)
5.打包新的APP到下载区
1.使用固件打包器,将新的app压缩打包(这里特别重要,一定不能够将固件名称任意填写,我就没有注意,以为可以和固件版本一样可以自定义,特别注意)
2.传输新app
3.传输成功
总结
应该还是比较清晰了吧,如果不够清晰的话,可以提议我重新修改文本,力求都能够接受。
最后,上面所遇到的问题,求解。。。呼叫RTT大佬们解答,非常感谢
附加源代码:
链接:https://pan.baidu.com/s/1EFn3O2Xc6bQUCSsaEy6qfA
提取码:b2pd
复制这段内容后打开百度网盘手机App,操作更方便哦