栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32开发手册-IAP流程

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32开发手册-IAP流程

。

程序组成: 1. 开机的时候先显示提示信息,然后等待串口输入 接收 APP 程序(无校验,一次性接收),在串口接收到 APP 程序之后,即可执行 IAP 。 2. 如果 是 SRAM APP ,通过按下 KEY0 即可执行这个收到的 SRAM APP 程序。 3. 如果是 FLASH APP, 则需要先按下 KEY_UP 按键,将串口接收到的 APP 程序存放 STM32F4 的 FLASH,之后再按 KEY2 既可以执行这个 FLASH APP 程序。 4. 通过 KEY1 按键,可以手动清除串口接收到的 APP 程序。 DS0 用于指示程序运行状态。

1-BootLoader程序,

  • 地址:0x08000000-0x08010000
  • 空间:0x00010000(64K 字节)

2-FLASH APP程序,

  • 地址:0x08010000-0x08100000,
  • 空间:0x100000-0x10000=0xF0000(960K 字节)
1-BootLoader程序程序生成 在 HARDWARE 文件夹所在的文件夹下新建一个 IAP 的文件夹,并在该文件夹下新建 iap.c 和 iap.h 两个文件。然后在工程里面新建一个 IAP 的组,将 iap.c 加入到该组下面。
  • iap_write_appbin 函数用于将存放在串口接收 buf 里面的 APP 程序写入到 FLASH。
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)
//appxaddr:应用程序的起始地址
//appbuf:应用程序 CODE.
//appsize:应用程序大小(字节)
  • 跳转到APP 程序运行地址
void iap_load_app(u32 appxaddr)
将 usart.c 和 usart.h 做了稍微修改。 这里,我们指定 USART_RX_BUF 的地址是从 0x20001000 开始,该地址也就是 SRAM APP 程序的起始地址!然后在 USART1_IRQHandler 函数里面,将串口发送过来的数据,全部接收 到 USART_RX_BUF ,并通过 USART_RX_CNT 计数。代码比较简单,我们就不多说了。
//接收缓冲,最大 USART_REC_LEN 个字节,起始地址为 0x20001000. 
u16 USART_RX_STA=0; //接收状态标记 
u32 USART_RX_CNT=0; //接收的字节数

main.c接收程序 更新固件

2-FALSH APP生成

(1)keil修改APP程序起始地址更改

  • 地址:0x08010000-0x08100000,
  • 空间:0x100000-0x10000=0xF0000(960K 字节)

(2)中断向量表的偏移量

SystemInit 函数VTOR寄存器存放中断向量的起始地址

#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;

#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; 

#endif

为了避免修改系统文件,在main.c中修改 中断起始地址,FALSH APP的起始地址

SCB->VTOR = FLASH_BASE | 0x10000;
fromelf.exe 转换工具 将MDK输出的.hex转为.bin

。

。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979762.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号