STM32F0x IAP应用软件

发布者:电子创新者最新更新时间:2019-03-11 来源: eefocus关键字:STM32F0x  IAP应用软件 手机看文章 扫描二维码
随时随地手机看文章

-------------------------------------------------------------------------------------------


IAP+APP 是最基本的远程升级套件,而很多人忽略了IAP升级软件的重要性,这里就来讲讲这个IAP升级软件。暂时不考虑xmode、ymode,因为根本就不实用:在不同的WINDOWS平台都不能兼容,而且还要分X86/64BIT版本,IAP段代码占空间大。。。最多只能拿来做做试验。


-------------------------------------------------------------------------------------------


STM32F0xx系列是比F1系列便宜许多的,便宜也有好货:单位功耗低、引脚少、系列全。但是有一些不好的地方,比如FLASH容量偏小、运算速度慢、甚至IAP机制都不能用F1系列的。


所以本文就来介绍一款F0能够适用的IAP及电脑端上层IAP应用软件。


众所周知,F1系列的IAP一般都要占用12K的空间(08000000-08003000),或者小一点的也要8K的空间(08000000-08002000),这对于F1系列的FLASH起点都32K的来说,这并不算多;但是对于F0这种经济性的MCU就算多了,所以首先就要把IAP代码段缩减一半,做到4K之内(08000000-08001000),这对于STM32F030F4之类的只有16K的FLASH特别有效。


IAP一般都是采用串口1,但是针对STM32F042xx之类的建议采用串口2,应该修改IAP代码,因为这些芯片的串口1大都复用于CAN/USB,这些修改也较为容易。


然后接下来就是本文提供的重点内容:APP代码修改、文件合并工具、IAP应用软件。


-------------------------------------------------------------------------------------------


1.APP代码修改


这个应该是老生长谈的事情了,首先是中断向量的偏移问题,F1系列的中断向量偏移比较简单,而F0系列的则是略有不同,如下:


     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


    for(i = 0; i < 48; i++)

        VectorTable[i] = *(__IO uint32_t *)(APPLICATION_ADDRESS + (i << 2));//APPLICATION_ADDRESS =0x08001000

    SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);

    


请注意:以上这段一定要放在MAIN函数的最前面,特别是各个NVIC配置之前;如果位置错了,很有可能因为意外中断而导致跑飞!!!


其次,为了节省FLASH空间,这里不采用FLASH的标志作为跳转依据,而是采用BKP0作为标志寄存器,如下:


#ifdef IAP_DEBUG

        case 0xe0:

            if((UART1_RXB[2] == 0x01) && (UART1_RXB[3] == 0x01))//串口收到特定数据,则进入IAP模式

            {

                RTC_WriteBackupRegister(RTC_BKP_DR0, 0xABABABAB);//在BKP0位置写IAP标志(0xABABABAB)

                NVIC_SystemReset(); //重启之后IAP会判断BKP0寄存器

            }

            break;

#endif


因为只要没掉电,BKP寄存器的数据在SystemReset过程中是不会丢失的,完全可以实现APP跳转IAP过程中保存关键性标志数据。当然BKP的使用方法需要按照ST的说明书,打开PWR\RTC功能。。。次要细节这里就不做说明。


注意:使用BKP寄存器有一个好处,就是IAP代码段不需要考虑芯片的FLASH大小,可以做成全系列通用。因为不同容量的芯片,其BKP地址是一致的,整个系列都可以使用同一个IAP代码;而采用FLASH方式,则IAP段代码就必须根据芯片的FLASH容量来修改并重新编译,比如stm32F0XX6/XX8系列的IAP段就不能通用,一个32K,一个64K,因为终点FLASH地址不同,必须修改对应的升级标志地址,导致通用性不佳。


之后还要设置开发工具里面的起始位置,这里以IAR为例:


-------------------------------------------------------------------------------------------


2.文件合并工具


不管哪种的IAP,都需要用烧录工具把IAP段先行烧录进去,然后通过IAP烧录APP。但是这会导致操作麻烦,生产过程复杂。


使用文件合并工具就能减少这段时间。


这个工具是用来把IAP段、APP段合并为同一个文件的工具,便于一次性烧录,免去二次烧录的麻烦。



当然这个工具还会把APP段空闲FLASH全部写成FF,避免因代码残留导致的意外问题。


-------------------------------------------------------------------------------------------


3.IAP应用软件


为什么费时费力要做UI软件?话说MCU工程师们总是会接点什么外包工程的,难免会遇到这样的问题:


    A  .授权烧录,但是无法控制数量;


    B .自己烧录费时费事、物流费用高;


    C .代码泄漏或者被解密的风险;


    D .升级不方便、难以应对突发事件。


因为JLINK,STLINK,ULINK之类的工具是没有计数功能,也没有授权文件,谁都能烧录,而且还能读出全部代码,就算读保护也不给力。这就带来以上的尴尬问题。


而IAP应用软件正好可以解决这些麻烦。



授权文件正在开发中,敬请期待(其实是我嫌麻烦。有加密的功能用起来不方便,最重要是有一次忘记加密算法把自己坑了。后续需要的话再补充进去)


-----------------------------------------------------------------------------------------

关键字:STM32F0x  IAP应用软件 引用地址:STM32F0x IAP应用软件

上一篇:LIN总线开发:STM32F0 TJA1020
下一篇:STM32F0 USART唤醒STOP模式

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved