| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> IAP-Bootloader | 基于STM32F407+STM32CubeMX - 通过按钮实现Bootloader程序与APP程序互相切换 -> 正文阅读 |
|
[嵌入式]IAP-Bootloader | 基于STM32F407+STM32CubeMX - 通过按钮实现Bootloader程序与APP程序互相切换 |
一、前言1.1、IAP与ISPbootloader一般分为两种: 1、ISP - 使用ST芯片自带的bootloader程序实现APP程序的刷写,其优势是简单,可靠。 2、IAP - 自己编写一个bootlader实现APP程序的刷写,其优势是自定义,灵活性强。可以通过任意的通讯接口实现远程升级。 ISP的bootloader实战,可以参考之前我的以下文章: bootloader | 基于STM32F407 - 使用STM32Cubeprogrammer的USB DFU进行固件烧写 bootloader | 基于STM32F407 - 使用STM32Cubeprogrammer的UART进行固件烧写 在学习IAP时,找到一些不错的资料: 【实战技能】单片机bootloader的CANFD,I2C,SPI和串口方式更新APP视频教程(2022-08-01) BSP视频教程第17期:单片机bootloader专题,启动,跳转配置和调试下载的各种用法(2022-06-10) 【不是问题的问题】为什么STM32的Flash地址要设置到0x08000000 下面文章是初学IAP的重点,文章是基于标准库解决问题,在HAL库上原理一样,只是处理方法改一下。(HAL库没有函数NVIC_SetVectorTable) 从启动程序(BootLoader)跳转到指定地址时(APP)出现问题的解决方法 文章后见会介绍如何在HAL库上处理这个问题(system_stm32f4xx.c文件),毕竟现在使用标准库的人比较少,且ST官方也不建议使用标准库了。 IAP的难点在于Bootloader跳转APP,有如下几点需要弄明白的:
1.2、本次实验的目的将自己编写的bootloader程序烧写进STM32芯片的FLASH地址0x08000000的起始位置,接着将APP程序烧写进STM32芯片的FLASH地址0x08010000起始的地址。
工程分享: 链接:https://pan.baidu.com/s/1ZeSxh10BbqqPjarWMkDbfQ?pwd=f2zz 提取码:f2zz 二、STM32CubeMXSTM32CubeMX配置初始的工程的步骤我就省去了,本例程只使用了简单的GPIO输出与GPIO读取,并没有复杂的外设。将百度云盘分享的工程下载下来直接查看配置即可。 三、MDK的设置3.1、Bootloader工程Flash起始地址: 0x8000000,其大小是0x10000(65536/1024 = 64K) 3.2、APP工程
四、代码4.1、Bootloader工程4.1.1、main.c
4.1.2、system_stm32f4xx.c这里非常重要!这里非常重要!这里非常重要!重要的事情说三遍!!!!!! 4.2、APP工程4.2.1、main.c
4.2.2、system_stm32f4xx.c
五、map文件确认程序flash的位置与中断向量表的位置Keil工程的map文件如何打开,可以参考: 5.1、Bootloader工程的map文件5.1.1、确认flash的位置5.1.2、确认中断向量表的位置5.2、APP工程5.2.1、确认flash的位置5.2.2、确认中断向量表的位置
六、下载两个程序到板子上直接用MDK把两个工程都烧写进去,两个工程的FLASH地址设置不一样,所以不会互相影响。 下载bootloader程序。 七、观察板子下载完两个程序进去后,板子重新上电。 首先,LED1在闪烁,LED2与LED3都是熄灭。表示正在运行bootlader程序。接着,按下KEY1。 按下KEY1后,LED1与LED2在闪烁,LED3常亮,表示此时正在运行的是APP程序。 当我们按下KEY2后,LED1在闪烁,LED2与LED3都是熄灭的。表示此时又返回运行bootlader程序了。 至此,实验成功!!!! 八、细节补充8.1、为什么需要修改system_stm32f4xx.c的代码?原因是程序跳转之后,还需要另外告诉程序中断向量表也需要跳转。比如bootloader跳转APP程序后,此时的中断向量表也需要指向APP程序的中断向量表,否则无法产生中断。 bootloader程序与APP程序都有自己的中断向量表。 看下面代码: VECT_TAB_BASE_ADDRESS被谁调用?往下看。 8.2、不修改system_stm32f4xx.c的代码可以吗?当然可以啊,我们修改system_stm32f4xx.c就是为了运行这个代码: |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:49:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |