STM32支持仿真器和串口下载程序。将要介绍的内容,属于串口下载,即我们通常说的ISP下载。
手动ISP下载程序,我们已经知道了,控制BOOT0引脚实现。STM32上电,会自动检测BOOT0引脚是什么电平,如果是高电平,等待用户下载程序;如果是低电平,运行用户之前下载到单片机的程序。所以我们需要把BOOT0引脚引出,然后控制其接地或接VCC来下载程序或者运行程序。在调试过程中,我们需要不断的控制BOOT0,非常麻烦。那么,自动ISP就该出场了。
自动ISP,把BOOT0与地直接连接,那么每次上电就会运行程序,而且只要点击电脑上的“下载”按钮,就开始下载程序,下载完程序,就开始执行。实现此目的,需要借助串口握手信号DTR和RTS。
下面是深圳鹏远电通科技有限公司研发的免费ISP下载软件,请看红色的框里面的部分。
DTR连接RESET(复位引脚),控制复位,RTS连接BOOT0,用来控制程序运行或者等待下载。
下面说明如何用USB转TTL芯片实现STM32自动ISP。CH340芯片如下图所示:
CH340芯片,DTR和RTS引脚在一般情况下是高电平,低电平有效。因为STM32的RESET引脚,也是一般情况下是高电平,低电平复位,所以DTR可以与RESET直接连接。但是BOOT0是高电平下载程序,低电平运行程序,正好与RTS相反,所以我们需要把它反相,加一个NPN三极管即可。电路如下图所示:
ISP软件的选择:
看了上图的选择,有些人一定会产生疑虑。按道理应该是低电平复位,然后低电平进入BOOTLoader呀。但是,有一点需要注意,它这里讲的高低电平,是针对电脑原始的9针串口的,也就是“232电平”,我们用的USB转TTL芯片是“TTL电平”,正好相反。关于此部分,亲们可以参考我写的另一篇文章:http://www.rationmcu.com/elecjc/947.html
下载过程和结果如下图所示:
注意:CH340在刚上电,稳定需要几秒钟时间,在此期间,DTR引脚会有两次或者三次的变低情况,这样会引起单片机上电后复位两三次,稳定后不会影响程序运行。如果不想让单片机上电复位好几次,上电的时候把DTR与RESET断开即可。
关键字:STM32 自动ISP电路
引用地址:
STM32自动ISP电路设计
推荐阅读最新更新时间:2024-03-16 15:24
STM32的基本系统是怎样的?
电源 无论是否使用模拟部分和AD部分,MCU外围出去VCC和GND,VDDA、VSSA、Vref(如果封装有该引脚)都必需要连接,不可悬空 对于每组对应的VDD和GND都应至少放置一个104的陶瓷电容用于滤波,并接该电容应放置尽量靠近MCU 用万用表测试供电电压是否正确,调试时最好用数字电源供电,以便过压或过流烧坏板子,电压最好一步一步从进线端测试到芯片供电端 复位、启动选择 Boot引脚与JTAG无关。其仅是用于MCU启动后,判断执行代码的起始地址 在电路设计上可能Boot引脚不会使用,但要求一定要外部连接电阻到地或电源,切不可悬空;STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 用户闪存 = 芯片内置的Fla
[单片机]
关于stm32自由控制io口的笔记
刚入手stm32,想从最简单的控制io口做起,仿照历程,书写了一个控制PA15口持续输出低电平的程序,可是无论怎么样就是不能将IO口拉低,始终输出3.3V,那个纠结啊!后来仔细问了同学才明白原因: PA15为复用端口, 作者为了在学员使用JLINK调试时产生不必要的麻烦,在包含某些system文件时已经将该口的复用功能默认打开了。 所以在软件编写的时候要先禁用JTAG功能才能把这个IO口当成普通IO口使用。也就是在程序开始的时候加上这一句话:JTAG_Set(JTAG_SWD_DISABLE); 因为stm32功能强悍,但引脚有限,所以大部分的引脚都有复用功能,所以使用IO口是要特别注意这点:例如某些IO与LCD功
[单片机]
STM32项目(二) —— 车灯测试台架
需求: (1)、点灯控制器:在线节拍,离线节拍; (2)、PWM控制盒:在线PWM,离线PWM; (3)、电流测试模块:检测车灯电流校准系数; 方案: 点灯控制器:STM32 + CAN + GPIO 节拍:比如亮多长时间,灭多长时间;大节拍中嵌套多个小节拍,每个灯对应相同或者不同的节拍。 上位机下发控制指令,表明此时是在线还是离线。(离线跑的节拍是在在线模式下下载的) 在线模式:如果是直接输出,按照指定格式下发CAN消息,MCU接受消息并解析,切继电器点灯;如果是存储节拍,MCU内部Flash存储上位机通过CAN下发的点灯节拍。 离线模式:从内部Flash中读取节拍,并控制继电器点灯; 模式切换按钮:不仅可以通过上位机控制
[单片机]
STM32之DMA讲解及配置过程,附带代码说明
DMA涉及概念讲解: ①:DMA即Direct Memory Access(直接存储器存取),是STM32特有的外设。大容量STM32产品集成了两个DMA,分别是DMA1和DMA2,。其中DMA1有7个通道,DMA2有5个通道,具体每个通道连接的外设可以参考STM32芯片的数据手册。 ②:通过DMA可以将数据在两个不同的地址之间进行传递,如存储器到外设寄存器,外设寄存器到存储器,也可以从存储器到存储器之间。 ③:当两个数据在不同的地址之间传递时,需要在程序配置中确定每次传输的字节数,确定是字节、半字还是字。 ④:DMA的每个通道优先级是可变的。以DMA1为例,它有7个通道,可以配置每个通道的优先级为很高、高、中,低
[单片机]
STM32 GPIO使用超强总结
STM32 GPIO使用超强总结 STM32GPIO使用 操作步骤: 1. 使能GPIO对应的外设时钟 例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE); 2. 声明一个GPIO_InitStructure结构体 例如: GPIO_InitTypeDef GPIO_InitStructure; 3. 选择待设置的GPIO管脚 例如://选择待设置的GPIO第7、8、9管脚位 ,中间加“|”符号 GPIO_InitStruc
[单片机]
【STM32平衡小车】线性CCD( TSL1401CL)巡线
一、手册概览 功能概览如下 TSL1401CL 线性传感器阵列由一个 128×1 的光电二极管阵列,相关的电荷放大器电路和一个内部的像素数据保持功能组成,它提供了同时集成起始和停止时间的所有像素。 该阵列 128 个像素,其中每一个具有光敏面积 3,524.3 平方微米。 像素之间的间隔是 8 微米。操作简化内部控制逻辑,只需要一个串行输入端(SI)的信号和时钟 CLK。 每个像素所采集的图像灰度值与它所感知的光强和积分时间成正比。 其中的积分时间也就是我们常说的曝光时间! (曝光时间是指底片的感光时间,曝光时间越长底片上生成的相片越亮,相反越暗。) 内部电路如下 引脚功能描述 128 个像素是怎么
[单片机]
stm32 一上电串口发送0x00
现象:stm32 一上电串口发送0x00。 (1)STATUS寄存器的上电初始值有问题造成的,Usart的发送数据寄存器有一个缓冲移位寄存器。并且发送有两个状态,一个是发送数据寄存器为空,一个是移位寄存器发送完成。上电后Usart的状态寄存器的发送完成位为0,造成了上电以后会始终会有一个值被发送,这个值就是发送移位寄存器中的值,而这个值有时候是0X00有时候是0XFE 。 (2)在上电后至端口初始化,STM32的I/O端口处于高阻状态,有些RS232转换芯片在输入端为高阻时,可能会输出0,从而造成接收端收到0,我们已经多次看到这种现象;这时只需要在STM32的TX端加一个上拉电阻就可以解决(还未验证)。 解决方法:
[单片机]
基于STM32的HAL库学习(2)UART串口学习
1、串口的模式有3种,一是查询模式,二是中断模式,三是DMA模式 HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制 HAL_UART_Receive();串口轮询模式接收,使用超时管理机制 HAL_UART_Transmit_IT();串口中断模式发送 HAL_UART_Receive_IT();串口中断模式接收 HAL_UART_Transmit_DMA();串口DMA模式发送 HAL_UART_Transmit_DMA();串口DMA模式接收 2、阻塞传输是调用这个函数并在等待时间内一直等待操作完成。 HAL_UART_Transmit HAL_UART_Receive
[单片机]