USART IAP功能想必大家都很熟悉了,我们通过USART IAP,可以很方便的实现程序升级。 但是在实际工作中,遇到一些特殊情况时,USART IAP功能却不像我们应用中那么方便,甚至成了一大制约因素:
1.板子交给远方的用户,用户手头没有带串口的电脑。 2.用户找到带串口的电脑,却仍然没有合适的串口连接线。 3.终于找到了合适的串口连接线,仍没有IAP软件。
4.IAP软件连同HEX文件一同发给用户,用户却不会操作。在我们手头很简单的操作,到用户手里,却总也搞不定(即便是简单的超级终端,想要远程教会用户,也是很考验功力的)。
5.不是所有的板子都设计有串口,没有串口的板子,呵呵……
幸好STM还给我们提供了DFU升级方式,基本可以解决以上多数问题,只需要留出USB接口就行。
但是DFU方式,仍然对用户的要求很高,需要用户熟悉软件的操作过程和流程(见制约因素4)。
只有找到一种更简单的方式,只要简单的复制、粘贴操作,就可以实现程序更新,才能最大限度解决以上问题。
现在我们通过虚拟U盘IAP程序,将程序存储的FLASH空间虚拟为U盘,只要将程序文件复制到这个U盘,就完成了程序更新,消除了用户升级操作的学习过程。
无IAP程序 0x8003000 IAP程序 一般IAP程序 IAP程序 U盘IAP程序 0x8008000 用户程序 用户程序 用户程序 文件系统 程序实现过程: 1.IAP程序
IAP程序仍然占用0x8000000~0x8003000的FLASH空间,IAP的作用,是在满足IAP控制要求的情况下启动IAP功能,否则,直接跳转并执行用户程序。启动IAP功能,可以使用3个方式:
1.1.当用户程序为空时,自动启动IAP功能,做写程序准备。
1.2.当用户程序正常,但启动时按下了特定的IAP按键时,启动IAP功能。
1.3.用户程序运行中,在某个特殊位置做了IAP升级标志,判读标志后,启动IAP功能。 现在的IAP程序,仅仅实现简单的将内部FLASH虚拟为U盘功能即可。参见《5分钟用STM32的内置Flash做一个超小U盘》。当然,这个小U盘缺少了文件系统,需要重新格式化才行。
格式化后,我们的超小U盘OK了,接下来就该进行下一步了,用户程序。 2.用户程序 2.1.配置
常规的用户程序,对于我们的STM32F103C8系列,有64KFLASH,因此可供IAP程序使用的为0x8003000~0x800FFFF的FLASH空间。但我们这次的用户程序,必须要保留下文件系统,因此修改为仅使用0x8008000~0x800FFFF。这其中的0X8003000~0X8008000空间,就是格式化时保存的文件系统。
为何修改为0x8008000而不是其它位置?因为系统告诉我们了,U盘容量=32K,因此反推:(0x800ffff+1)-32K=0x8008000(STM32F103C8系列)。
2.2.编译用户程序
主程序中不要忘记偏移。编译完,赶紧试试吧。可是,我们该将哪个文件存入U盘啊?
这样就会编译结束后自动生成对应的***.BIN文件,这个BIN文件,就是我们需要的升级文件。 2.3.复制文件,升级了。复制文件后复位,用户程序自动运行了。
这时,我们可以再次回到U盘状态,删除文件,甚至是格式化这个U盘,只要没有新的文件进行覆盖,我们的程序会始终正常运行的。这是FAT表文件系统的缺陷造成的,也是数据恢复的理论基础。
因篇幅问题不能全部显示,请点此查看更多更全内容