21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU STM32芯片烧录的三种方式介绍
发新帖我要提问
12345
返回列表
打印
[其他ST产品]

STM32芯片烧录的三种方式介绍

[复制链接]
楼主: 9dome猫
手机看帖
扫描二维码
随时随地手机跟帖
81
9dome猫|  楼主 | 2024-1-31 23:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
82
9dome猫|  楼主 | 2024-1-31 23:36 | 只看该作者
按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。

使用特权

评论回复
83
9dome猫|  楼主 | 2024-1-31 23:36 | 只看该作者

使用特权

评论回复
84
9dome猫|  楼主 | 2024-1-31 23:37 | 只看该作者
为了验证这个想法,在程序中将A15改为B15。更改初始化函数、

u8 DS18B20_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟

  //GPIOA15,改为了GPIOB15
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
  DS18B20_Rst();
  return DS18B20_Check();
}

使用特权

评论回复
85
9dome猫|  楼主 | 2024-1-31 23:37 | 只看该作者
更改头文件定义


//IO方向设置
#define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}        //PA15输入模式,改为PB15
#define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;}         //PA15输出模式,改为PB15

IO操作函数                                                                                          
#define        DS18B20_DQ_OUT PBout(15) //数据端口        PA15,改为PB15
#define        DS18B20_DQ_IN  PBin(15)  //数据端口        PA15,改为PB15

使用特权

评论回复
86
9dome猫|  楼主 | 2024-1-31 23:37 | 只看该作者
更改后,可以通过编译,下载后,KEIL也能扫描到设备。

使用特权

评论回复
87
9dome猫|  楼主 | 2024-1-31 23:37 | 只看该作者
6.3 能识别到芯片,但是下载时弹出报错对话框
使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported

使用特权

评论回复
88
9dome猫|  楼主 | 2024-1-31 23:37 | 只看该作者
点击确认下,报另外一个错误

使用特权

评论回复
89
9dome猫|  楼主 | 2024-1-31 23:38 | 只看该作者
原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。

使用特权

评论回复
90
wangdezhi| | 2024-2-2 21:30 | 只看该作者
ISP下载是将数据通过SPI下载到芯片的内置flash里面。

使用特权

评论回复
91
deliahouse887| | 2024-2-5 17:24 | 只看该作者
ISP烧录支持离线编程,即可以在MCU断电情况下进行烧录。

使用特权

评论回复
92
earlmax| | 2024-2-5 22:21 | 只看该作者
SWD(Serial Wire Debug)或JTAG(Joint Test Action Group)接口是嵌入式系统中常用的调试和编程接口。使用ST-Link、J-Link等调试器,通过USB连接到电脑,并与单片机上的SWD或JTAG引脚相连,利用IDE(如Keil MDK、IAR EWARM、STM32CubeIDE等)进行程序下载。这种方式支持在线调试,适合开发阶段的程序烧录和调试。

使用特权

评论回复
93
sesefadou| | 2024-2-7 00:02 | 只看该作者
STM32的部分型号支持UART、USART、USB等接口实现ISP功能。例如,可以使用STM32CUBEMX工具生成的Bootloader程序配合串口助手软件,通过UART口将程序数据传输到STM32内部Flash存储区。这种方式无需额外的硬件调试器,但一般不支持实时调试。

使用特权

评论回复
94
10299823| | 2024-2-7 15:23 | 只看该作者
在线编程,是通过调试器通过调试接口将程序代码烧录进芯片存储器的过程。调试器可以是ST官方的ST-LINK或JLINK等。这种方式在开发阶段非常常用,因为它允许开发者通过调试器对芯片进行编程和调试。

使用特权

评论回复
95
cemaj| | 2024-2-9 09:37 | 只看该作者
ISP(In-System Programming):在系统编程,通过芯片内部的自举程序进行烧录。这种方式需要使用特定的通信接口,如USART、I2C、SPI、CAN或USB,以及ST官方提供的Stm32CubeProgrammer软件。烧录前需要对硬件BOOT脚进行电平设置,并对选项字进行正确配置,以确保芯片从系统存储区启动。烧录完成后,需要将BOOT脚电平调整回芯片主程序区。
ICP(In-Circuit Programming):在电路编程,利用调试器(如ST官方的STLINK或其他公司的产品,如JLINK、ULink等)通过调试接口(如SWD或JTAG)将程序代码写进芯片存储器。ST官方提供了相应的软件工具,如STLINK_Utility或STM32CubeProgrammer。
IAP(In-Application Programming):在应用编程,芯片内部已存在具有升级更新功能的代码,用户基于该部分功能代码再将另外的程序代码写进芯片存储器。这种方式不需要特定的软硬件接口,但需要用户自己编写用户引导程序。

使用特权

评论回复
96
olivem55arlowe| | 2024-2-9 10:09 | 只看该作者
IAP下载是用户自己的程序在运行过程中对User Flash的部分区域进行烧写。

使用特权

评论回复
97
hearstnorman323| | 2024-2-11 19:57 | 只看该作者
ST官方提供了STLINK工具,通过这个工具,用户可以给目标设备进行烧录。在使用这种方式进行烧录时,需要在上位机上采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。这种方式在上位机中可以检测到STLINK。

使用特权

评论回复
98
alvpeg| | 2024-2-11 22:20 | 只看该作者
STM32芯片的烧录可以通过ICP(在线编程)‌、IAP(在应用编程)‌和ISP(在系统编程)‌这三种主流方式进行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部