单片机第一次点灯各种可能遇到的问题

单片机第一次点灯各种可能遇到的问题

前两天兴致勃勃买了块STM32,开始给单片机写程序。虽说大一开学就学了C语言,但还是踩了不少坑。

在这里写写可能出现的问题。

1.看错调试器了

嗯,大概是看视频教程的时候,发现视频教程的调试器和自己的除了颜色其他的都一样,于是毫不犹豫地为调试器一栏选上了ST-Link。多次尝试发现电脑就是打不上ST-Link的驱动,遂质问店家,答曰:

1
亲亲,咱们家的是DAP调试器,不需要驱动更方便哦!

另:某人的嘲讽

好嘛,下次注意。

2.没有正确的连接系统板和下载器

简单来说,下载器上面的接口排列顺序和系统板上面的是不一样的。也就是说,你不可能在没有分开四条杜邦线的前提下把正确的接线。此外。如果你真的接错了,那么症状是:单片机闪灯,下载器能够被识别到,但识别不到单片机。

3.没有把所有的定义全部放在函数开头

这是ChatGPT们经常犯的错误。请看下面代码:

1
2
3
4
5
6
int main(void)//注意,main函数最好是void型
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;//这里定义结构体要放在最前面
for (int i = 0;i < 99999;1++)//在这里又定义了整型i,也要把int i放在最前面
}

使用AI生成的代码时,常常是这些使得代码不能通过编译。

4.缺少库文件

主要症状是引入头文件后任然显示函数未定义。这个时候就应该检查一下是不是添加了库文件,储存库文件的路径有没有添加到工程里,以及:
千万不要只往文件夹里面添加了”xxx.h”,忘了添加”xxx.c”!!!s

5.函数结尾没有空一行

1
2
3
......//省略上面的很长的部分
}
//在这里空至少一行

嗯,没空就会报错,疯了。😥

到这里你的灯应该亮起来问题不大了,这个时候你应该会觉得LED太亮了想试试PWM

6.呼吸灯不呼吸了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(void) {
int i = 0, j=0;
SystemInit();
TIM2_PWM_Init();

while(1) {
// 逐步调整亮度
for(i = 0; i <= 1000; i++) {
setPWMBrightness(i);
for(j = 0; j < 10000; j++); }// 延时
for(i = 1000; i >= 0; i--) {
setPWMBrightness(i);
for(j = 0; j < 10000; j++); // 延时
}
}
}
//在每个亮度下还要维持一小段时间

7.UART串口没动静

当你的CH340驱动安装好了,串口线也插好了,但是串口助手没有任何反应的时候,你应该检查一下:
你是不是把串口初始化的代码写在了main函数的最后,而不是最前面。这个时候你应该把串口初始化的代码放在main函数的最前面。
此外,最坑爹的是,你是不是把TXD和RXD接反了。你的TXD应该接到单片机的RXD上,RXD接到TXD上,而不是TXD接到TXD上。

先写到这里,要补充了再加。