IAP

cubeMX配置stm32 F103 实现串口IAP

做个记录实现串口IAP 参考官方实例 

D:\STM32Cube_FW_F1_V1.7.0\Projects\STM3210C_EVAL\Applications\IAP

首先制作IAP程序,使用到外设一个串口 一个输入按键  楼主使用的MCU型号为stm32F103RCT6

1、配置IAP程序的系统时钟下载口 串口外设 IO口外设

(1)开启SWD接口

image.png

(2)开启系统时钟

image.png

(3)开启串口外设(我使用的是串口1,可根据自己信息更改)

image.png

(4)配置一个IO口输入

image.png

(5)完成系统时钟设置为72MHz,然后生成工程代码

image.png

通过对比官方的工程发现我们少了四个文件,故此将ymodem.c   common.c   menu.c  flash_if.c 以及对应的头文件分别拷贝到我们的工程里面的 src 和inc中,并添加到我们的工程中

(6)编译报错如下 是我们添加的四个文件中包含了四个头文件 但是我们项目中没有使用,定位到源处将其删除

image.png

(7)在此编译仍然报错,原因是添加的那四个文件中有使用到串口句柄,但是与目前我们工程中的串口句柄尚未进行相关的匹配

image.png

(8)在usart.h中添加如下代码  #define UartHandle huart1

并在新添加的四个文件中包涵usart.h  并在此编译程序发现错误都消除了

image.png

(9)在工程的主函数中将新添加的四个头文件都包含到系统工程中

image.png

(10)在工程中申明引用如下两个全局变量

image.png

(11)在while(1)之前添加如下代码

image.png

(12)执行IAP的功能移植完毕编译并下载代码

连接板子的串口至PC机,然后暗转那个程序中设定的按键然后进行系统复位,然后看到串口中打印出如下信息则表明IAP成功
image.png

2、用户程序编写 配置系统两个LED灯 然后生成代码

image.png





(1)在用户程序main函数的while(1)之前更改用户程序的中断向量地址

image.png

官方文件采用更改库函数的方法实现,一般不推荐不然下一次重新生成新的初始化代码的时候又的重新更改

image.png

至于0x4000的来源是我们在IAP程序中规定IAP的大小为0x4000,这个大小可以更改但是必须是0x200的整数倍

(2)用户程序中添加如下功能代码 反转LED灯

image.png

(3)由于IAP烧写的是bin文件故此需要输出bin文件 ,在MDK中做如下更改 然后保存编译代码

image.png

image.png

应为IAP已经使用了一部分的代码控制,故此我们的应用程序在flash中药做出相应的偏移

(4)然后回到用户程序的工程下可以看到生成了对应的bin文件

image.png


(5)回到之前串口界面可以看到如下信息

image.png

可知要想IAP下载程序请按下数字键盘上的1 则进入等待下载文件模式

image.png

image.png

然后以ymodem协议的方式下载我们生成的bin文件

当出现如下信息则表明下载成功

image.png

从中可知按下数组3则执行代码

然后按下数字3则可以看到板载的LED灯按照我们程序的方式运行

至此完成了串口IAP的全部工作

IAP.rar

IAP_APP.rar



IAP_APP.rar

IAP.rar


已邀请:

popdes

赞同来自:

赞,非常详细,谢谢分享

just for real

赞同来自:

用什么工具可以保证是ymodem进行下发数据

村长

赞同来自:

超级终端  可以选择传输协议 

cos12a

赞同来自:

CAN 接口能实现ymodem协议吗?

yuxiansheng - buxianxgbin

赞同来自:

你好,为什么传不了应用程序

好脾气是磨出来的

赞同来自:

写的很详细,感谢分享

要回复问题请先登录注册