以下的问题和测试我用的是stm32f407zgt6(不知道是哪个家的板子,某多野板)的板子。串口用的是usb转串口(ch340g/ch340c)
一.串口助手无显示一般是串口接错线了(认真检查,因为我刚学还不会的时候也是找不到没显示的原因,最后发现是接错线了)。要注意的是串口四根线(3v3,tx,rx,GND)都要相应连接到板上。同时串口和stlink(我用的是这个如果是其他下载器的也一样)都要插到电脑上。
二.如上图所显示,写一段向串口助手发送'A'的程序,但是串口助手一直显示问号。
1.先试试第一种情况能不能解决,因为板子不兼容的问题,我们需要在你写的串口通信的.c文件下写入几行代码。
(为了方便大家解决问题以下是图片上的代码)
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
int _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
USART1->DR = (u8) ch;
return ch;
}
#endif
2.假如上面添加这段代码后还是无法解决,我们可以继续找到system_stm32f4xx.c在370行向下看可以看见有很多的不同型号板子的系统时钟设置
如果是stm32f40_41xxx系列的就在其systemcoreclock=168000000的下面一行重新写入一行新的(如图第372行)
#define PLL_M 8
定义完后重新编译后下载进板子就正常了
(可能有人会说重新定义的第372行有warning,这个是不影响的,不必在意)(野板都会有比较多的问题,在里是系统时钟和外设时钟不一致会出现这种问题)
(这也是我自己学的时候遇到的问题)(希望能帮到大家)