关于STM32芯片的三种烧写方式对比

发布者:pingbashou最新更新时间:2023-09-04 来源: elecfans关键字:STM32芯片  烧写方式  片外存储器 手机看文章 扫描二维码
随时随地手机看文章

我们做STM32产品开发,最终是要将编写的程序代码写进芯片存储器,通常指Flash存储器【含可以映射到芯片存储空间的片外存储器】,让程序正常运行起来以实现相应的功能。


一般来讲,将我们准备好的机器代码HEX或BIN文件等写进片上FLASH可以有三种常用的烧写方式。【温馨提示:下面提到的烧写方式的术语或称谓不是绝对的,对于不同的器件可能有不同的表述甚至内涵,这里仅针对STM32,知道怎么回事就好】


第一种,ICP【In circuit programming】,即在电路编程或在线编程【注:不必太纠结该术语名字或称谓。平常称之为ICP也挺好】。一般是指利用调试器通过调试接口将程序代码写进芯片存储器的过程。调试器可以是ST官方的STLINK或其它公司的产品,比如JLINK,ULink等。 这里的调试端口可以是SWD或JTAG接口。


针对ICP编程方式,ST官方有提供相应的软件工具,比如STLINK_Utility或STM32cbueProgrammer。至于其它公司的调试器,也有配套的软件工具。

第二种,IAP【In application programming】,即在应用编程。一般是指芯片里已经存在具有升级更新功能的代码在里面了,用户基于该部分功能代码再将另外的程序代码写进芯片存储器的过程。也就是说芯片里平常有两套代码,一套用于实现代码的更新升级,往往称之为用户引导代码或启动代码。另外一套就是芯片平常运行的功能代码,我们称之为用户应用代码。


第三种,ISP【In system programming】,即在系统编程。我们可以把该模式看做一种特殊的IAP模式,只是片内的启动代码是由芯片厂家这个特定用户出厂时写好提供的。一般来讲该段代码位于特定存储位置、用户不可更改。


我们使用ISP方式编程的话,可以选择内嵌系统启动代码认可的通信接口,比如USART,I2C,SPI,CAN,USB等,借助于芯片厂家或第三方提供的软件工具来实现。具体到STM32系列芯片,欲利用ISP方式进行编程烧写的话,软件工具可以使用ST官方提供的Stm32CubeProgrammer。


对于STM32芯片的ISP方式烧录编程,往往需要对硬件BOOT脚做合适的电平设置,以及对选项字进行正确配置,确保芯片从系统存储区启动、运行。另外,烧录完毕后,记得将相关BOOT脚电平进行调整,以保证下次芯片启动后运行在正确的程序空间,一般是指调整回芯片主程序区。


上面介绍了ICP和ISP烧录所涉及的软件工具。至于IAP,程序的更新升级就是基于MCU现有的通信接口并借助用户之前写进芯片的启动代码来完成。比方,用户通过UART接口借助于内部引导程序来完成应用程序的更新。这里可能会有人会问,那用户准备的启动程序如何写进芯片呢?显然,我们可以通过ICP方式或ISP方式来完成用户启动代码的事先烧写。


下面是三种烧写方式的一个简单比较汇总表。三种方式各有特点.。表格中提到的无特定软硬件接口需求是相对的,意思是指基于芯片现有常用接口和通用软硬件工具,比方串口调试助手等。其中IAP方式对特定软硬件的依赖性最弱,使用更为灵活。但开发工程师须多做一件事,即自己写用户引导程序。当然,对于STM32来讲,各个系列都有一些IAP例程供用户参考。而ICP方式往往是产品调试过程中最为常用的一种烧写方式。ISP方式是生产环节较为常用的一种代码烧写方式。

关于STM32芯片的三种烧写方式对比

下面就STM32F746芯片使用ISP方式的烧写流程做个简单介绍,顺便做些提醒。

一般来讲绝大部分STM32芯片都是支持ISP方式的。在选用这个烧写方式之前先确认下它是否支持ISP方式,即片内是否内置了system memory,该处存放着系统启动程序。我们可以通过各芯片所属的参考手册BOOT章节和AN2606应用笔记查看确认。


经确认,STM32F746支持ISP,不妨选用UART3接口。【当然,它还支持其它通信接口】

查看其所对应的参考手册,了解使用ISP方式所需的配置。一般指BOOT脚的电平确定、选项字的配置。具体到这里,就是确定BOOT脚的电平和System memory的启动入口地址。

对于STM32F7而言,芯片的启动地址可以通过启动地址选项字节任意配置,且有两种配置方式,对应于BOOT脚的电平为高或为低时启动地址选项字节所给出的地址。其地址范围在0x0000 0000 to 0x3FFF FFFF之间。如果配置的地址越界,硬件将使用默认启动入口地址。


我们现在要使用system memory,故需找出它所在的地址范围,根据手册可以查到。

从上面表格得知,访问System memory可以有两个地址,分别源自不同的访问接口。

我们不妨选用ICTM接口地址作为其入口地址,即0x00100000,将BOOT脚电平设置为高,则需配置BOOT_ADDR1【15:0】选项字节。这个选项字节是怎么拟定的呢?它是将程序启动入口地址的bit29~bit14对应过来的。比方我们选择system_memory的启动入口地址为0x0010,0000,则它所对应的选项字节数据就是0x0040。这点要弄清楚,否则当我们想通过修改启动地址选项字节来改变启动地址时就不知怎么填写数据了。


当然,对于BOOT_ADDR0和BOOT_ADDR1都有默认值。BOOT_ADDR0的默认值是0080,对应于ITCM接口的0x00200000。BOOT_ADDR1的默认值是0040,即对应于ITCM接口的0x00100000,结合上面的介绍可知它刚好是system memory的入口地址。显然,对于一颗没有更改过BOOT_ADDR1的STM32F7芯片来说,欲使用ISP的话,只需将BOOT脚置高即可,无须再手动调整启动地址选项字节。


剩下的事情就是确认硬件线路、打开STM32CubeProgrammer、连机下载即可。当然下载前可以根据需要做好各自配置,比如读写保护、看门狗启动选择等。

再次提醒下,通过ISP烧写完毕后,记得调整BOOT脚的电平以保证芯片重启后运行主程序区的用户代码。


总的来讲,基于ISP方式的STM32芯片烧写过程不复杂。最后一点建议,目标板上最好弄个复位键,操作方便点,如果板上不方便设计复位键,烧写工位上安排个也可以。基于STM32F746芯片使用ISP方式进行烧录就提醒这么多。毕竟说得再多,不如一试。


本文的主要目的就是让刚接触STM32的人对STM32芯片的烧写方式有个基本的了解,至于具体的实现,除了上面提到的基于ST的工具外,还有其它第三方的编程烧写工具可以选用。


关键字:STM32芯片  烧写方式  片外存储器 引用地址:关于STM32芯片的三种烧写方式对比

上一篇:如何利用stm32的高级定时器产生PWM
下一篇:浅谈STM32单片机命名规则和体系架构

推荐阅读最新更新时间:2024-11-12 11:33

浅谈链表对stm32芯片程序中的提升作用(C语言)
程序中经常面临这样的一个问题,需要创建一定数量的对象,但事前又不知道对象的具体个数,因此新手通常的做法都会为了能处理足够的对象信息,创建一个足够大的空间数组。这里举个简单的例子,某个应用要求管理学生信息,因此设置了这样的一个结构体(类似于面向对象语言里说的成员属性) typedef struct { int num; int age; char *name; }studentInfo; 在不引入链表的情况下,为了能管理尽可能多的学生信息,可能会这样创建这个结构体的实体: studentInfo student ; int studentCnt = 0; //记录已经管理的学生数量 这样的处理方法,理论上能实现需求
[单片机]
STM32学习之不同FLASH的芯片启动文件选择规则
F103ZET6的FLASH大小是512K,所以选择startup_stm32f10x_hd.s F103C8T6的FLASH大小是64K,所以选择startup_stm32f10x_md.s 移植需要注意的事项 从ZET6到C8T6,需要更改 1、启动文件 2、C++XU选项卡的 3、
[单片机]
<font color='red'>STM32</font>学习之不同FLASH的<font color='red'>芯片</font>启动文件选择规则
stm32 芯片与Cat的对应分类
最近在使用stm32l151cbu6开发一个项目,在查询datasheet关于DMA使用的时候,发现不同的cat分类,对应的功能还有些区别, 例如上面这个就是针对Cat.1和Cat.2。 这上面这个对应的就是Cat.3。 那么问题来了,怎么知道我的stm32l151cbu6是属于Cat.x呢,再慢慢翻datasheet,发现还真有。在P40页, 可以看到Cat分类是与flash大小直接相关的,这里面有个坑,表格里面的符号是“x”与“-”,‘x’反而表示flash大小与芯片型号的对应。往下看,我们还能看到更细致的芯片分类, 我项目的stm32l151cbu6属于STM32L 15XXB分类,对应的就是Cat.1分
[单片机]
<font color='red'>stm32</font> <font color='red'>芯片</font>与Cat的对应分类
STM32家族新成员—STM32WB双核无线芯片
STM32家族新成员—STM32WB双核无线芯片 2018年10月12日,意法半导体在北京召开媒体发布会,隆重发布并介绍了STM32系列的第12个新成员—STM32WB。STM32WB的发布对STM32来说有着重大的意义,正如意法半导体中国区微控制器事业部市场及应用总监曹锦东所说“未来整个产业的发展是面向物联网产业的,物联网产业里不能缺少无线的产品线,STM32产品更不能缺乏跟无线产品相关的IP,STM32WB的发布将会帮助STM32进入无线领域,并加强STM32在物联网市场的影响力。” 意法半导体中国微控制器事业部市场及应用总监 曹锦东 正在本次发布会中,意法半导体STM32超低功耗和网络微控制器市场经
[单片机]
<font color='red'>STM32</font>家族新成员—STM32WB双核无线<font color='red'>芯片</font>
STM32,系统时钟设定及芯片型号库函数选择
型号选择:在stm32f10x.h中,涉及芯片型号选择,如图: 用的为哪个芯片,把芯片去掉注释即可。具体芯片选型,参考程序下面注释 外部高速时钟的频率设定,也是在stm32f10x.h 中: 此后的设定工作,要在system_stm32f10x.c中完成: 在此处 SYSCLK_FREQ_72_MHZ 进行了定义 下一步就是设置系统时钟的 参数设置也是在system_stm32f10x.c中: 此处if中条件可能不成立,但是else中条件会成立 最后一步就是把设定好的参数给具体的初始化函数,在system_stm32f10x.c中设定系统时钟: 以上五个步骤,系统时钟设定即已经完成。注意:此时在设置中c++
[单片机]
<font color='red'>STM32</font>,系统时钟设定及<font color='red'>芯片</font>型号库函数选择
STM32芯片连接电脑出现的问题与解决方法
当我们使用STM32芯片进行开发时,往往需要将其连接到电脑以进行编程、调试等操作。然而,这个过程中可能会遇到一些让人头疼的问题,比如无法正常连接、连接不稳定等。 这些问题不仅影响了我们的开发效率,还可能让我们卡在关键的调试阶段。那么,遇到这些问题时,我们应该如何解决呢? 1.问题:无法识别芯片。 解决方法:检查芯片是否正确连接,USB线是否完好无损。尝试更换USB线或更换端口。同时,确保芯片的供电正常,供电电压应在3.3V左右。 2.问题:连接不稳定,经常出现断开现象。 解决方法:这可能是由于USB线质量不好或者端口供电不足导致的。尝试更换高质量的USB线或使用供电充足的端口。另外,检查芯片的配置文件是否正确。 3.问题:无法
[单片机]
STM32芯片系统结构
STM32芯片架构 STM32F103系列芯片的系统架构如下: STM32芯片基于ARM公司的Cortex-M3内核,由ST公司设计生产,内核与总线矩阵之间有I(指令)、S(系统)、D(数据)三条信号线。内核通过总线矩阵与FLASH、SRAM、外设连接。而外设包括GPIO、USART、I2C、SPI等。 STM32芯片系统结构 STM32F103 系列芯片(不包含互联网型)的系统结构如下: 从上图可以看出,在小容量、中容量和大容量产品中,主系统由以下部分构 成: 四个驱动单元: Cortex-M3 内核 DCode 总线(D-bus) Cortex-M3 内核系统总线(S-bus) 通用 DMA1 通用 DMA2 四个被动
[单片机]
<font color='red'>STM32</font><font color='red'>芯片</font>系统结构
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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