我之前买过一个STM32最小程序单片机,原来下载51单片机都是使用串口方式,这里也通过串口方式烧录STM32单片机,还需要借助一个USB TO TTL工具。
USB TO TTL工具类似一个U盘工具,只不过它另一端是接线,一般电脑会自动安装驱动,如果插上电脑,串口号识别不了,那么就需要安装CH340驱动。
这个USB TO TTL工具,这里需要3V3,RXD,TXD,GND四根接线。分别接上单片机的3V3,A9,A10,GND。
单片机上还有一个需要设置,就是BOOT0,跳帽要接到1那一侧,BOOT1接到0那一侧,如下所示:
A9,A10是给串口收发数据的。这里简单焊接了一下。
下载程序到STM32单片机还需要一个FlyMcu程序,这个程序很小,很多地方都可以下载到,打开之后,界面如下所示:
①串口COM6是单片机连接USB TO TTL,插上电脑之后自动识别的,波特率也是默认的。如果这里没有识别,检查CH340驱动是否安装。
②第二个是我们的点灯程序,这里是编译之后的hex文件。
#include "stm32f10x.h"
void Delay()
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++);
}
void LED_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
}
int main(void)
{
LED_Config();
while(1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13);
Delay();
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
Delay();
}
}
最小程序单片机,有一个LED是电源管理的,还有一个是连接PC13端口的,这里的程序就是用来让PC13端口输出高低电平并延时,达到闪烁效果的。程序使用了标准库。
③ 勾选上编程后执行,也就是下载之后执行。
④ 选择第四个选项:DTR低电平复位,RTS高电平进BootLoader
⑤ 开始编程,点击之后就是下载程序到单片机。
如果下载成功,那么单片机程序运行,绿色的LED就会闪烁。
值得注意的是,这里程序下载之后,马上执行,没有额外操作,不需要将BOOT0切换到0那一侧,也不需要按reset按键。(断电之后,重新上电,要运行程序,需要先将BOOT0切换到0,然后按reset)
这里下载程序是正常的,所以操作可能看不出什么问题,但是有时候,点击开始编程,单片机并没有下载程序,FlyMcu工具里面显示一直在连接中,最后失败。这种硬件问题排查,非常痛苦,因为我们不确定哪里完全没问题,只能不断检查这个设置,那个配置。我这里也出现过这样的问题。我开始怀疑是串口线接错了,但是反复确认,不是线接错了。又怀疑BOOT0,BOOT1跳线帽设置错误,反复更改,之后还按下reset按键,依旧没有改变。最后又把问题转到FlyMcu工具的设置上,其实这里面唯一可能出错的就是DTR,RTS电平设置 下拉选择。最后,把问题放在了单片机排针上,我本来是用了排针,但是没有焊接每一个针脚,只是让他固定住就行了,3后来卸下排针,直接用公母杜邦线连接A9,A10,竟然烧录成功,而且程序运行正常。最后又把排针装上,把A9,A10口焊接,再次验证,又烧录成功了,这次的教训就是排针有可能也是不导通的,虽然插入了对应的电路板孔中。