我们做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,CAN,USB等,借助于芯片厂家或第三方提供的软件工具来实现。具体到STM32系列芯片,欲利用ISP方式进行编程烧写的话,软件工具可以使用ST官方提供的Stm32CubeProgrammer。

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

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

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

下面就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的工具外,还有其它第三方的编程烧写工具可以选用。

@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@

往期话题链接:【点击即可】

1、基于STM32的TIM+DMA+DAC应用示例

2、基于KEIL MDK调试STM32的两个误会

3、STM32选项字编程示例及几点提醒

4、定时器比较输出切换实现定制波形示例

5、读取STM32 RTC 日历值不更新的话题

2个相同的 stm32 can通讯不成功_STM32芯片的几种烧写方式简介相关推荐

  1. STM32软件的烧写方式

    STM32软件的烧写方式 1 ST-LINK烧写 1.1 ST-LINK烧写的SWD模式 ST-LINK烧写的SWD模式 是ST-LINK烧写的一种方式,只需要4根接线. 分别为VCC,GND,SWC ...

  2. Ubuntu下 stm32 jlink驱动的安装(1)通过JLink烧写、调试STM32

    转载地址 https://blog.csdn.net/lc_cc/article/details/66982821 最近在学习RT-thread,想在在LINUX下编译烧写stm32,JLink驱动安 ...

  3. 记一次 STM32 ST-Link Utility芯片擦除与程序烧写失败问题

    ST-Link Utility软件版本信息如下: 板子型号是STMF103C8T6,能正常通讯连接,识别出板子的型号: 但是有时候擦除芯片时会出现错误弹窗,如下: 程序也无法下载,会出现错误弹窗,如下 ...

  4. stm32的157系列linux,STM32MP157A-DK1测评 (1)官方OpenSTLinux烧写

    STM32MP157A-DK1测评 (1)官方OpenSTLinux烧写 [复制链接] STM32MP157A-DK1 这个板子从主要特征上看,就和风靡已久的各种"派"相似了,而和 ...

  5. 2个相同的 stm32 can通讯不成功_一文读懂,基于 STM32 和 CAN 总线的温度监控系统的设计方法...

    1 系统总体方案概述 系统总体框图如图 1 所示,本系统采用主站+从站的结构,CAN 主站主要实现温度数据的存储以及 CAN 总线协议和串口协议之间的桥接,CAN 从站主要实现温度的采集.CAN 从站 ...

  6. 2个相同的 stm32 can通讯不成功_CAN通讯系列--CAN通讯简介1

    1 CAN通讯简介 1.1 什么是通讯 为了更好地理解CAN通讯概念,我们借助人与人之间的通讯形式来了解汽车的这种内部通讯模式.当然,首先我们得清楚什么是通讯: "通讯是两个或两个以上参与者 ...

  7. STM32+ESP8266+MQTT连接阿里云服务器(一、烧写MQTT固件)

    用STM32连接阿里云服务器首先ESP8266得支持MQTT的AT指令,所以!!!在连接阿里云服务器时,得先对ESP8266进行固件替换. 工具 硬件:ATK-ESP8266.USB转串口 软件:fl ...

  8. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  9. K210学习笔记(五)——MAIX BIT(K210)与STM32串口通讯

    前言 uart 模块主要用于驱动开发板上的异步串口,可以自由对 uart 进行配置.k210 一共有3个 uart,每个 uart 可以进行自由的引脚映射. 一.MAIX BIT串口使用步骤 1.引脚 ...

最新文章

  1. 需要将git分支重置为原始版本
  2. 神策数据张涛:微信生态数字化运营解决方案
  3. 东莞.NET技术线下沙龙活动资料分享
  4. php 配置 gd2,配置PHP对gd库的支持
  5. php 安装xdebug扩展
  6. Apache版本兼容性问题
  7. linux学习一个服务(未完)
  8. 亿能bms上位机_BMS上位机 - 源码下载|Windows编程|通讯编程|源代码 - 源码中国
  9. apache中文翻译
  10. vue day13 网易云项目(歌词)
  11. 3dmax模型在web端
  12. 单点登录怎么整合项目_如何推销新项目:整合设计,创建登录页面并“吸引”用户...
  13. android 横向头像栏,Android实现个人资料页面头像背景模糊显示包(状态栏)
  14. Spring Boot进销存管理系统
  15. 笔记本屏幕变暗/调高亮度闪烁修复方法
  16. 从乔布斯卸任看苹果未来三年 会否半途而废?
  17. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  18. 极客时间 算法训练营 第一周总结
  19. 76个常识,你知几个
  20. 计算机视觉 马尔_计算机视觉概述

热门文章

  1. 【写作技巧】毕业论文写作:本科、硕士论文写作必备数据库
  2. nginx 转发慢_Nginx快速入门之Nginx反向代理与负载均衡
  3. Java多线程详解(线程不安全案例)
  4. java 枚举获取key_「Java必修课」HashMap性能很好?问过我EnumMap没
  5. 荣耀v40还会适配鸿蒙,荣耀年度旗舰V40再确认!将搭载“双芯片”:还能升级鸿蒙系统...
  6. HALCON 20.11:深度学习笔记(11)---目标检测
  7. 影响机器视觉光源效果的因素有哪些?
  8. 计算机英语900句.pdf,计算机英语900句第一章第一课:概貌
  9. Google+ 团队的 Android UI 测试
  10. [codeVS1204] 寻找子串位置