
介绍 对于大部分基于闪存的系统来说,一项重要的需求就是当这些系统安装在终端产品上后,具有更新固件的能力,这个能力称为在应用中编程(In-Application Programming IAP)。这篇应用笔记的目的就是为创建一个IAP应用程序提供一些通用的指导原则。本文中使用STM3210BEVAL/STM3210E-EVAL板验证IAP驱动。 STM32F10xxx微控制器可以运行用户指定的固件,在微控制器嵌入的闪存上实现IAP。这个功能可以使用任何通讯协议(如CAN、USART、USB)对片上闪存进行重新编程。示例程序使用了USART作为通信通道。 1 IAP概述 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx和STM32F103xx微控制器。在意法半导体STM3210B-EVAL评估板上集成的即为中容量产品。 大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xx和STM32F103xx微控制器。在意法半导体的STM3210E-EVAL评估板上集成的即为大容量产品。 1.1 原理IAP驱动程序必须使用用户选用的任意开发工具,通过JTAG或SWD接口烧写到Flash存储器的开始区域,随后这个驱动程序使用USART从PC端的HyperTerminal下载二进制文件到STM32F10xxx的内部闪存中,然后转去执行新下载的程序。 1.2 IAP驱动程序 IAP驱动包含有下列的源文件: ● main.c:USART初始化和RCC设置,然后从common.c中执行主菜单。 ● common.c:包含显示功能和主菜单。主菜单给出了一系列的操作选项:加载新的二进制 文件、执行载入的二进制文件、对用户想载入自己二进制文件的存储器页解除写保护(如果这些页被写保护的话)。 ● ymodem.c和download.c:它们用来从超级终端中接收数据(使用YMODEM协议(a)),然后把数据加载到STM32F10xxx内部RAM中。当接收数据发生错误时,显示错误信息“Failed to receive the file”,如果接收数据成功,把它编程到内部Flash Memory的适当地址。通过比较内部RAM数据和内部Flash的数据来检测数据完整性。如果有任何数据的差异,显示错误信息“Verification failed”。也显示其他的错误消息如映像文件大于允许的内存空间或用户终止了任务等。 ● STM32F10xxx固件库 用户可以通过去掉文件platform_config.h的相关定义行的注释,来选择在哪种产品(中容量产品或者大容量产品)上运行该软件。 //define USE_STM3210B_EVAL //define USE_STM3210E_EVAL 用户可以通过操作一个连接到引脚的按键,来选择是运行用户程序还是执行IAP以重新编程。 ● 复位时未按下按键切换到用户程序。 ● 复位时按下按键显示IAP主菜单。 有关使用STM3210B_EVAL / STM3210E_EVAL板上的按键进入IAP模式的细节,参见表1。 a) Ymodem协议将1024个字节作为一个数据块发送:传送到STM32F10xxx内部RAM的数据块中, 还执行错误检查:比较发送和接收到的数据。若出现NAK应答则说明数据块没有被成功接收。 关于Ymodem的更多细节请参阅相关文档。 ![]() 2 运行IAP驱动程序 IAP驱动程序烧录在: ● 中容量产品上闪存存储器的0到7页 ● 大容量产品上闪存存储器的0到3页 用户程序占用了其他的存储空间。 2.1 超级终端配置 要使用IAP,使用者必须在PC上运行超级终端,超级终端的配置如下: 图2 COM端口属性 ![]() 注意:例子中使用的波特率值为115200。 必须注意选择系统时钟的频率,为了能成功地使用USART通讯,产品上的系统时钟频率必须保证能产生准确的115200波特率。 2.2 执行IAP驱动程序 使用本文的示例程序,按下连接到引脚的按键,启动IAP驱动程序运行。 在复位的时候按下按键,使用者可以运行IAP驱动程序来重新编程STM32F10xxx的内部闪存存储器。当然,不必须一定要使用按键,也可以在引脚上引入一个适当的电平。详见表1。 完整版请查看:附件 |
CD00161640_ZHV4.pdf
下载865.77 KB, 下载次数: 0