0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32F10x处理器如何在IAP中实现设计和应用方案

电子设计 来源:单片机与嵌入式系统应用 作者:陈峰峰 , 胡毅 , 许 2020-08-12 09:21 次阅读

引 言

Cortex-M3是首款基于ARMv7-M体系结构的32位标准处理器RISC结构,包含高效灵活的Thumb-2指令集,拥有杰出的低功耗特性,为微控制器系统、汽车车身控制系统工业控制系统和无线网络嵌入式应用量身设计。ST公司推出基于Cortex-M3内核的STM32系列处理器,凭借其出众的性能、创新的外设、优越的功耗控制,得到众多工程师的青睐。

针对嵌入式应用的特点,STM32处理器提供功能强大的硬件调试接口——JTAG接口和串行接口,极大方便了设计,缩短了产品的开发周期。不仅如此,STM32处理器内嵌的闪存存储器允许在电路编程(In-Circuit Pro-gramming,ICP)和在应用中编程(In-Application Program-ming,IAP)。利用在应用中编程,仅需通过一根串口线,就可以完成产品固件的更新。本文对STM32处理器的在应用中编程进行了详细的分析,结合硬件和驱动给出了IAP的具体实现方法,稍加修改,便可应用于STM32处理器的所有系列产品。

1 STM32F10x处理器

1.1 STM32处理器特点

STM32全系列处理器具有脚对脚、外设及软件的高度兼容性。这给应用带来很好的灵活性,易于将应用升级到不同存储空间或不同封装的平台。STM32处理器的产品全系列兼容,使得项目之间的代码重用和移植很方便。

1.2 STM32处理器内存映射

Cortex-M3的存储系统采用统一编址的方式,程序存储器、数据存储器、寄存器被组织在4 GB的线性地址空间内,以小端格式(little-endian)存放。内存映射如图1所示。

基于STM32F10x处理器如何在IAP中实现设计和应用方案

在代码区,0x00000000地址为启动区。上电以后,CPU从这个地址开始执行代码0x08000000为用户Flash的起始地址,0x1FFFF000为系统存储器(system memory)的起始地址。对于STM32处理器,可以通过配置BOOT0和BOOT1两个引脚来选择不同的启动模式,如表1所列。CPU在时钟信号的第4个上升沿锁存BOOT引脚的值,根据两个引脚的值将对应的存储器物理地址映射到启动区。

启动模式

系统存储器也称为“大信息块”,有2 KB的容量。所有上市的STM32处理器,在出厂前已经烧写进去自举模式下的启动程序(Bootloader),并且将之锁定防止用户擦写。通过配置BOOT0和BOOT1选择系统存储器启动,相应的启动程序在复位后得以执行,配合PC端的通信软件,通过USART1口允许用户将程序烧写到用户Flash区。之后,将BOOT0和B00T1重新配置为用户Flash存储器启动,进入正常的应用程序。

上述的自举模式类似于ISP编程,相比其他烧写方式方便许多,但真正方便灵活的是在应用中编程(IAP),只需一根串口线就可以载入程序,复位后立即执行新的应用程序。

2 IAP功能原理

在应用中编程(IAP)使得用户可以在程序运行时重新对Flash进行编程。简单地说,IAP的编程工作是:下载编译好的二进制文件数据到RAM;将数据重新编程到特定的Flash区。这两个工作是由IAP驱动程序完成的。使用IAP功能后,系统的固件由2部分组成:第1部分是IAP驱动,不执行通常的功能,而是通过微控制器支持的任一种通信管道(如USB、USART、SPI等,本文使用USART)接收数据,并执行对第2部分代码的更新;第2部分是真正的应用程序代码,实现具体的功能。这两部分代码共同烧写在Flash中。要注意的是,这两部分代码不能重叠,否则无法实现IAP功能。

系统上电以后,IAP驱动首先运行,它主要执行如下的操作:

①根据硬件信号或软件条件判断是否需要对第2部分代码进行更新;

②如果不需要更新,则跳转到④;

③执行更新操作;

④跳转到第2部分代码执行。

STM3210x处理器IAP驱动的流程如图2所示。图中显示IAP主界面是利用超级终端实现的,传输协议用的是Ymodem协议。需要注意的是,由于IAP驱动占用了用户Flash区的一段起始空间,因此Flash的可编程最大空间要把这部分除去。[page]

STM3210x处理器IAP驱动的流程

3 IAP功能实现

3.1 硬件电路

采用STM32F10x型处理器作为核心。该处理器可全速工作在72 MHz,拥有3个USART接口,内嵌128 KB Flash和20 KB SRAM。Flash是以页的形式组织的,擦除1页的时间约为20~40 ms;在整个工作范围内其擦除次数可达10 000次,经10 000次擦除后,在+55℃的保存环境中数据保存期限仍可达20年。用户完全不必担心使用了IAP功能后对产品造成不良影响。

IAP驱动使用USART1口作为通信管道,PB口的第9引脚作为IAP判断是否进入IAP功能的信号线。引出一个按键,作为IAP功能选择按键,只要在上电或复位时按住此键就会进入IAP功能主界面,否则直接执行正常应用程序。BOOT0和BOOT1是启动配置跳线。相应的硬件电路分别如图3、图4和图5所示。

IAP通信管道USART1

按键电路

启动配置电路

3.2 IAP驱动

IAP驱动主要包含如下源文件。

main.c:完成Flash解锁、按键端口初始化、按键判断、USART1的初始化以及处理器的始终初始化,另外还初始化指针和跳转到应用程序处语句。然后从common.c执行主菜单。

common.c:显示主菜单。主菜单上显示一系列操作,如加载二进制文件、执行应用程序以及禁止写保护(如果事先Flash被写保护)。

download.c:等待用户选择传送文件操作,或者放弃操作以及一些提示信息,但真正实现传送的是ymodem.c源文件。

ymodem.c:负责从超级终端接收数据(使用Ymodem协议),并将数据加载到内部RAM中。如果接收数据正常,则将数据编程到Flash中;如果发生错误,则提示出错。

3.3 软件实现

要实现IAP功能,还需做一些准备工作:

①要准备BIN类型的代码文件。开发环境使用的是Keil,默认情况下Keil生成HEX类型的编译文件。利用Keil自带的fromelf.exe工具,就可以生成二进制文件。

②对超级终端进行设置。IAP驱动中对USART1的设置为:波特率为115 200 kb/s,8位数据位,1位停止位,无校验位和硬件控制。超级终端也必须保持相同设置。

IAP驱动和应用程序代码需要分配在Flash的合适位置。图6是2部分代码在Flash中的存储情况。由于IAP驱动代码占用8 KB的空间,故而将Flash最初的8 KB划出来,应用程序是从0x08020000地址处开始存放的。这是通过在common.h头文件中语句定义的:[page]

#define ApplicationAddress 0x08020000

也可以定义在其他0x08020000地址后的任何位置,只要保证应用程序大小不超过所用处理器Flash的容量。在platform_config.h头文件中有定义Flash的语句:

#define PAGE_SIZE(0x400) //Flash页大小为1 KB

#define FLASH_SIZE(0x20000)//Flash容量为128 KB

STM32F10x处理器有2种Flash页的大小:1 KB和2 KB。通过以上语句即可定义页大小。

在platform_config.h头文件中还定义了进入IAP功能选择按键映射引脚:

程序

IAP驱动在Keil中编译、链接后,利用ARM公司的RealView ULINK2仿真器将生成的HEX文件烧写到Flash中。此时Keil自带的Flash烧写工具要设置Flash的起始地址为0x08000000。在应用程序中,定义向量表的函数NVIC_SetVectorTabl(NVIC_VectTab_FLASH,0x2000)中的第2个参数,即Flash的偏移量一定要设置成0x2000或更大的数值。同时,Flash烧写工具也要做相对应的设置。将系统的串口与PC机串口相连,打开已经设置好参数的超级终端。将BOOT0跳线为0,BOOT1为0或1都可以。按住IAP功能选择按键,给系统上电。此时,在超级终端就会显示IAP功能主界面,如图7所示。

Flash存储分配

IAP功能主界面

在键盘上按1选择待载入二进制文件,界面上会出现提示语。在“传送”菜单中选择传送文件后,只需几秒钟可以将6 KB左右的文件烧写到Flash。下载完后,在键盘上按2或复位就可以直接执行应用程序了,如图8所示。虽然IAP功能使用的是USART1口,但进入应用程序后就可以正常使用USART1口。随时可以通过复位后按住IAP功能选择键来进行IAP方式烧写应用程序。

成功下载应用程序

结 语

STM32F10x处理器性能出众,已被广泛应用于各种场合。其IAP功能给用户带来了极大方便,使得产品的固件更新快捷、简单。本文阐述了IAP的基本原理,并详细描述了如何在STM32F10x处理器平台中实现IAP功能,并在所设计的系统中进行了IAP实验。实验证明,该款处理器的IAP功能可靠、快捷。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19181

    浏览量

    229215
  • FlaSh
    +关注

    关注

    10

    文章

    1624

    浏览量

    147791
  • 存储器
    +关注

    关注

    38

    文章

    7458

    浏览量

    163626
收藏 人收藏

    评论

    相关推荐

    将TMS320F280x DSP配置为I2C主处理器或从处理器

    电子发烧友网站提供《将TMS320F280x DSP配置为I2C主处理器或从处理器.pdf》资料免费下载
    发表于 10-15 09:34 0次下载
    将TMS320<b class='flag-5'>F280x</b> DSP配置为I2C主<b class='flag-5'>处理器</b>或从<b class='flag-5'>处理器</b>

    利用Sitara AM57x处理器上的处理器SDK实现工业机器视觉的2D物体识别

    电子发烧友网站提供《利用Sitara AM57x处理器上的处理器SDK实现工业机器视觉的2D物体识别.pdf》资料免费下载
    发表于 10-10 09:36 0次下载
    利用Sitara AM57<b class='flag-5'>x</b><b class='flag-5'>处理器</b>上的<b class='flag-5'>处理器</b>SDK<b class='flag-5'>实现</b>工业机器视觉的2D物体识别

    何在STM32上运行AI应用

    1.X-Linux-AI概述X-LINUX-AI是STM32MPUOpenSTLinux扩展包,面向STM32MP1和STM32MP2系列微
    的头像 发表于 09-30 08:00 2372次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>STM32</b>上运行AI应用

    【GD32 MCU 移植教程】9、从 STM32F10x 系列移植到 GD32F30x 系列

    GD32F30x 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制,与 STM32F10x 系列 MCU 保持高度兼容。本文主要从以下三个方面进行介
    的头像 发表于 09-07 09:57 557次阅读
    【GD32 MCU 移植教程】9、从 <b class='flag-5'>STM32F10x</b> 系列移植到 GD32<b class='flag-5'>F30x</b> 系列

    TMS320F280x、TMS320C280x、TMS320F2801x数字信号处理器数据表

    电子发烧友网站提供《TMS320F280x、TMS320C280x、TMS320F2801x数字信号处理器数据表.pdf》资料免费下载
    发表于 08-03 09:34 0次下载
    TMS320<b class='flag-5'>F280x</b>、TMS320C280<b class='flag-5'>x</b>、TMS320<b class='flag-5'>F2801x</b>数字信号<b class='flag-5'>处理器</b>数据表

    TMS320F280x、TMS320C280x、TMS320F2801x数字信号处理器数据表

    电子发烧友网站提供《TMS320F280x、TMS320C280x、TMS320F2801x数字信号处理器数据表.pdf》资料免费下载
    发表于 08-03 09:28 0次下载
    TMS320<b class='flag-5'>F280x</b>、TMS320C280<b class='flag-5'>x</b>、TMS320<b class='flag-5'>F2801x</b>数字信号<b class='flag-5'>处理器</b>数据表

    TMS320F281x数字信号处理器数据表

    电子发烧友网站提供《TMS320F281x数字信号处理器数据表.pdf》资料免费下载
    发表于 08-03 09:24 0次下载
    TMS320<b class='flag-5'>F281x</b>数字信号<b class='flag-5'>处理器</b>数据表

    B码对时方案,基于TI AM62x异构多核工业处理器实现

    AM62x异构多核处理器实现IRIG-B码对时方案,降低了终端用户的开发难度,缩减了研发时间,可快速进行产品方案评估与技术预研。 图3 常
    发表于 07-25 14:38

    使用STM32F407ZGT6的设备无法连接到AMD处理器的电脑上,怎么处理

    使用贵公司的STM32芯片,型号:STM32F407ZGT6。CAN总线转串口,可以正常连接到英特尔处理器的电脑上;但是无法连接到AMD处理器的电脑上。请问怎么
    发表于 07-23 07:58

    B码对时方案,基于TI AM62x异构多核工业处理器实现

    多核处理器实现IRIG-B码对时方案,降低了终端用户的开发难度,缩减了研发时间,可快速进行产品方案评估与技术预研。图3常见IRIG-B码对时实现
    发表于 07-17 11:07

    STM32F10x标准外设库参考手册

    STM32F10x标准外设库参考手册
    发表于 06-24 09:26 11次下载

    STM32F1 IAP操作读保护选项字节设置,APP使用系统复位跳转后无法运行IAP的原因?

    最近调试一个程序,是基于STM32F1做的IAP,升级前后需要修改选项字节,FLASH_EraseOptionBytes函数内OB->RDP=RDP_Key语句实现读保护的解除,如果我
    发表于 05-13 08:09

    STM32F103RE只有挂调试IAP程序才能正常跳转吗?

    最近在开发一款基于STM32F103RET6的产品,要求支持固件升级,目前是基于USART1的IAP,Toolchain是IAR。 IAP的程序是参考官方的例程做的,大体没变,只是BSP方面改了一下
    发表于 04-25 07:03

    何在STM32F10X里面标准库找STM32F103的官方例程?

    我是一个小白,想看一下STM32F103的例程里面的代码学习学习,
    发表于 03-19 07:37

    在GD32F103移植STM32F103代码

    使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是
    的头像 发表于 12-15 13:37 1651次阅读
    在GD32<b class='flag-5'>F</b>103移植<b class='flag-5'>STM32F</b>103代码