cubeMX配置stm32 F103 实现串口IAP
做个记录实现串口IAP 参考官方实例 D:\STM32Cube_FW_F1_V1.7.0\Projects\STM3210C_EVAL\Applications\IAP首先制作IAP程序,使用到外设一个串口 一个输入按键楼主使用的MCU型号为stm32F103RCT61、配置IAP程序的系统时钟下载口 串口外设 IO口外设(1)开启SWD接口(2)开启系统时钟(3)开启串口外设(我使用的是串口1,可根据自己信息更改)(4)配置一个IO口输入(5)完成系统时钟设置为72MHz,然后生成工程代码通过对比官方的工程发现我们少了四个文件,故此将ymodem.c common.c menu.cflash_if.c 以及对应的头文件分别拷贝到我们的工程里面的 src 和inc中,并添加到我们的工程中
(6)编译报错如下 是我们添加的四个文件中包含了四个头文件 但是我们项目中没有使用,定位到源处将其删除
(7)在此编译仍然报错,原因是添加的那四个文件中有使用到串口句柄,但是与目前我们工程中的串口句柄尚未进行相关的匹配
(8)在usart.h中添加如下代码#define UartHandle huart1并在新添加的四个文件中包涵usart.h并在此编译程序发现错误都消除了(9)在工程的主函数中将新添加的四个头文件都包含到系统工程中(10)在工程中申明引用如下两个全局变量(11)在while(1)之前添加如下代码(12)执行IAP的功能移植完毕编译并下载代码连接板子的串口至PC机,然后暗转那个程序中设定的按键然后进行系统复位,然后看到串口中打印出如下信息则表明IAP成功
2、用户程序编写 配置系统两个LED灯 然后生成代码
(1)在用户程序main函数的while(1)之前更改用户程序的中断向量地址
官方文件采用更改库函数的方法实现,一般不推荐不然下一次重新生成新的初始化代码的时候又的重新更改
至于0x4000的来源是我们在IAP程序中规定IAP的大小为0x4000,这个大小可以更改但是必须是0x200的整数倍
(2)用户程序中添加如下功能代码 反转LED灯
(3)由于IAP烧写的是bin文件故此需要输出bin文件 ,在MDK中做如下更改 然后保存编译代码
应为IAP已经使用了一部分的代码控制,故此我们的应用程序在flash中药做出相应的偏移
(4)然后回到用户程序的工程下可以看到生成了对应的bin文件
(5)回到之前串口界面可以看到如下信息
可知要想IAP下载程序请按下数字键盘上的1 则进入等待下载文件模式
然后以ymodem协议的方式下载我们生成的bin文件当出现如下信息则表明下载成功从中可知按下数组3则执行代码然后按下数字3则可以看到板载的LED灯按照我们程序的方式运行
至此完成了串口IAP的全部工作
这个牛,可以学习学习 那种方式运行?没看出来 cubemx确实方便啊! 一开始用到的官方IAP实例在哪里下载?谢谢 dwdsp 发表于 2022-8-11 09:24
一开始用到的官方IAP实例在哪里下载?谢谢
你有用STM32CUBEMX吗?有的话,在你自己的电脑里面找STM32CUBE这个文件夹,然后Repository,里面搜索IAP就有了。 liszt99 发表于 2022-8-16 10:05
你有用STM32CUBEMX吗?有的话,在你自己的电脑里面找STM32CUBE这个文件夹,然后Repository,里面搜索IAP ...
谢谢! 直接使用usb虚拟串口的单片机可以吗 串口IAP速度怎么样 ymodem没有实现了。 通信的效果怎么样 感觉实现IAP好复杂呢。 所有的串口都可以这么用吗 Repository命令的作用是什么 必须要用swd接口吗 这个工具用的我都不会建立工程了
页:
[1]
2