| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> stm32串口IAP例程解析 -> 正文阅读 |
|
[嵌入式]stm32串口IAP例程解析 |
访问个人博客也许可以获得无广告体验与更好的文章排版: https://codinglover.top/2022/03/07/stm32串口iap例程解析/ 例程获取可以通过访问官方网站www.st.com获取示例代码和应用笔记 同时本文涉及的所有资料可以从此下载: 工程文件结构主要就两个文件夹:Drivers和Projects,前者是HAL库的驱动文件和示例开发板BSP包,后者是示例工程,有F1、L0、L4这三个系列单片机开发板的示例,可惜没有我手头的stm32g412dicovery开发板的例程,所以后面要手动移植。Bootloader主要使用到了USART和CRC外设,前者用于用户交互和文件传输,后者用于文件校验。Projects中包含两个文件夹:IAP_Main和IAP_Binary_Template,前者是bootloader的实现(主要研究对象),后者是用户app模板。
文件之间的调用关系大致如下: 移植到stm32g412discovery开发板我是参考了STM32L476G_EVAL的例程进行移植,事实证明,还是使用同为F系列的另一份例程工程移植更省事点。
使用方法关于用户程序的编译需要注意两点:
关于命令交互:
关键代码分析用户程序跳转以上是demo中的用户程序跳转代码,根据stm32程序的结构可知,程序起始地址存的是SP堆栈起始地址,由于stm32的堆栈位于以地址0x20000000为起始的SRAM中,对于SRAM大小为128K的STM32L476来说,SP起始地址可能的数值为0x20000000到0x2001FFFF,if中的比较语句即为比较程序起始地址存的SP堆栈起始地址是否在SRAM的地址范围内,从而判断用户程序是否存在。0x2FFE0000这个值为0x2FFFFFFF-0x2001FFFF所得,所以这个值也应该根据实际得SRAM内存大小而进行修改。 if里面的跳转就比较简单了,程序起始地址偏移4字节里存的是系统复位向量的地址,也就是第一条需要执行的指令的地址,在调用__set_MSP设置好MSP堆栈指针后,直接像调用函数一样跳转到第一条指令执行即可,实际是将PC指针指向了这里。 用户程序下载流程用户在菜单中选择1来进行程序下载,当用户做出选择,程序内部的函数调用链如下: 最终实际进行程序数据包接收工作的是函数Ymodem_Receive,只要数据传输没有出现错误并且文件未接收完成,其会不断调用函数ReceivePacket接收Ymodem协议传输的数据包并进行解析,并根据处理结果进行回应。 用户程序下载过程中的总体Ymodem通讯流程如下所示,这里只给出正常时的流程,去除了校验错误、FLASH写入错误等异常处理流程。 给出一篇博客用于进一步了解Ymodem,当然如果有空闲想全面了解,读官方的文档更佳 用户程序上传流程暂时用不到,不分析。目前移植后的上传功能是有问题的,简单读了下代码,此demo上传用户程序时会将用户区的所有内容全部上传,而不是上传实际的程序所占大小,感觉实用价值不大,就不折腾了,哪天我用上了再回来补这一章节。 结语官方的这个demo怎么说呢,不能算写的很好,差强人意吧,我严重怀疑程是不是外包出去的。这个例程用来学习可以,程序传输、FLASH烧写、跳转,bootloader的基本功能有了,但是想真在工作中使用,还是自己写一套更靠谱,毕竟代码量也不大,写起来花不了多少时间。我还是决定花点时间自己写一个出来。
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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/26 7:34:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |