请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 IAP+Ymodem功能实现(参考官方代码)

[复制链接]
STMCU小助手 发布时间:2022-2-1 18:00
IAP:在线升级代码 ,通俗的讲就是通过USART,IIC,或者SPI,USB等等,方式,在程序中升级程序,一般用在远程升级,或者是在PCB板子都安装到模具之后还需要升级代码,这样我们就需要,通过IAP的方式来升级。
开发环境:MDK-V5,stm32cubeMx,SecureCRT8
硬件平台:stm32f103系列最小系统板,带有swd仿真接口和串口1
1、从st的官方获取到IAP的工程
8 `- Z- b4 o: G
1054826-20180101102647112-1110417948.png
( R  E1 `7 C2 t. _# ?
2、下载完了,解压之后点开里面有三个工程分别是l073,l469,f10的,根据需求自己选合适的,f10X的点开直接编译就可以,但是l073,和l469的点开发现没有库文件,我的天啊,这怎么办啊,哈哈,没关系了,接着向下看吧,
3、我们现在打开stm32cubeMx,根据自己的需求生成一个带串口和CRC的工程,没有CRC直接带串口就可以了,需要注意的几个地方,时钟配置,一定要根据自己实际的情况去配置时钟,串口的位数,如果使用了校验位,一定要在数据位多加1,8bit的数据位,1bit的校验位,一定要设置9bit的数据位,唉,到处都是坑,好了,可以导出工程了,导出来之后,测试一下串口功能是不是有效的,main函数里面自己写吧,实在不会,可以找我的。。。嘿嘿,完事之后备份一份这个代码,一会app代码也在这个里面写。
4、好了,我们现在有一个属于自己的带有串口的工程了,接着打开之前从官方下载的工程,把里面的Inc和Src文件夹拷贝过来,拷贝到我们的自己工程的路径下面,本来有的文件选择跳过就可以,一定不要替换。
5、接下来给工程里面添加文件,把该添加的都添加进去,主要有common.c,ymodem.c,menu.c,flash_if.c,应该是就这四个文件了,好了编译试试,哇,一大堆错误,别着急咱们一点一点的改,首先要改的是串口的句柄名称,和crc的句柄名称,可以改成统一的就可以,随便,我配合你你配合我的,无所谓了,改完之后在common.h里面添加你的usart.h有文件,随便你怎么,看你自己怎么添加咯,最后一点参考官方代码修改你的main文件,顺便把该有的错误都改了,完事下到MCU里面
6、现在我们来看看app代码怎么写,打开我们之前备份好的代码,修改的几个地方,看下面的截图

7 a$ }" ~' t! k( e& v) x2 T
1054826-20180101102647534-1266607816.png
: I! I- p5 P' V9 q% X% y
MDK里面点开魔术棒,修改Start的地址为你在之前的IAP代码里面写的地址,Size的大小是,你的全部地址,减去IAP代码占有的大小。然后在main函数里面添加下面一句代码,设置中断的向量的地址,
  • SCB->VTOR = FLASH_BASE | 0x4000;
    . X) u- C# x' O2 z! M7 S
0x4000是你的IAP程序的大小
MDK里面如下设置,生成bin文件

5 D4 s% b2 i, \0 B+ A& V+ N
1054826-20180101102647971-401275439.png

$ Y8 s; r3 Q+ X" @* f' w
7、生成之后,用超级终端或者SecureCRT8就可以烧录了
) M9 ^5 Y1 z7 ~. N' S+ c( P
/ \3 a3 v  G% x* G

0 z3 }6 l2 M  w' y3 d6 z/ z% A, C) W" n( s) ^1 w
1 c. [* K3 T, |/ j
收藏 评论1 发布时间:2022-2-1 18:00

举报

1个回答
常春藤 回答时间:2023-9-23 09:20:24

官方库版本太旧,很多写保护的找不到定义

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版