


【问题提出】串口通信出现乱码
【原因分析】
1.波特率或者RCC时钟没设置对(最常见)
2.USART配置有问题(本次遇到的)
3.串口调试软件或电脑端串口有问题
4.MAX232芯片坏掉或虚焊
【解决方法】
1.程序和调试助手的波特率设置相同,如都是9600,;RCC时钟貌似可以不配置,配置的话有现成代码,仔细研究一下,添上注释就行。
2.USART的配置出现错误的地方很多,只谈本次遇到的。
之前以为串口下载程序时要使用Even选项,所以错把USART也设置成Even,如下:
USART_InitStructure.USART_Parity = USART_Parity_Even;
应该为:
USART_InitStructure.USART_Parity = USART_Parity_No;
//无奇偶校验
3.换几个最新的串口调试助手试试,换个USB口(针对笔记本用户,使用USB转串口线),在设备管理器中查看COM口状态。
4.最好买进口MAX232芯片,质量可靠,国产水货不经用,不要图便宜;虚焊的话,用烙铁补焊一边就行,这个可能性比较小
以上是解决串口可以联机但数据乱码的问题,原因可能不止上述,要具体问题具体分析,最好能有明白的人给你指点一下。在此感谢hanshuyujifen2指正!

先上几张图:



程序实现的功能:电脑端通过串口发数据给STM32,STM32接收完数据后,再发送给电脑端,通过串口调试助手观察,实现了STM32接收和发送数据的功能。另外,程序可采用两种方式工作,查询和中断方式。


主程序:main.c
#include <stm32f10x.h>
#include <stdio.h>
#include"USART.h"
extern int Flag; // 是否使用中断方式
int main()
{
u8 temp;
RCC_Configuration(); //RCC时钟初始化
GPIO_Configuration(); //GPIO初始化
USART_Configuration(); //USART初始化
if(Flag)
NVIC_Configuration(); //中断初始化
while(1)
{
GPIO_ResetBits(GPIO_LED, DS1_PIN); //控制LED亮灭,指示工作正常
Delay(0x3FFFFF);
GPIO_SetBits(GPIO_LED, DS1_PIN);
Delay(0x3FFFFF);
if(!Flag)
{
while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); //等待接收完毕
temp = USART_ReceiveData(USART1); //接受一个字节
Uart1_PutChar(temp); // 把接收到的字符发送出去
}
}
return (0);
}
回复一下,希望多多支持!
USART.c
——回复可见内容——


回复
打赏帖 | |
---|---|
汽车+汽车地线之间连接处理被打赏20分 | |
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 |