| |
|
开发:
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技术,基于CAN总线的STM32F103 BootLoader设计 -> 正文阅读 |
|
[嵌入式]【讲义】STM32的IAP技术,基于CAN总线的STM32F103 BootLoader设计 |
STM32的IAP技术基于CAN总线的STM32F103 BootLoader设计
1 不同的程序下载方式目前,单片机的程序烧录方式可以分为三种:ICP,ISP,IAP。 1.1 ICP:In-Circuit Programming在电路中编程。使用厂家配套的软件或仿真器进行程序烧录,目前主流的有JTAG接口和SWD接口,常用的烧录工具为J-Link、ST-Link等。
在MDK软件中可以选择不同的下载器。 1.2 ISP:In-System Programing在系统中编程。以STM32为例,其内置了一段Bootloader程序,可以通过更改BOOT引脚电平来运行这段程序,再通过ISP编程工具将程序下载进去。下载完毕之后,再更改BOOT至正常状态,使得MCU运行所下载的程序。 正点原子的STM32开发板中专门设计了一个单片机自动复位及设置Boot引脚电平状态的电路,便于程序下载。 1.3 **IAP:**In-Application Programming在应用中编程。IAP可以使用微控制器支持的任一种通信接口(如I/O端口、USB、CAN、UART、I2C、SPI等)下载程序或数据到FLASH中。IAP允许用户在程序运行时重新烧写FLASH中的内容。但需要注意,IAP要求至少有一部分程序(Bootloader)已经使用ICP或ISP烧到FLASH中。 无论是ICP技术还是ISP技术,都需要连接下载线,设置跳线帽等操作。一般来说,产品的电路板都会密封在外壳中,在这时若要使用ICP或ISP的方式对程序进行更新,则必然要拆装外壳,如果产品的数量比较多,将花费很多不必要的时间。 采用IAP编程技术,可以在一定程度上避免上述的情况。一般情况下,产品的外壳都会留有通信接口,若能通过这种通信方式对程序进行升级,则可以省去拆装的麻烦。在此基础上,若引入远距离或无线数据传输方案,更可以实现远程编程或无线编程。 某种微控制器支持IAP技术的首要前提是其必须是基于可重复编程闪存的微控制器。 STM32微控制器带有可编程的内置闪存,同时STM32拥有在数量上和种类上都非常丰富的外设通信接口,因此在STM32上实现IAP技术是完全可行的。 2 IAP方案设计2.1 IAP简介IAP技术的核心在于BootLoader程序的设计,这段程序预先烧录在单片机中,正常的APP程序可以使用BootLoader程序中的IAP功能写入,也可以两部分代码一起写入,以后需要程序更新时通过IAP进行代码更新。每次板卡上电都会首先执行BootLoader程序,在程序内判断进行固件升级还是跳转到正常的APP程序。 是否进行固件升级的判断可以从硬件和软件两个方面进行考虑。
在IAP过程中,单片机通过特定的通讯方式从上位机软件接收程序数据,并执行FLASH擦写操作对APP部分的程序进行更新。 IAP过程中传输的数据文件一般为后缀名为bin的文件,该文件内容与正常烧录进FLASH中的数据内容一致,便于程序升级。但是MDK软件并不能直接生成bin文件,需要进行一些配置。
由于我把fromelf.exe所在目录添加到了环境变量,所以可以直接这样写。如未添加环境变量,则需要写清楚详细路径,该文件一般在MDK软件的安装目录下。 配置完成重新编译之后即可生成bin文件(OBJ目录)。 2.2 FLASH空间划分BootLoader程序和APP 程序存放在 STM32 FLASH 的不同地址范围,一般从最低地址区开始存放 BootLoader,紧跟其后的就是 APP 程序。在FLASH足够大的情况下,还可以分配多个APP程序区域,便于恢复默认程序或者执行多段功能不同的程序。 2.2.1 不同型号STM32 FLASH大小在进行FLASH空间划分之前,首先需要了解一下不同型号STM32单片机的FLASH大小。 对于不同容量的STM32F1系列产品,其FLASH页大小是不同的,具体的容量划分规则如下:
对于小容量和中容量的产品,其页大小为1K,对于大容量产品,其页大小为2K。 2.2.2 查看程序占用空间大小在进行FLASH空间划分时,必须知道编写的程序占用FLASH空间大小。用MDK软件进行工程编译之后会生成一个.map文件,在该文件末尾可找到程序需要占用的FLASH空间。
在实际设计过程中,主要是确定BootLoader程序占用空间,便于确定APP程序的起始地址。 在这时候可以先编写部分BootLoader程序,再通过map文件查看当前占用空间,从而预估BootLoader程序最终会占用的空间大小。 在实际空间分配过程中,可以稍微大一点,以便于后续对BootLoader的功能扩展。
在MDK软件配置项中,可以对程序的起始位置以及大小进行设置。 对于BootLoader程序来说,只需要设置其Size,该值可根据刚才map文件中的值进行预估。 2.2.3 APP程序中需要做的配置项BootLoader程序按照正常的程序编写即可。而APP程序由于其下载位置与默认程序下载位置不同,故需要做一些特殊的配置。 首先是APP 程序起始地址设置 起始位置即去除BootLoader程序之后剩余空间的首地址。一般设定为某一页的首地址,因为FLASH写入之前必须进行页擦除。 Size = FLASH原始大小 - 偏移量(0x4000),我使用的是STM32F103C8T6,FLASH大小为64K。 接着设置中断向量表的偏移量,在主函数起始位置添加:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTjQe1yV-1643355638499)(STM32的IAP技术.assets/image-20220118223450681.png)] 2.3 IAP程序设计2.3.1 IAP(BootLoader)编程关键技术
通信需要考虑的问题
Flash写入流程1 解锁
2 擦除
3 写入
4 上锁
接收多少数据写入一次?
APP跳转正点原子串口IAP实验IAP跳转代码
参考安富莱代码之后更改的IAP跳转代码
2.3.2 IAP编程实战需要准备的设备及材料 USB-CAN适配器 USB转TTL CH340模块 周立功CANPro调试软件(可直接发送bin文件) 创芯科技原厂调试软件 串口调试助手 参照正点原子的串口IAP实验例程编写基于CAN总线的BootLoader程序 相较于原子的IAP例程,主要做以下几点工作:
2.4 IAP实验验证
2.5 不足与展望目前数据为一次性整包传输,接收到的数据存储在数组里,占用单片机RAM空间,而单片机的RAM是有限的。 以STM32F103C8T6为例,RAM大小仅为20KB。若APP程序所需大于这个值,则此方法不能使用。 另,直接传输数据包的方式可靠性低,如果数据传输过程中出错无法判断。 为解决上述问题,需考虑将数据分包传输,并增加数据校验。 目前使用调试助手的方式仅能实现整个文件自动传输,若要采用数据分包+校验的方式,需定制开发上位机软件。 单片机与上位机需制定一套稳定可靠的通信协议。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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 11:33:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |