关于STM32RCT6的远程升级问题(IAP方式下载)

主要参考STM32F103C8T6在线升级 IAP  和  STM32 IAP在线升级教学

就是通过串口向单片机烧写程序,可以参考正点原子的视频资料

先要写启动引导程序,通常称为IAP程序,写到bootloader区域,这个区域自己划定,存放IAP程序的地址,其实IAP程序就是平常ICP方式下载的模式,这个启动程序你平常怎么写就怎么写,不用配置地址,直接从0X8000000开始写入,keil什么都不用配置,就正常写程序就行,只不过内容要起到引导的作用

引导作用通过以下流程实现,初始化串口接收和flash,串口接收到.bin文件(你要写入的文件即APP程序的二进制代码),接收完成写到自己规定的放置APP程序的flash区域,比如0X8010000到.bin写完的区域,那么从0X8000000到0X8010000这64K区间就是你存放IAP程序的地方,这个大小自己掌握

写入完成就跳转到APP程序,然后单片机下一步执行的就是APP程序

APP程序不用具体怎么写,想写什么写什么,写完记得把地址偏移0X10000(0X8010000 - 0X8000000)即可,两步:第一步在main最开始加SCB->VTOR = FLASH_BASE | 0X10000;第二步配置KEIL的IROM1偏移值

一般单片机重启后,APP程序和IAP引导程序都在STM32的flash里面,想再次更新APP就进IAP程序,想保持原功能就进APP

一般做法是进不进IAP由APP程序决定,即默认开启单片机进入APP,当APP接收到更新指令后进入IAP,烧写更新的.bin即可

实现方法:最简单的弄个按键,无法实现远程更新

                 另一种方法就是在Flash里面找个标志位(地址),比如让这个地址为0XFFFF,IAP判断为0XFFFF就进APP,如果APP收到更新指令,就更改这个标志位不为0XFFFF,软件重启IAP判断后不进入APP,这时就可更新,注意,IAP每次更新完成后要把标志位再次置为0XFFFF,这样下次就进APP了

  这样还会有一个问题,就是不小心更新的APP中如果没有串口接收功能,无法接收指令,那么单片机只能运行最后一个版本了,可以加个按键,这样又不可以远程了,而且按键识别你也可能忘加APP中了,刺不刺激

 

可以选择现在APP中把数据存到SRAM,再到IAP中把SRAM数据存到FLASH,优点是可以在app中决定是不是接受程序,缺点是如果中途断电就不能存到FLASH里面了,而且SRAM只有64KB(RCT6),也就是虽然flash可以存256k,但被SRAM限制住了,至于限制到多少,看app给剩下多少了

另一种就是进入IAP后再接收数据,一边接收一边存放,缺点是存错了会变砖,

注意如果在IAP跳转到APP时不能有外设中断,包括SysTic 中断(滴答定时器中断)

 

你可能感兴趣的:(STM32,KEIL)