21ic电子技术开发论坛
标题:
串口会出现乱码
[打印本页]
作者:
feiqi1
时间:
2020-11-8 17:01
标题:
串口会出现乱码
程序需要用到串口(和GSM模块通信用),程序得一直跑着,但是程序跑着跑着 串口就会出现乱码或者干脆串口死了,但是LCD显示什么的都正常
U0CTL = SWRST;// Set the reset bit to hold inactive
if(Baudrate==9600)
{
#if UCLK==SMCLK_8M
UBR00 = 0x41; // 32k/2400 - 13.65
UBR10 = 0x03; // 32k/2400
UMCTL0 = 0x00; // modulation
UTCTL0 |= SSEL1+SSEL0; // UCLK = SMLK
#else
//程序 运行一段时间后(有时几天 有时个把月),那个串口就死了
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00;
UMCTL0 = 0x4A;
UTCTL0 |= SSEL0; // UCLK = ACLK 选择ACLK,在LPM3.可激活
UTCTL0 &=~SSEL1;
#endif
}
else if(Baudrate==57600)
{
U0BR0 = 0x8A; // Prescale divisor = 0x008A
U0BR1 = 0x00;
U0MCTL = 0xFF; // Modulation 11111111
UTCTL0 |= SSEL1+SSEL0; // UCLK = SMLK
}
U0CTL = SWRST+CHAR; // P=none, 8 bits, 1 stop
U0RCTL = 0; // wake on all correct rx
ME1 |= URXE0 +UTXE0; // Enable the module
P2SEL |= 0x30; // P2.4,5 special function
P2DIR |= 0x10; // P2.4 TX output
P2DIR &= ~0x20; // P2.5 RX input
U0CTL &= ~SWRST; // Release the UART to operation
IE1 |= URXIE0; // RXINT enable
作者:
androidbus
时间:
2020-11-8 17:05
检查程序 正常的话不用重新初始化串口。
作者:
androidbus
时间:
2020-11-8 17:06
检查程序 正常的话不用重新初始化串口。
作者:
litengg
时间:
2020-11-8 17:10
这是你的初始化函数,请问你在主函数里的发送程序呢?
作者:
shashaa
时间:
2020-11-8 17:14
程序中有没有进入低功耗,SMCLK选的是哪一个时钟源,DCO还是高频,波特率是多少?
作者:
xia00
时间:
2020-11-8 17:18
用的是DCO,通过 外部 32768 倍频到8M的,串口时钟选的是 SMCLK
作者:
hfdy01
时间:
2020-11-8 17:21
有人 发现 上面的配置 是否有 问题呢?
作者:
CallReceiver
时间:
2020-11-8 17:24
U0CTL = SWRST+CHAR; // P=none, 8 bits, 1 stop
会是这里的问题吗
作者:
boy1990
时间:
2020-11-8 17:27
看代码看了这么长时间,想不明白会出这问题,总觉得在main函数内定义就好了
作者:
sourceInsight
时间:
2020-11-8 17:30
楼主看下你的监测线的,有可能是接触不好的
作者:
bbapple
时间:
2020-11-8 17:32
楼主是什么产品?会不会有震动,造成串口接触不好了。
作者:
handleMessage
时间:
2020-11-8 17:36
主要是波特率的误差, 一般情况下 如果要保证UART通讯正常
作者:
handleMessage
时间:
2020-11-8 17:38
采用分桢模型通讯,而且每帧不要过长,这样UART接收/发送会消除波特率带来的误差
作者:
zhouhuanの
时间:
2020-11-8 17:41
如果连续不停的收发,也都还是会出现错误的。 硬件有误差。
欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)
Powered by Discuz! X3.5