本人是一位stm32初学者,在准备电赛的时候已经烧坏两块stm32f103的板子了,其现象都是某一天连接电脑准备烧新写好代码的时候发现:连接上去板子的led灯不亮,且板子上的CH340芯片发烫,请问是什么原因导致的呢,有无避免方法,谢谢各位了。
电压电流过大了,或者你的引脚接错或者短路了
当初烧坏了多个103单片机,原因很大一部分是因为使用单片机直接读取(或驱动)外部电路模块,一方面需要采用更加稳定的外部电路,当时我们队友用了OPA690作为电压跟随器,因为这个芯片稳定性差,用单片机ADC读取的时候输入电流过大(也可能是电压过大)把板子烧了,AD8021会更稳定些。另一方面,采用单片机ADC的时候,加个电压跟随器,可以5V供电的那种,以免自激突然产生高压脉冲烧毁单片机。外部电路的因素更容易导致烧板子,板子本身其实很稳定。
不知道你这个问题是否已经解决, 如果还没有解决的话:在学51单片机的时候,我们第一句是#include<reg52.h>。关于基础部分,大家可以看我的51单片机部分,很详细,这里不具体展开。
在第5小节中零零碎碎讲了一些地址,这节课逻辑性的讲一下。
在stm32芯片手册中可以看到(P28),一共4G大小,地址范围0x0000 0000到0xFFFF FFFF,分成8个块(Block0~Block7),每块大小为512M。
在第4小节中我们用到了block2,具体看下block2的内容(参考stm32f10x系列参考手册)
可以看到一共有3条总线:APB1、APB2、AHB。
总线名称 | 总线基地址 |
---|---|
APB1 | 0x4000 0000 |
APB2 | 0x4001 0000 |
AHB | 0x4001 8000 |
其实APB1、APB2和AHB都是在外设地址(0x4000 0000)偏移,分别偏移0x0,0x0001 0000和0x0002 0000。
那么定义
#define PERIPH_BASE 0x4000 0000
//总线基地址
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE+0x00010000)
#define AHBPERIPH_BASE (PERIPH_BASE+0x00020000)
看到GPIOC在APB2上偏移0x0001 0000。
定义
#define GPIOC_BASE (APB2PERIPH_BASE+0x00010000)
再看下GPIOC相关寄存器
都是在GPIOC_BASE的基础上偏移地址,每次都是4个字节(32位)。
所以定义
#define GPIOC_CRL *(unsigned int *)( GPIOC_BASE+0x00)
#define GPIOC_CRH *(unsigned int *)( GPIOC_BASE+0x04)
#define GPIOC_IDR *(unsigned int *)( GPIOC_BASE+0x08)
#define GPIOC_ODR *(unsigned int *)( GPIOC_BASE+0x0C)
#define GPIOC_BSRR *(unsigned int *)( GPIOC_BASE+0x10)
#define GPIOC_BRR *(unsigned int *)( GPIOC_BASE+0x14)
#define GPIOC_LCKR *(unsigned int *)( GPIOC_BASE+0x18)
接下来配置时钟地址
根据地址分配可得
#define RCC_BASE (AHBPERIPH_BASE+0x1000)
根据上图可知,RCC_APB2ENR是在RCC基础上偏移0x18
所以
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE+0x18)
以上讲了那么多无非是把上节课程序中的
*(unsigned int*)0x4002 1018
*(unsigned int*)0x40011004
*(unsigned int*)0x40011004
*(unsigned int*)0x4001 100C
讲解更能清楚,我们不希望在main函数中出现类似0x4002 1018的地址,而使用可读性更好的英文单词来表述。因此仿51单片机的写法,把一些地址定义放在头文件stm32f10x.h中。
//头文件stm32f10x.h
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
/* AHB总线基地址 */
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
/*GPIOC外设基地址*/
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
/* GPIOC寄存器地址 */
#define GPIOC_CRL *(unsigned int*)(GPIOC_BASE+0x00)
#define GPIOC_CRH *(unsigned int*)(GPIOC_BASE+0x04)
#define GPIOC_IDR *(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR *(unsigned int*)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10)
#define GPIOC_BRR *(unsigned int*)(GPIOC_BASE+0x14)
#define GPIOC_LCKR *(unsigned int*)(GPIOC_BASE+0x18)
/*RCC外设基地址*/
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
/*RCC的AHB2时钟使能寄存器地址*/
#define RCC_APB2ENR *(unsigned int*)(RCC_BASE+0x18)
那么在main函数中可以写成
#include “stm32f10x.h”
int main(void)
{
RCC_APB2ENR |= 1<<4;
GPIOC_CRH &=~(0x0F<<(4*5));
GPIOC_CRH |=(1<<(4*5));
GPIOC_ODR &=~(1<<13);
while(1);
}
void SystemIinit()
{
}
接下来做实验,在文件夹中新建文件“stm32f10x.h”。
将头文件添加到Keil工程中,添加方式参考添加启动文件的过程。打开头文件,输入如下程序。
在main.c中输入如下程序。
编程下载到开发板观察到实验现象。
初步感觉是板子短路了,有万用表的话先量一下板子的电源引脚,看看是不是短路问题,是自己焊接的PCB板子还是现成的板子呢,你都排查一下
5v不能接到单片机的3v,我就因为这样烧坏过,还有正负极相接会短路LED灯会熄灭。
STM32 我的串口坏的解决方法
可以参考下
https://blog.csdn.net/weixin_42442319/article/details/118928158
http://www.51hei.com/bbs/dpj-212489-1.html
建议不要连接多电源,同时只能由一个地方供电,我出现过烧坏板子这个问题.
检查下你的电路的接线是否存在问题。以及驱动啥的方面的问题。其次,认真读它的手册,对实体进行仔细检查、核对是否应用与手册不符,特别是电源、通讯部分。
电流过大吧
连接电脑时出现板子上的LED灯不亮且CH340芯片发烫的情况可能有以下几个原因:
电源问题:检查供电是否正常,确保供电电压稳定。如果供电电压不稳定或电流过大,可能会导致芯片发热和电路异常。
电路连接问题:检查连接电路是否正确,确保连接线的接触良好,没有接触不良或短路现象。
芯片损坏:如果使用的芯片已经损坏,可能会导致电路异常和发热。在使用STM32开发板时,要注意避免过度烧写程序,过度调试或意外的短路等操作,以防止芯片受损。
为避免这些问题发生,你可以采取以下预防措施:
使用稳定的电源:确保所使用的电源稳定,电压和电流符合芯片的要求。可以使用稳压电源或者USB电源适配器来供电。
检查连接线路:在连接STM32开发板与电脑时,仔细检查连接线路是否正确连接,确保连接线的接触良好,避免接触不良或短路。
谨慎操作:在编程和调试过程中,遵循正确的操作流程,避免频繁烧写程序、过度调试或意外短路等操作。遵循规范的开发流程,确保操作正确性。
温度控制:在使用开发板时,注意环境温度控制,避免长时间在高温环境下操作,以免芯片过热损坏。
回答部分参考、引用ChatGpt以便为您提供更准确的答案:
在CST(Computer Simulation Technology)中仿真带有放大器的微带线传输系数时,直接导入touchstone得到的S参数与放大器的参数完全不同,使用离散端口进行场路协同也无法获得正确的S参数。要解决这个问题,可以尝试以下方法来仿真微带线的放大器部分:
请注意,具体的仿真方法和步骤可能因您的具体情况而异,建议您仔细检查仿真设置和参数,并参考CST的文档或寻求相关技术支持以获取更具体的指导和帮助。
参考GPT:
结合分析得出:
1:这个问题是关于自己做的板子,使用了STM32F103ZET6芯片,电源转换芯片AMS1117-3.3,当供电+5V时,STM32芯片马上就很热的情况,回答者给出了一些可能的原因和解决方法,如检查是否有短路的地方或者IO电流大的地方,确认各个电源引脚是否供电正常,检测滤波电容有没有短接的地方,更换芯片等。
2:这个问题是关于产品已经出成品,小概率出现单片机异常发热,异常的点在产品各个模块功能看似又挺正常,就是单片机热的厉害的情况,回答者给出了一些可能的原因和解决方法,如做EMC测试和整改,检查外接IO是否加了保护,排除芯片渠道的问题等。