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

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

3天内不再提示

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

茶话MCU 2019-08-29 10:49 次阅读

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

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

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

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

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

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

我们使用ISP方式编程的话,可以选择内嵌系统启动代码认可的通信接口,比如USART,I2C,SPI,CANUSB等,借助于芯片厂家或第三方提供的软件工具来实现。具体到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的工具外,还有其它第三方的编程烧写工具可以选用。

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

    关注

    0

    文章

    55

    浏览量

    14119
  • STM32芯片
    +关注

    关注

    0

    文章

    38

    浏览量

    4311

原文标题:STM32芯片的几种烧写方式简介

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    debugInRam,与debuginflash,reinflash这三种方式有什么区别?

    我买的是一个lpc2131的arm板子然后总是出现以下情况,我用的是jlink,这样之后就没法代码了,然后只有用j-tag之后才能重新编码?我用的
    发表于 02-20 18:34

    请问stm32启动的三种方式是什么意思?

    请群主详细解释下这三种启动方式,看了参考资料不是很明白其意!谢谢!
    发表于 07-17 04:35

    单片机常用的程序方式有哪些?

    单片机常用的三种程序方式
    发表于 03-17 06:35

    单片机是什么?有哪几种方式

    单片机是什么单片机三种方式
    发表于 04-01 19:49

    STM32三种启动模式

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash。2)系统存储器 = 芯片内部一块特定的
    发表于 08-05 07:25

    STM32三种开发方式

    1 STM32三种开发方式通常新手在入门STM32的时候,首先都要先选择一要用的开发方式,不
    发表于 08-05 06:56

    STM32三种启动方式

    STM32三种启动方式依靠BOOT0和BOOT1两个引脚的电平来决定,ST官方推荐的是串联10k电阻然后在接高电平或接地。我用0R直接接地的,没有串联10k电阻,造成STM32的硬件
    发表于 08-11 06:33

    STM32串口通讯有三种方式

    STM32串口通讯有三种方式,分别为阻塞(轮询)、中断、DMA。串口模式和配置 源代码编写
    发表于 08-13 06:52

    STM32三种启动模式

    01STM32三种启动模式STM32三种启动模式:FLASH启动、SRAM启动和系统存储器启动,通常三种启动
    发表于 08-18 07:52

    STM32三种开发方式分享

    STM32三种开发方式通常新手在入门STM32的时候,首先都要先选择一要用的开发方式,不同的
    发表于 12-01 07:59

    stm32程序BOOT1和BOOT0的设置问题怎么解决

    1、关于stm32程序问题:使用STM32 ST-LINK Utility进行
    发表于 12-10 07:06

    STM32三种boot模式介绍

    、示例验证总结参考资料任务摘要请说明STM32三种Boot模式的差异,并在之前第11-12周“C语言各种变量的存储地址”作业代码基础上,研究至少两boot模式下,代码下载(烧录)运行后所在的地址位置,与理论
    发表于 12-10 07:46

    STM32三种启动方式是什么

    STM32三种启动方式是什么
    发表于 12-15 07:16

    STM32三种Boot模式的差异

    STM32三种BOOT模式介绍.启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。内存类型简介主闪
    发表于 12-20 07:54

    STM32三种BOOT启动方式的设置与应用

    如何在不同的下载方式中选择STM32的启动模式呢?STM32三种BOOT启动方式的设置与应用分别是什么?
    发表于 01-18 07:01