Stm32的bootloader无法使用问题
用不了一键下载电路
首先简单地对此处涉及的内容进行介绍:如果stm32的BOOT0引脚为低电平时,系统从FLASH中启动,而如果BOOT0引脚为高电平,且BOOT1为低电平时,系统从自举程序(bootloader)中启动.
我在自制照相机设计中加入了ISP一键下载电路,如下图所示,当CH340-RTS拉低,也就是Q1的基极为低电平,同时Q1的发射极接3V3,此时Q1导通,故集电极的BOOT0被拉高;CH340-RTS保持低电平不变,当CH340-DTR被拉高,此时Q2导通,集电极电平被发射极拉低,也就是NRST引脚拉低,单片机复位(此时BOOT0为高电平)进入自举程序.
此处设计与商家开发板资料中基本一致(除了没有在D1和NRST网络中添加1K的限流电阻),但是当我用Flymcu上位机却无法读取到芯片的信息,而使用ST-LINK能正常烧录也可以调试,说明芯片能正常的工作,并且我在代码中添加了printf重定向,测试串口正常工作,结果是串口助手能够正常显示打印字符串.
几天的原因排查
开始我觉得可能是三极管坏了,于是拿万用表去排查三极管(将万用表调至二极管挡,NPN:黑笔放到基极,红笔放到另外两极,PNP:红笔放到基极,黑笔放到另外两极,如果此时示数为±0.7V,那么三极管未损坏,如果为0V则烧了),测出来两个三极管都正常,问题不在三极管这.
在网上看了几篇博客之后,我认为可能是单片机没有正确的复位,因此用示波器去观察NRST,如下图所示复位的脉冲约100ms左右,而单片机复位信号仅需要3ms,那么问题也不出在这.
有没有可能是单片机虚焊了?我打开相机并设置为微距模式,仔细观察,发现有个引脚(VDD_2)翘起来的,然后赶紧拿烙铁上锡.我以为此时问题就能解决了,但是事实仍是无法识别.
到这里,我开始怀疑是芯片的原因,在keil中显示为0X1BA01477,国产芯片一般是"0X2BA01477",那么这应该不是国产打磨的芯片.我怀疑有可能是翻新的芯片,所以还是焊了新的芯片,但是问题依旧没有解决.
)
CH340C的供电
上网搜索了很多帖子,几乎都尝试了一遍,但是并没有解决问题.没有头绪的我突然想起在还没有测试RX,TX引脚的电平,我拿示波器先测了单片机的TX引脚,显示为3.4V,这没有问题,然后又勾了一下RX引脚(CH340的TX引脚),电平竟然为4.8V左右,显然这是不正常的.
因此我上网搜了一下CH340C的工作方式,如果是5V供电那么需要"V3"引脚串电容接在GND上,而3.3V供电需要将"V3"引脚接在VCC上.我又重新看了下原理图,使用的供电电压是5V,所以CH340的TX输出应该也是5V,超出了单片机正常工作电压.
总结
实际上stm32能进入bootloader,但是由于CH340C是5V供电,导致无法正常通信,所以会无法识别芯片信息.