《STM32库开发实战指南:基于STM32F103(第2版)》——3.4节ISP一键下载原理分析

本文涉及的产品
视频直播,500GB 1个月
简介:

本节书摘来自华章社区《STM32库开发实战指南:基于STM32F103(第2版)》一书中的第3章,第3.4节ISP一键下载原理分析,作者刘火良 杨森,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.4 ISP一键下载原理分析
3.4.1 ISP简介
ISP指电路板上的空白元器件可以编程写入最终用户代码,而不需要从电路板上取下元器件。已经编程的器件也可以用ISP方式擦除或再编程。
使用ISP的时候需要用到自举程序(BootLoader),自举程序存储在STM32器件的内部自举 ROM(系统存储器)中。其主要任务是通过一种可用的串行外设(USART、CAN、USB、I2C等)将应用程序下载到内部Flash存储器中。每种串行接口都定义了相应的通信协议,其中包含兼容的命令集和序列。
3.4.2 ISP普通下载
现在我们针对USART1的ISP进行分析,通常的ISP下载的步骤如下:
1)通过USB转串口线将电脑连接到STM32的USART1,并打开电脑端的上位机;
2)设置跳线保持BOOT0为高电平,BOOT1为低电平;
3)复位单片机使其进入BootLoader模式,通过上位机下载程序;
4)下载完毕,设置跳线保持BOOT0为低电平,BOOT1为低电平;
5)复位单片机即可启动用户代码,正常运行。
以上步骤有个不好的地方就是:下载程序需要跳线及复位操作,很繁琐。理解了ISP的原理,就理解一键ISP了。它需要做的事情就是用上位机去控制BOOT0引脚和单片机的复位引脚,电路图见图3-6。


87cc337ccfe8a0a346db5d2bd20abbb6483d894d


11791a5a8741c1961a13b0a4ed8d9c2b4a7250f5

3.4.3 BOOT配置
在ISP下载电路中,需要配置BOOT引脚,BOOT引脚不同的配置会产生不同的启动方式,具体见表3-1。


89a3d5117b66078f5633960dc900e0f2ebe5d7dd

3.4.4 ISP一键下载
USB转串口大家都很熟悉,一般是用RXD和TXD这两个引脚。在一键ISP电路中,我们需要用USB转串口的芯片的DTR引脚和RTS引脚来控制单片机的BOOT0和NRST,原理如下:
1)通过上位机控制U6(CH340G)的RTS引脚为低电平,Q1导通,BOOT0的电平上拉为高电平。
2)通过上位机控制U6(CH340G)的DTR引脚为高电平,由于RTS为低电平,Q2导通,U8的2引脚为低电平,U18为一个模拟开关,使能端由4引脚控制,默认为高电平,U18的1引脚和2引脚导通,所以NRST为低电平,系统复位。
3)单片机进入ISP模式,此时可以将DTR引脚设置为低电平,RTS设置为高电平。Q1和Q2处于截止状态,BOOT0和NRST还原默认电平。
4)上位机将程序下载到单片机,下载完毕之后,程序自动运行。
5)有人认为U18、Q1、Q2是多余的,用U6的RTS和DTR直接控制也可以。正常情况下,这样理解没有问题,但是他们忽略了一点,就是在单片机上电瞬间,如果USB转串口连接了电脑,DTR和RTS的电平是变化的,如果处理不好,单片机会一直进入ISP模式,或者系统会复位多次,这种情况是不允许的。
6)于是,就有了全新的一键ISP电路。我们主要是分析上电瞬间的逻辑关系,单片机上电时通过示波器观察波形得知DTR和RTS的电平是变化的,但是也有一个规律就是:当RTS为低电平的时候,DTR也是低电平,因此一般情况下Q2不会导通,但由于这两个IO口的电平存在“竞争冒险”,会出现RTS的下降沿刚好遇到DTR的上升沿,这个时候Q2导通,导致系统复位,而BOOT0此时有可能也为高电平,就会进入ISP模式。这个是不受我们控制的,而我们不想系统出现这样的情况,因此加入了模拟开关来切断这种干扰。
7)加入模拟开关U18,通过控制U18的4引脚的开关来达到隔离干扰电平的目的。下面我们分析一下延时开关电路,上电瞬间,电容C65通过电阻R18来充电,由于电阻100kΩ很大,电容的充电电流很小,电容充电达到U18的4引脚的有效电平2V大概耗时1秒,在这个1秒时间内U18的模拟开关是断开的,因此RTS和DTR的干扰电平不会影响到系统复位。这样就保证了系统正常运行。

相关文章
|
7月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
529 2
|
6月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
933 0
|
3月前
【寄存器开发速成】半小时入门STM32寄存器开发(二)
【寄存器开发速成】半小时入门STM32寄存器开发(二)
|
3月前
|
芯片
【寄存器开发速成】半小时入门STM32寄存器开发(一)
【寄存器开发速成】半小时入门STM32寄存器开发(一)
|
4月前
|
存储 传感器 Linux
STM32微控制器为何不适合运行Linux系统的分析
总的来说,虽然技术上可能存在某些特殊情况下将Linux移植到高端STM32微控制器上的可能性,但从资源、性能、成本和应用场景等多个方面考虑,STM32微控制器不适合运行Linux系统。对于需要运行Linux的应用,更适合选择ARM Cortex-A系列处理器的开发平台。
325 0
|
7月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
566 4
|
7月前
|
传感器
【经典案例】STM32F407使用HAL库配置I2C详解
STM32F407是一个强大的微控制器,广泛应用于嵌入式系统中。在许多应用中,我们需要使用I2C总线来与传感器、EEPROM、显示屏等外设进行通信。本文将详细介绍如何使用STM32 HAL库来配置和使用I2C接口。
885 2
|
7月前
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
314 1
|
7月前
|
开发者
【经典案例】使用HAL库配置STM32F407的SPI外设
在嵌入式系统开发中,STM32F407是一款广泛应用的微控制器,而SPI(Serial Peripheral Interface)是一种常用的通信接口。本文将详细介绍如何使用STM32的硬件抽象层(HAL)库配置STM32F407的SPI外设,并提供完整的代码示例。
728 1
|
6月前
|
传感器 编解码 API
【STM32开发入门】温湿度监测系统实战:SPI LCD显示、HAL库应用、GPIO配置、UART中断接收、ADC采集与串口通信全解析
SPI(Serial Peripheral Interface)是一种同步串行通信接口,常用于微控制器与外围设备间的数据传输。SPI LCD是指使用SPI接口与微控制器通信的液晶显示屏。这类LCD通常具有较少的引脚(通常4个:MISO、MOSI、SCK和SS),因此在引脚资源有限的系统中非常有用。通过SPI协议,微控制器可以向LCD发送命令和数据,控制显示内容和模式。
241 0