【问题提出】串口通信出现乱码
【原因分析】
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
——回复可见内容——
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |