一、简介
STM32的常用程序下载方式,包括串口、SWD和J-Link
,以及启动配置如何通过BOOT0和BOOT1设置,以及BootLoader在不同启动模式下的作用。下载程序方式可以分为几种,一种是通过软件进行hex文件进行下载,或者通过编译环境自带的下载环境进行hex文件以及bin文件的下载。其次就是通过第三方软件使用串口进行程序下载。
使用的软件如下所示:
- FlyMCU下载助手:https://download.csdn.net/download/
- JLink-Windows程序下载助手:https://download.csdn.net/download/
常用的程序下载方式:
- 串口转USB:需要用到一个CH340芯片,网上购买stm32基础套件时一般会有使用该芯片连接USB的模块,连接该芯片时需要占用芯片的USTART_TX和USTART_RX,分别对应芯片的PA9和PA10
- SWD方式:例如,st-link v2,需要使用stm32的SWDIO和SWCLK引脚,分别对应芯片的PA13和PA14
- J_LINK方式:需要使用stm32的TCK(时钟)、TMS(模式选择)、TDI(数据输入)、TDO(数据输出)、TRST(复位)引脚
二、STM32的启动配置
启动配置:指定程序开始执行的位置。由于stm32芯片内部有多种存储设备,可以让程序从不同的地方启动,因此,需要对启动的存储设备进行配置。
1.SWD下载
不需要对电路进行特殊处理,只需要将单片机的引脚SWDIO和SWCLK引出来,和烧录器的SWDIO和SWCLK引脚相连即可进行程序的烧录,烧录文件为hex文件。
(1)先打开下载软件,选择新建一个工程。具体操作如下:
(2)配置下载工程的工程MCU芯片型号
(3)选择自己程序所使用的芯片名称
(4)打开需要下载的hex工程文件
(5)点击连接,进行连接,并且连接成功之后如下显示:
(6)连接成功之后,直接进行下载
(7)下载成功后重新启动电源即可。
2.串口下载
(1)stm32可以通过配置BOOT0和BOOT1引脚设置启动配置:
- BOOT1=x,BOOT0=0:最常用的模式,执行Flash程序存储器中的程序
- BOOT1=0,BOOT0=1:串口下载模式,执行系统存储器中的程序,该程序是一段BootLoader程序,会将串口发送来的数据写入到Flash程序存储器
- BOOT1=1,BOOT0=1:内置SRAM模式,一般用于调试,较少使用
启动配置只在上电复位时有效
,也就是说,只有当通电和复位时会根据BOOT0和BOOT1确定启动配置。
(2)使用串口下载程序之前需要将CH340的引脚接好,具体连线为:
序号 | 接线方式 |
---|---|
1 | A9 -> RXD |
2 | A10 -> TXD |
3 | GND -> GND |
4 | VCC -> 3.3V |
然后将USB TO TTL插入电脑的USB接口,并将电源线接好。
(3)设置如图所示:
先设置为串口下载模式(BOOT1=0,BOOT0=1),然后按下复位(如果是刚上电,可以不用按复位),再点击“开始编程”,程序就会下载到stm32中开始执行。
- 当BOOT1=0、BOOT0=1时,如果按复位,此时就会执行BootLoader程序等待串口数据写入,当数据写入Flash程序存储器后,还是会执行Flash程序存储器中的程序
- 当BOOT1=x、BOOT0=0时,如果按复位,此时还是会执行Flash程序存储器中的程序
因此,如果是开发,可以直接使用串口下载模式,每次编译好HEX文件后,点击复位,然后下载程序。
三、串口下载电路
通过控制BOOT0_CTRL的高低电平,来控制BOOT0的高低电平,并且可以通过程序来控制。
int reset(void)
{
rt_base_t pin = GET_PIN(D, 0);
rt_pin_mode(pin,PIN_MODE_OUTPUT);
rt_pin_write(pin, PIN_HIGH);
}
static int reset_boot(int argc, char **argv){
reset();
rt_hw_cpu_reset();
}
MSH_CMD_EXPORT_ALIAS(reset_boot, chgboot, change boot mode to uart1);
通过先下发指令,进入下载模式,然后再通过软件进行程序的下载即可。