要想了解一键下载电路的工作过程,首先要了解STM32的几种启动模式。
STM32的几种启动模式如下表所示:
从表中可知,我们想用串口下载代码,就要配置BOOT0为1,BOOT1为0,但是如果想让STM32一复位就运行代码,就要配置BOOT0为0,BOOT1配置为什么都可以,为了解决这个问题,我们可以设计一个电路,通过串口转USB芯片CH340G的DTR#和RTS#引脚的信号来控制一键下载电路,从而间接控制STM32的RESET和BOOT0引脚的信号,来达到通过串口一键下载和运行的效果,省去了购买仿真器的费用,下载程序也变得简单方便,一键下载电路如下图所示:
串口下载软件选用的是MCUISP,通过串口的DTR和RTS信号来自动配置BOOT0和RESET信号,不需要用户手动切换它们的状态,直接串口软件自动控制,可以方便的下载代码。
打开 MCUISP,点击搜索串口,将自动找到电路板板载串口,在bps中选择波特率为460800,左下角选择:DTR的低电平复位,RTS 高电平进 BootLoader。再加载烧写文件。
在烧写程序以前,点击读器件信息将出现如下图所示的信息,说明电路板串口连接成功。
点击开始编程,程序开始烧写,烧写成功后会出现如下图所示信息,表明程序烧写成功。
接下来我们对整个过程作一个详细的分析:
首先,mcuisp控制DTR输出低电平,则DTR#输出高,然后RTS置高,则RTS#输出低,这样Q3导通了,BOOT0被拉高,即实现设置BOOT0为1,同时Q2也会导通,STM32的复位脚被拉低,实现复位。然后,延时100ms后,mcuisp控制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,程序开始正常运行,一键下载至此就完成了。
另外一篇网络文章:
关键字:STM32 串口下载 下载电路
引用地址:
STM32实现串口下载
推荐阅读最新更新时间:2024-11-08 21:44
STM32单片机学习---PWM输出
上午花了半天时间熟悉了stm32的PWM模块。中午利用午饭时间把PWM功能调试成功。当然,很简单的东西,也许很多前辈估计都不屑一顾的东西。 今天最大的感叹就是网络资源实在是个巨大的宝库,真的很庆幸,在这个复杂的社会环境里,在一个到处充斥着私心、私利的时代,各个网站,各个论坛上的众多网友都时刻保持着开源的氛围。学习一定要和他人交流,而网络提供了这么一个极好的平台。 废话少说,言归正传。 实现功能:采用定时器2的通道2,使PA1输出频率1K,占空比40的PWM波形,用PA8随意延时取反led灯,指示程序运行。 首先熟悉一下定时器的PWM相关部分。看图最明白 其实PWM就是定时器的一个比较功能而已。 CNT里的值不断++,一
[单片机]
利用STM32的SysTick设计精确延时函数
在项目中使用I2C接口传感器时要求有比较精确的延时,在网上搜了下,如果不想用中断SysTick定时器可以做到,找到如下资料: 主要仿照原子的《STM32不完全手册》。SYSTICK 的时钟固定为HCLK 时钟的1/8,在这里我们选用内部时钟源72M,所以SYSTICK的时钟为9M,即SYSTICK定时器以9M的频率递减。SysTick 主要包含CTRL、LOAD、VAL、CALIB 等4 个寄存器, SysTick- CTRL 位段 名称 类型 复位值 描述 16 COUNTFLAG R 0 如果在上次读本寄存器后systick已为0,则该位为1,若 读该位自动清零 2 CLKSOURCE RW
[单片机]
STM32的复用功能——时钟输出(MCO)
STM32的PA.8引脚具有复用功能——时钟输出(MCO), 该功能能将STM32内部的时钟通过PA.8输出. 操作流程: 1)、设置PA.8为复用Push-Pull模式。 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); 2)、选择输出时钟源。 时钟的选择由时钟配置寄存器(RCC_CFGR)中的MC
[单片机]
STM32的低功耗设计
在谈到低功耗处理器时,我们第一个想到的总是MSP430,但其实STM32也能拥有不错的低功耗特性。通过合理的进行软件设置,STM32在工作时的功耗可以降至数十mA,而待机功耗可以降到数uA。总的来说,降低STM32功耗的方法主要有以下三种: 1. 关闭不需要的外设时钟 STM32的所有外设都可以独立开启和关断,通过将不需要的AHB/APB的时钟关闭,可以起到降低总待机功耗的作用。各个模块的典型功耗如下所示: Figure 1. APB1外设的典型功耗 Figure 2. APB2外设的典型功耗 2. 降低主时钟的工作频率 对数字电路而言,功耗是与主频呈正比的。在进行一般任务时主动降低功耗,在需要高性能运算时再恢复到
[单片机]
STM32的代码,跑在RAM里快?还是跑在Flash里快?
测试手段如下: 主循环一直在做一个变量的自加(sum1++),当然前提保证不会溢出。 用Cortex-M3内部的Systick计数,以一秒钟为限,这个sum1的数值大小,可以判断哪种方式比较快。为了严密,我们观察第一秒到第二秒之间的计数效果;而不是从第0秒到第1秒(因为使能Systick到真正开始执行sum1++可能有间隙)。在第一次进入Systick的ISR时,记录下sum1的值;第二次进入Systick的ISR时,再次记录sum1的值,两次值之差即为一秒钟间隔中sum1执行了多少次自加。由此看出哪种方式比较快。 同样的测试前提:Prefetch Buffer Enable + Flash Latenty= 2 (根
[单片机]
STM32入门学习之EXTI外部中断(STM32F030F4P6基于CooCox IDE)
下面的代码,是把PA0当做一个按键口,芯片内部上拉,按键闭合时,IO口被拉低,触发中断。 #include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_exti.h #include stm32_lib/inc/stm32f0xx_gpio.h #include stm32_lib/inc/stm32f0xx_syscfg.h #include stm32_lib/inc/stm32f0xx_misc.h int main(void) { //时钟使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_G
[单片机]
STM32 RTC设置
RTC配置: 1.打开电源管理和备份寄存器时钟。这个在RCC配置中打开。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); 2.使能RTC和备份寄存器的访问(复位默认关闭)。 PWR_BackupAccessCmd(ENABLE); 3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。 if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) { A. BKP_DeInit();//BKP寄存器全部设为缺省值 B. RCC_LSEConfig(RCC_LS
[单片机]
关于stm32串口下载的问题
今天在用stm32f103rct6调程序的时候,不知道怎么回事j-link不能下载了,好像还不是驱动的问题,是她彻底坏了,没办法只能用串口下载了,以前没弄过,果然碰壁了。 首先、将boot0置1,boot1置0 其次就是串口的选择问题,注意需要选择串口1进行程序的下载
[单片机]