【问题提出】串口通信出现乱码
【原因分析】
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
——回复可见内容——
回复
| 有奖活动 | |
|---|---|
| 这个春节你犒赏自己什么了?分享你的故事,有奖征集 | |
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
我要赚赏金打赏帖 |
|
|---|---|
| Gravity:中英文语音合成模块V2.0及其串口控制被打赏¥24元 | |
| 全彩色度变化图的绘制被打赏¥27元 | |
| 【FreeRtos】FreeRtos任务栈的生长方向管理方式被打赏¥20元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LVGL添加输入设备:EC11旋转编码器被打赏¥39元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LVGL被打赏¥33元 | |
| 空气质量检测器设计与实现被打赏¥24元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】LWIP进行UDP、TCP、HTTP、MQTT功能联合测试被打赏¥41元 | |
| 【瑞萨RA8D1 LVGL/LWIP评测】RA8D1部署FreeRTOS+LWIP被打赏¥36元 | |
| RTOS怎么选?让我来给你答案!被打赏¥15元 | |
| 【S32K3XX】Flash驱动使用被打赏¥26元 | |
我要赚赏金
