研究了2天的STM32系统IAP系统升级,也从网上借鉴了一些资源,这里记录一下也方便大家。
1、IAP说明:IAP,虽然网上有很多解释和介绍,我在这里就简单的理解为在线升级或者在系统编程,意思是不通过JTAG仿真器烧录可以更新系统程序。
2、准备工作:我所使用的是STM32L151C8T6,电路板有一个串口可以和外部连接,系统资源是64K的FLASH,10K的RAM。这里一定要弄清楚,我由于这个FLASH大小弄错了还犯了不小的错误和笑话。
3、IAP方案说明:
IAP系统升级,从字面意思理解你至少要有2个程序,程序1定义成IAP程序,程序2定义成APP程序。IAP程序正常运行,接收串口发来的数据,通过接收的数据判断是否是升级就的APP程序,如果是需要接收的APP升级程序,则接收该APP程序的.bin文件,并写到对应的FLASH地址区域,这里我使用的是FLASH的一半区域,0x08008000,注意64K对应的是0x08010000;
4、先写一个简单的APP程序,烧录在0x08008000区域,并测试运行是否正常,这里使用了一个简单的LED1灯进行指示,LED1指示灯闪烁。
参照例程建立新的工程即可,这里不做新建工程的说明。只说一下对应的在IAR系统中需要配置的几个地方。
A:设置IAR编译输出bin格式的二进制文件
B:设置烧录的FLASH地址和中断起始地址
5、在程序中指定偏移地址
6:通过仿真器验证程序可以正常执行。
7:编写IAP工程
IAP工程相对要麻烦一些,主要包含4个部分内容,串口接收发送程序,FLASH读写程序,IAP跳转程序,状态维护程序,下面一个一个说明。
串口收发程序不做介绍,按照官方例程设置即可,主要是设置接收中断中将上位机发送的升级文件保存到数组中即可。
FLASH读写程序主要涉及FLASH的操作过程,主要是调用库FLASH_WriteData(uint32_t WriteAddress, uint8_t *data, uint32_t num)函数,只要指定好地址和数据以及长度就可以了。注意修改其中的一些和硬件相关的LED状态指示。
还需要做一个标志,通知系统升级程序已经固化到对应的FLASH位置了,接下来就是最重要的IAP跳转程序了。
这里我使用IAP_Flash_UpdateFlag进行判断是否已经固化完升级程序,如果等于0X55就说明固化完成了,接下来就是
跳转到对应的固化地址APPLICATION_ADDRESS 去执行就可以了,注意要关闭中断,并复位系统。其中APPLICATION_ADDRESS 是宏定义的FLASH地址。
#define APPLICATION_ADDRESS (uint32_t)0x0800F000
在IAP工程中使用了和APP工程不同的LED指示灯指示状态,
至此IAP升级已经测试完成了。
根据自己的需要将对应的地址规划好,控制好升级程序的存储和IAP跳转就行了。
上一篇:STM32 TIM触发ADC 定时采样-笔记
下一篇:STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置
推荐阅读最新更新时间:2024-11-12 11:21
设计资源 培训 开发板 精华推荐
- 使用 STMicroelectronics 的 L9924 的参考设计
- 129516-HMC840LP6CE,用于评估 HMC840LP6CE PLL 时钟发生器的评估板
- 【智能车】Thomas small car 1094966A
- 使用 Analog Devices 的 LTC1867LCGN 的参考设计
- 基于STSPIN32F0251的三相逆变器
- AM1G-2412SH30Z 12V 1 瓦 DC/DC 转换器的典型应用
- LT1934IDCB 5V 降压转换器的典型应用电路
- MIC68200 的典型应用:具有跟踪和斜坡控制的 2A 排序 LDO
- AD8659ARZ-R7 4 mA至20 mA电流环路变送器的典型应用电路
- 柿饼派屏幕扩展模块