[应用相关] cubeMX配置stm32 F103 实现串口IAP

[复制链接]
2270|34
 楼主| flycamelaaa 发表于 2022-8-10 09:42 | 显示全部楼层 |阅读模式
做个记录实现串口IAP 参考官方实例
D:\STM32Cube_FW_F1_V1.7.0\Projects\STM3210C_EVAL\Applications\IAP
首先制作IAP程序,使用到外设一个串口 一个输入按键  楼主使用的MCU型号为stm32F103RCT6
1、配置IAP程序的系统时钟下载口 串口外设 IO口外设
(1)开启SWD接口
9649262f30c8c49edf.png
(2)开启系统时钟
1691162f30c9e73a99.png
(3)开启串口外设(我使用的是串口1,可根据自己信息更改)
8378062f30cb30b6a6.png
(4)配置一个IO口输入
1447462f30cd766589.png
(5)完成系统时钟设置为72MHz,然后生成工程代码
412162f30cea0bcf3.png
通过对比官方的工程发现我们少了四个文件,故此将ymodem.c   common.c   menu.c  flash_if.c 以及对应的头文件分别拷贝到我们的工程里面的 src 和inc中,并添加到我们的工程中

评论

哦哦哦,多谢楼主原创  发表于 2022-8-11 09:11
 楼主| flycamelaaa 发表于 2022-8-10 09:43 | 显示全部楼层
(6)编译报错如下 是我们添加的四个文件中包含了四个头文件 但是我们项目中没有使用,定位到源处将其删除
8873462f30d1782437.png
(7)在此编译仍然报错,原因是添加的那四个文件中有使用到串口句柄,但是与目前我们工程中的串口句柄尚未进行相关的匹配
1599062f30d2e9145b.png
 楼主| flycamelaaa 发表于 2022-8-10 09:45 | 显示全部楼层
(8)在usart.h中添加如下代码  #define UartHandle huart1
并在新添加的四个文件中包涵usart.h  并在此编译程序发现错误都消除了
6457362f30d6ab19a7.png
(9)在工程的主函数中将新添加的四个头文件都包含到系统工程中
5245062f30d807b773.png
(10)在工程中申明引用如下两个全局变量
1947662f30d92f01fa.png
(11)在while(1)之前添加如下代码
1223462f30da411e09.png
(12)执行IAP的功能移植完毕编译并下载代码
连接板子的串口至PC机,然后暗转那个程序中设定的按键然后进行系统复位,然后看到串口中打印出如下信息则表明IAP成功
3381762f30db7db07c.png


 楼主| flycamelaaa 发表于 2022-8-10 09:50 | 显示全部楼层
2、用户程序编写 配置系统两个LED灯 然后生成代码
1916262f30e3aa45d4.png
(1)在用户程序main函数的while(1)之前更改用户程序的中断向量地址
3749262f30e4e6c15e.png
官方文件采用更改库函数的方法实现,一般不推荐不然下一次重新生成新的初始化代码的时候又的重新更改
9380362f30e6c9c89e.png
至于0x4000的来源是我们在IAP程序中规定IAP的大小为0x4000,这个大小可以更改但是必须是0x200的整数倍
(2)用户程序中添加如下功能代码 反转LED灯
9245962f30e8735c06.png
(3)由于IAP烧写的是bin文件故此需要输出bin文件 ,在MDK中做如下更改 然后保存编译代码
6632762f30e9f4659c.png
9411462f30eab06f3e.png
应为IAP已经使用了一部分的代码控制,故此我们的应用程序在flash中药做出相应的偏移
(4)然后回到用户程序的工程下可以看到生成了对应的bin文件
3628462f30eca1dc79.png


 楼主| flycamelaaa 发表于 2022-8-10 09:51 | 显示全部楼层
(5)回到之前串口界面可以看到如下信息
3676062f30efda8e23.png
可知要想IAP下载程序请按下数字键盘上的1 则进入等待下载文件模式
6078162f30f0f3df18.png
5964262f30f1a18a87.png
然后以ymodem协议的方式下载我们生成的bin文件
当出现如下信息则表明下载成功
6347262f30f2cb1f78.png
从中可知按下数组3则执行代码
然后按下数字3则可以看到板载的LED灯按照我们程序的方式运行
至此完成了串口IAP的全部工作

lvyunzeng 发表于 2022-8-10 14:28 | 显示全部楼层
这个牛,可以学习学习
xxmmi 发表于 2022-8-10 22:06 | 显示全部楼层
那种方式运行?没看出来
yangxiaor520 发表于 2022-8-11 08:22 来自手机 | 显示全部楼层
cubemx确实方便啊!
dwdsp 发表于 2022-8-11 09:24 | 显示全部楼层
一开始用到的官方IAP实例在哪里下载?谢谢
liszt99 发表于 2022-8-16 10:05 | 显示全部楼层
dwdsp 发表于 2022-8-11 09:24
一开始用到的官方IAP实例在哪里下载?谢谢

你有用STM32CUBEMX吗?有的话,在你自己的电脑里面找STM32CUBE这个文件夹,然后Repository,里面搜索IAP就有了。
dwdsp 发表于 2022-8-17 08:51 | 显示全部楼层
liszt99 发表于 2022-8-16 10:05
你有用STM32CUBEMX吗?有的话,在你自己的电脑里面找STM32CUBE这个文件夹,然后Repository,里面搜索IAP ...

谢谢!
houjiakai 发表于 2022-8-17 16:00 | 显示全部楼层
直接使用usb虚拟串口的单片机可以吗
qiufengsd 发表于 2022-8-18 18:18 | 显示全部楼层
串口IAP速度怎么样   
jkl21 发表于 2022-8-18 18:52 | 显示全部楼层
ymodem没有实现了。   
51xlf 发表于 2022-8-18 20:05 | 显示全部楼层
通信的效果怎么样   
soodesyt 发表于 2022-8-19 20:30 | 显示全部楼层
感觉实现IAP好复杂呢。   
tpgf 发表于 2022-9-6 13:02 | 显示全部楼层
所有的串口都可以这么用吗
nawu 发表于 2022-9-6 13:10 | 显示全部楼层
Repository命令的作用是什么
aoyi 发表于 2022-9-6 20:49 | 显示全部楼层
必须要用swd接口吗
zljiu 发表于 2022-9-6 20:56 | 显示全部楼层
这个工具用的我都不会建立工程了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

872

主题

4624

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部