QT上位机给STM32设备串⼝IAP升级固件QT上位机给STM32设备串⼝IAP升级固件
⽬录
废话不多说看看效果先
上位机源码连接:
1,实现原理
应⽤编程IAP(In-Application-Programming)是应⽤在Flash程序存储器的⼀种编程模式,它可以在应⽤程序正常运⾏的情况下,通过调⽤特定的IAP程序对另外⼀段程序Flash空间进⾏读/写操作,甚⾄可以控制对某段、某页甚⾄某个字节的读/写操作。主要⽤于数据存储和固件升级。对于IAP应⽤,通常会有两个程序,第⼀个程序Bootloader程序不执⾏正常功能,只是通过某种⽅式(串⼝,usb,SD卡)接收第⼆个程序,并进⾏更新。第⼆个程序APP程序是执⾏的主体,⽤于实现应⽤功能。
对于stm32闪存模块,主要由主存储器、信息块和闪存存储器接⼝寄存器三部分构成。
清远旅游必去十大景点主存储器,该部分⽤来存放代码和数据常数(如 const 类型的数据)。对于⼤容量产品,其被划分为 256 页,每页 2K 字节。注意,⼩容量和中容量产品则每页只有 1K 字节。看出主存储器的起始地址就是 0X08000000, B0、 B1 都接GND 的时候,就是从
0X08000000开始运⾏代码的。
信息块,该部分分为 2 个⼩部分,其中启动程序代码,是⽤来存储 ST ⾃带的启动程序,⽤于串⼝下载代码,当 B0 接 V3.3, B1 接GND的时候,运⾏的就是这部分代码。⽤户选择字节,则⼀般⽤于配置写保护、读保护等功能,本章不作介绍。
闪存存储器接⼝寄存器,该部分⽤于控制闪存读写等,是整个闪存模块的控制机构。
对主存储器和信息块的写⼊由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的⾼电压由内部产⽣。
对于flash的读写的流程
这⾥要特别留意⼀个闪存等待时间,因为 CPU 运⾏速度⽐ FLASH 快得多, STM32F103的 FLASH 最快访问速度≤24Mhz,如果CPU 频率超过这个速度,那么必须加⼊等待时间,⽐如我们⼀般使⽤72Mhz的主频,那么FLASH等待周期就必须设置为 2,该设置通过FLASH_ACR寄存器设置。
2,程序流程
编程流程
1、检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁,(向KEYR寄存器中写⼊特定序列KEY1和KEY2)
(实际中需要查看当前要写⼊的扇区是否有数据,如果有数据,则需要进⾏擦除操作,然后再进⾏下⾯的步骤)
2、检查 FLASH_SR 寄存器的 BSY 位,以确认没有其他正在进⾏的编程操作
女歌手陪睡3、设置 FLASH_CR 寄存器的 PG 位为’1’,⽤于表⽰接下来进⾏写操作
4、在指定的地址写⼊要编程的半字
5、等待 BSY 位变为’0’,表⽰编程完成人类为何走不出宇宙
6、读出写⼊的地址并验证数据
缅甸枭龙战机越境空袭印度我们在 STM32 的 FLASH 编程的时候,要先判断缩写地址是否被擦除了
下⾯介绍页擦除过程
读出被擦除的页并做验证
1、检查 FLASH_CR 的 LOCK 是否解锁,如果没有则先解锁(向KEYR寄存器中写⼊特定序列KEY1和KEY2)
2、检查 FLASH_SR 寄存器的 BSY 位,以确认没有其他正在进⾏的闪存操作
3、设置 FLASH_CR 寄存器的 PER 位为’1’,⽤于表⽰进⾏页擦除操作
4、⽤ FLASH_AR 寄存器选择要擦除的页
5、置 FLASH_CR 寄存器的 STRT 位为‘1’表⽰开始⼀次擦除操作
6、等待 BSY 位变为’ 0’
读出被擦除的页并做验证
我们来了解下stm32的程序运⾏流程,如下图所⽰
程序运⾏的地址从0x08000000(FLASH)开始运⾏
1程序开始运⾏后,从中断向量表中取出复位中断向量,并执⾏服务程序。
2执⾏完中断向量程序会跳转⾄主main函数⼊⼝执⾏,并在死循环中⼀直执⾏。
3当在主函数中发⽣中断时间时,系统强制PC指针指向对应中断向量表对应位置。
4PC指针在中断向量表处取出中断服务程序⼊⼝地址,并跳转⾄对应位置执⾏。
5中断服务程序执⾏完成后,PC指针跳回发⽣中断时系统在main函数中的位置,继续往下执⾏。
杨丞琳主演电视剧zippo 真假当加⼊IAP应⽤后stm32的程序流程变为下图所⽰
程序运⾏的地址从0x08000000(FLASH)开始运⾏
1程序开始运⾏后,从中断向量表中取出复位中断向量,并执⾏服务程序。执⾏完中断向量程序会跳转⾄Bootloader程序main函数⼊⼝执⾏。
2在main中系统检查是否需要对第⼆部分代码进⾏更新,如果需要则执⾏更新操作,如果不需要则跳过更新操作,跳转⾄APP程序的⼊⼝
3在APP程序⼊⼝⾸先进⼊重新映射的中断向量⼝,根据新的中断复位向量,执⾏复位中断程序,然后跳转⾄APP程序main⼊⼝。
4当在主函数中发⽣中断时间时,系统强制PC指针指向对应中断向量表对应位置(这⾥还是强制跳转到地址0x0800004中断向量表位置,⽽不是APP程序的中断向量表)。
两个注意点:
1) 新程序必须在 IAP 程序之后的某个偏移量为 x 的地址开始;
2) 必须将新程序的中断向量表相应的移动,移动的偏移量为 x;
对于程序的设置
IAP程序
通过串⼝设置程序的接收
根据要求设置存储APP程序的地址
APP程序
设置程序存储区,与数据存储区 在Target->Read/Only Memory Areas-> IROM与IRAM处设置,这⾥APP程序的存储⾸地址设为
0x08010000,⼤⼩为0x70000(即前0x10000为存放IAP程序)
发布评论