1、FlyMcu
FlyMcu串口下载,同STC-ISP(51单片机下载)。
使用步骤:
1、STM32的USART1通过串口转usb连接到电脑
2、通过keil生成Hex、bin文件
生成bin、hex文件可参考
keil生成bin文件(简单)-CSDN博客
创建的Hex文件在工程的Object中。
3、进行烧写
选择对应的串口和波特率
然后选择文件,可选择hex(此软件不能烧写bin文件)文件。
跳线帽配置boot0 boot1为0 1。然后重新复位
然后点击开始编程下载:
将跳线帽改成0 0 ,重新上电就能自动运行。
系统存储区解释:
系统存储区(0x1ffff000)的bootload为引导烧写区域(内部为自举程序),ST公司指定了特定的通信接口进行引导烧写。在更新过程中,通过自举接口USART1,接收USART1数据,刷新到程序存储区flash中0x08000000。相当于手机的刷机模式,电脑的pe系统。进行辅助自我更新。
程序一键下载电路:
可使用电路自动控制Boot0引脚和RST复位引脚的电平,使得在上电烧写程序时自动改变,烧写完成后恢复。
可使用usb转串口芯片CH340G的RTS、CTS和DTR、DSR(4个流控引脚,我们可以当作普通的GPIO使用),RTS和DTR为输出引脚,可以用来控制STM32的Boot0和RST(需要外围的控制电路)。
配置的高低电平在CH340G会应用
另外可使用编程后自动运行,运行一次,此次不需要修改跳线帽。同时不能使用编程到flash时写选项字节。这次运行为手动指令。重新上电还是需要修改跳线帽位置。运行成功会显示成功从0x0800000运行。
其他功能(boot0 boot1 在 1 0 模式下):
1、读flash内的程序,需要在boot0 boot1 在 1 0 模式下,读取的是STM32系统存储区从0x08000000开始的bin(无地址信息,hex文件有地址信息)程序。
2、清除芯片,需要在boot0 boot1 在 1 0 模式下,将flash内的程序全部擦除为ff。
3、读取期间信息可以将以下信息读出。
4、选项字节设定
- 读保护字节,会防止程序被读出,开启后也不能下载程序,可以解除读保护(解除时会清空数据)
- 硬件选项字节,了解使用
- 用户数据字节,自由使用的字节,这些字节只能在上位机例如此软件中修改。
- 写保护字节,可以对flash的每几个页进行单独写保护,例如想对flash最后几个字节存储固定数据,不想被修改,那么可以写保护。但是如果对写保护字节的程序进行烧写覆盖,会报错。
配置完成后选择采用设置
然后勾选编程到flash时写选项字节。这样在烧写程序时可顺便对选项字节设定。
2、STLink Utility
STLink下载,需要进行安装,也需要使用STLINK的驱动。
使用:
1、连接,使用STLINK,无需修改跳线帽
2、保存当前设备程序
3、 断开连接和擦除芯片
4、烧写程序
烧写后程序自动运行,最后有选择,默认的可以不更改。
5、选项字节配置,target-option bytes
内容和flaymcu相同。灰色的选项表示芯片没有此配置。配置完成后使用Apply配置应用,可直接更改选项字节。
6、重启后进行固件更新
重启(下电)后点击ST-LINK-update,连接后看到当前STLINK固件版本和更新固件版本
点击更新
更新完成!
3、一键下载电路
1、CH340芯片特点
- 全速USB设备接口,兼容USBV2.0。
- 仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口。
- 计算机端Windows操作系统下的串口应用程序完全兼容,无需修改。
- 硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps~2Mbps。
- 支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS。
- 通过外加电平转换器件,提供RS232、RS485、RS422等接口。
- CH340R芯片支持IrDA规范SIR红外线通讯,支持波特率2400bps到115200bps。
- 内置固件,软件兼容CH341,可以直接使用CH341的VCP驱动程序。
- 支持5V电源电压和3.3V电源电压。
- CH340C/N/K/E/X/B内置时钟,无需外部晶振,CH340B还内置EEPROM用于配置序列号等。
- 提供SOP-16、SOP-8和SSOP-20以及ESSOP-10、MSOP-10无铅封装,兼容RoHS
2、CH340系列芯片
3、CH340引脚定义
4、一键下载电路原理
STM32下载,在NRST复位后BOOT0 = 1高电平即可进行烧写。默认断开不生效。
DTR#和RTS#都是输出类型,FlyMCU(一键下载工具),会控制CH340这两个引脚的高低电平状态,通过控制DTR#和RST#这两个引脚的高低电平状态,从而控制STM32的BOOT0 和 RESET。选择DTR的低电平复位,RTS 高电平进 BootLoader。
我们需要注意一点:CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择“DTR的低电平复位,RTS高电平进BootLoader”,CH340G IC在实际操作时引脚的变化为“DTR#拉高,RTS#拉低”,即软件设置和实际情况是取非的,相反的。
RST#和DTR#是低电平有效,因此没有动作的时候都是保持高电平的。
控制流程:
初始:下载软件配置DTR的低电平复位,RTS 高电平进 BootLoader。电路中DTR#、RST#默认高电平 |
启动:因为CH340C的DTR和RST发送为非门。DTR#维持高,RST#拉低。DTR#高电平,Q1的b-e有电压差(电流存在),那么Q1的c-e导通,NRST接到RST#线为低电平。RTS为低电平,Q2的c-b有电压差(电流),Q2的c-e导通,BooT0为高电平。 |
复位:NRST接到RST#线为低电平,单片机复位。BooT0持续为高电平。 |
100ms后复位结束,改变电平:DTR#电平跳变(拉低),RST#不变(拉低)。此时复位结束。单片机启动后4个上升沿锁定boot0电平。为1,启动到系统存储bootload。 |
下载结束:RST#先变成高电平DTR#在变成高电平。RST#先变成高电平,BOOT0=0,退出烧写模式。DTR#在变成高电平,Q1的b-e无电压差,不在复位。烧写结束,重新上电即可使用。或者烧写时软件勾选烧写完跳转运行。 |
注:下载结束时之所以RST#先变成高电平DTR#在变成高电平。是防止DTR#先变成高电平时,RST#仍然低电平导致复位,再次进入bootload。 |
信号时序图:
三极管工作原理
其他辅助电路:
NRST稳定高电平,按钮控制复位
STM32晶振电路
复位后手动高电平BOOT0按钮,以及供电LED显示
BOOT1拉高,平时不用的引脚持续拉高
外部晶振
USB插头和SWD烧写口插头
参考:
看了一些博主的分享经验以防自己以后碰到先放在下面:
- 目前最稳定的情况是由外部USB接口的5V供电(防止RTS有2.5V的电,防止BOOT0不能回0,稳定供电使CH340芯片引脚电平稳定)。
- CH340G,需要加12MHz的晶振,否则无法正常工作;
- 另外有CH340T等系列是不需要增加晶振的。而且CH340有两种供电方式,上面我提供的是5V供电,还可以3.3V供电,区别是3.3V的V3脚不需要外接电容,而是要直连到3.3V。
- 对于CH340转换成的USB接口,有些电路会在D+那里加一个1.5K上拉到3.3V,目的应该是将USB口变为高速口,但我用软件查看了,无论加不加上拉电阻,这个USB口都是全速口。
- 这两周在查找一个问题,就是MPU6050在我两块开发板上面展现出来的速率不一样,自己画的板子数据很慢,串口打印到虚拟机很不灵敏,相比之下买的开发板很灵敏,我对调了STM32都解决不了问题,对比了电路怀疑是CH340的区别,然后对CH340有了更深的认识,最后发现是我自己画的板子STM32的晶振旁路电容全都是104的,对于一个硬件工程师来说,真是很低级的错误,但也说明,电容用大可以正常工作,但是运算速率会变慢。