程序组成:

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;
/* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
/* Vector Table Relocation in Internal FLASH. */
#endif

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

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

STM32开发手册-IAP流程相关推荐

  1. Linux应用程序开发之man手册汉化+开发的简易流程说明

    Linux应用程序开发之man手册汉化+开发的简易流程说明 1,开发中善于使用man手册 man手册安装命令: sudo apt-get install manpages-dev man手册汉化安装命 ...

  2. Python语音机器人控制STM32开发流程

    一:Python语音机器人控制STM32开发流程 1. 上位机的开发用到的工具: 1.1. Python3.9 1.2. Pycahrm社区版 2. 上位机开发用到的模块: import sys # ...

  3. STM32全套开发板视频教程+实例源码+开发手册+调试工具下载

    好多人找不到STM32系列的学习资料,教程什么的,在这里说明一下,去正点原子的官网有STM32全套开发板视频教程+代码+开发手册+调试工具的下载链接:http://www.openedv.com/do ...

  4. Linux/Windows配置stm32免费开发环境详细流程

    系统:linux mint 18.3 xfce,windows10  stm32开发板:正点原子mini板(stm32f103rc)  烧写器:stlink v2  如果是JLINK的可以参考这篇  ...

  5. STM32开发 -- 低功耗模式详解

    很多单片机都有低功耗模式,STM32 也不例外.当 CPU 不需继续运行时,可以利用多个低功耗模式来节省功耗. 这部分不是我负责,但是也是有必要看一下的. 参看: STM32F1开发指南-库函数版本_ ...

  6. 韦东山 IMX6ULL和正点原子_「正点原子NANO STM32开发板资料连载」第三章 MDK5 软件入门1...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三章 M ...

  7. NBIOT 移远BC28模块+stm32开发板例程、教程(打通TCP、COAP协议)

    为了开发者能够快速入门BC28的开发,加快开发者的项目进度,开发出此款针对BC28的stm32开发板和完善的发送网络数据的示例程序(TCP协议.COAP协议),程序流程逻辑清楚,注释完善,上手就可以玩 ...

  8. 白话阿里巴巴Java开发手册(编程规约)

    本文欢迎转载,转载请注明原文链接,并附作者个人信息李艳鹏. 研发流程管理 最近,阿里巴巴发布了<阿里巴巴Java开发手册>,总结了阿里人多年一线实战中积累的研发流程规范,这些流程规范在一定 ...

  9. 熟读《阿里巴巴java开发手册》(三、单元测试,四、安全规约)

    目录 三.单元测试 四.安全规约 三.单元测试 1. [强制] 好的单元测试必须遵守 AIR 原则. 说明: 单元测试在线上运行时,感觉像空气( AIR)一样并不存在,但在测试质量的保障上,却是非常关 ...

最新文章

  1. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
  2. Win7下安装配置PHP+Apache+Mysql+PHPMyAdmin环境教程(非集成)
  3. 大话移动开发之QT-Quick
  4. linux unbuntu屏幕显示不完整,解决 NetBeans 在 Gnome3 显示不全的问题
  5. miui9Android8.0更新,MIUI9 暂停更新工作,或为 MIUI 10 将至?
  6. 微擎小程序怎么配置服务器域名,随便撸源码源码微擎小程序通用配置图文教程,教会你怎么配置微擎小程序!...
  7. 换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」
  8. Codeforces Round #734 (Div. 3) 题解
  9. 入门级实操教程!从概念到部署,全方位了解K8S Ingress!
  10. dns的服务器地址是多少当前位置,dns的服务器地址设置为多少
  11. 防止黑客入侵的五大技巧
  12. 用python画出吉祥物
  13. oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战
  14. input file限制上传文件类型
  15. 几个LabVIEW软件欢迎页面
  16. RuntimeError: mat1 dim 1 must match mat2 dim 0
  17. 统计套利之平稳性检验
  18. 服务器安装m.2固态硬盘,笔记本怎么安装M.2接口固态硬盘?笔记本M.2接口固态硬盘安装方法...
  19. 微软打补丁出现“此更新不适用于您的计算机”
  20. BERT模型系列大全解读

热门文章

  1. 小程序学习笔记--进阶之路
  2. Google60款开源项目
  3. 一个完美的JS加密和解密程序
  4. 反向传播算法的理论基础,神经网络反向传播算法
  5. 计算机设备驱动的作用,驱动程序是什么意思,电脑驱动程序有什么作用!
  6. Centos8修改mysql密码
  7. 什么是接口测试?接口测试的流程步骤
  8. 什么是微服务?微服务架构的优缺点、应用
  9. 什么是MapReduce
  10. 基于麦克风阵列的声源定位算法之GCC-PHAT