首页 > 编程语言 >STM32程序的烧录方式 与 ISP一键下载

STM32程序的烧录方式 与 ISP一键下载

时间:2023-07-22 21:46:13浏览次数:35  
标签:烧录 启动 复位 引脚 ISP BOOT0 STM32 RTS

一、启动模式(Boot modes)
阅读:STM32中文参考手册_V10.pdf 查看启动配置(Boot modes)。

在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。

 

STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
1)用户闪存 = 芯片内置的Flash。
2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区
域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
3)SRAM = 芯片内置的RAM区,就是内存啦。

在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:
BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。
BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。
BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试。

在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。

因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。

根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问:
● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。
● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载)

● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。

注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。

 

1, ST-LINK烧写
1.1 ST-LINK烧写的SWD模式
ST-LINK烧写的SWD模式 是ST-LINK烧写的一种方式,只需要4根接线。 分别为VCC,GND,SWCLK, SWDIO;

如果用SWD模式下载的话,只需要接:J-LINK的第1脚(VDD)、第7脚(TMS/SWDIO对应stm32的PA13)、第9脚(TCK/SWCLK对应stm32的PA14)、第4.6.8.10.12.14.16.18.20中的任意一个脚(GND地脚)、需要说明的是第15脚(RESET对应stm32的NRST)可接可不接,大家根据实际自己决定(保险起见还是建议接上,不接时可以在MDK仿真器的设置里面不使用硬件复位,而是用system reset或者vect reset)!

 

 

用SWD下载参考电路图:

 

 


1.2 ST-LINK烧写的JTAG模式

 

 

 

 

 

在JTAG模式下的程序烧写过程中需要进行单独对板子进行供电

STM32F10XXX JTAG的引脚:

 

 

 

STM32F10XXX 芯片内部的JTAG引脚已带有内部上拉和下拉:

 

 

JTAG下载参考电路图:

 

 

 

2 ,USB转串口连接线烧写(又称ISP烧写,且使用的串口必须是串口1)
2.1 方法一(该方法用于手动设置下载)
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader;
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中;
Step3:程序下载完成后,必须要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动。

 

2.2 方法二(该方法用于软件一键下载)

我们想用串口下载代码,就要配置BOOT0为1,BOOT1为0,但是如果想让STM32一复位就运行代码,就要配置BOOT0为0,BOOT1配置为什么都可以,为了解决这个问题,我们可以设计一个电路,通过串口转USB芯片CH340G的DTR#和RTS#引脚的信号来控制一键下载电路,从而间接控制STM32的RESET和BOOT0引脚的信号,来达到通过串口一键下载和运行的效果。

一键下载电路参考:

 

 

串口下载软件选用的是FlyMcu或MCUISP,通过串口的DTR和RTS信号来自动配置BOOT0和RESET信号,不需要用户手动切换它们的状态,直接串口软件自动控制,可以方便的下载代码。

 

 

我们需要注意一点:CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340G IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。

首先,FlyMcu软件控制DTR输出低电平,则DTR#引脚输出高, 然后RTS置高,则RTS#引脚输出低,这样Q3导通了,BOOT0被拉高,即实现设置BOOT0为1,同时Q2也会导通,STM32的复位脚被拉低,实现复位。

然后,延时100ms后,FlyMcu软件控制DTR为高电平,则DTR#引脚输出低电平,RTS维持高电平,则RTS#引脚继续为低电平,此时STM32的复位引脚,由于Q2不再导通,变为高电平,STM32结束复位,但是BOOT0还是维持为1,从而进入ISP模式,接着mcuisp就可以开始连接STM32,下载代码了,从而实现一键下载。​

DTR#和RTS#信号的时序图如下图所示:​

程序下载完毕后,如果设置了编程后执行,STM32会再次被复位,此时DTR#引脚为高,RTS#引脚为低,STM32复位后,DTR#引脚设置为低,RTS#引脚设置为高,那么Q2和Q3都不导通,此时,STM32重新开始启动后,检测到BOOT0为0,程序开始正常运行,一键下载至此就完成了。

 

原文链接:https://blog.csdn.net/tyler880/article/details/90311773

标签:烧录,启动,复位,引脚,ISP,BOOT0,STM32,RTS
From: https://www.cnblogs.com/birdBull/p/17574315.html

相关文章

  • STM32高级定时器 time1
    高级定时器和基本定时器通用定时器有较大区别。基本定时器就只能进行定时操作。且CNT只能加。基本定时器能进行定时,PWM的生产,输入捕获啥的高级定时器能定时/PWM。输入捕获,输出互补和死区刹车的生产。高级定时器定时器1有4个中断函数/含中断源。中断源:TIM1_BRK_IRQn //打破中断......
  • mybatisPlus
    mybatisPlusmybatisplus基础:mybatisspringspringmvc为什么要学习mybatisplus?可以解决大量时间所有的CRUD代码它都可以自动化完成简介简化jdbc操作简化mybatis快速入门网站:快速开始|MyBatis-Plus(baomidou.com)使用第三方依赖导入对应的依赖研究......
  • STM32F103 点亮LED闪烁与仿真
    今天给大家分享一下STM32流水灯简单的仿真吧,我感觉这个提供有用的,但是自己也是第一次使用,主要是感觉曲线很高级。在PWM中查看脉宽很有用。code:led.c#include"led.h"#include"delay.h"/*GPIO的控制寄存器的配置1、配置输出引脚2、打开对应的输出的寄存器的时钟3、配置引脚......
  • pvdisplay
    pvdisplay显示物理卷的属性补充说明pvdisplay命令用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。语法pvdisplay(选项)(参数)选项-s:以短格式输出;-m:显示PE到LE的映射。......
  • STM32F103内部FLASH及地址表
    在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数。这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能。将这类数据存在指定的位置,需要修改时直接修改存储位置的数值,需要使用时则直接读取,会是一种......
  • STM32HAL库使用SPI驱动1.44寸TFTLCD
      关于STM32F4单片机,使用HAL库自带的SPI,驱动TFTLCD屏幕的资料网上好像不太多,正好最近我做了这项工作,把成果分享给大家。我的代码实现了这些功能:任意坐标画点,指定首尾坐标画线,画方框,指定区域显示彩图,显示16*16或者12*12的汉字、ASCII码,并附带ASCII码表与少量的汉字字库。......
  • 【STM32】使用STM32提供的DSP库进行FFT(附详细代码)
    最近,因为项目需要在STM32F103系列处理器上,对采集的音频信号进行FFT运算,然而STM32F103毕竟不是STM32F4系列的处理器,对于一般的FFT运算程序还是比较缓慢的。幸亏官方提供了针对FFT的官方库,但是去官网找了半天居然找不到那个库的下载,好像官方早就把那个库下架了,估计是为了给带D......
  • STM32CubeMx LL库BUG之一
    STM32CubeMx是目前最新的V5.5STM32F407,输出LL库,使用FreeRTOS,任务堆栈大小错误:在STM32CubeMx上任务堆栈的单位是word,即4个byte。但是实际上这里的单位是byte,就是说你设置256的话(即1024bytes),实际上给你生成的代码只有256byte,这可能导致任务堆栈溢出,发生各种各样的问题,最常......
  • mybatisPlus简介
    mybatisplus简化了dao层packagecom.example.mp_01.dao;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importcom.example.mp_01.domain.User;importorg.apache.ibatis.annotations.Mapper;@MapperpublicinterfaceUserdaoextendsBaseMapper<User>......
  • 使用 STM32 测量频率和占空比的几种方法
    这几天在论坛上面解答了好几个询问STM32测量频率的贴子,觉得这种需求还是存在的(示波器、电机控制等等)。而简单搜索了一下论坛,这方面的贴子有但是不全。正好今年参加比赛做过这方面的题目(最后是一等奖嘿嘿),所以把我们当时尝试过的各种方案都列出来,方便以后大家使用,也是作为一个长期在......