本帖最后由 skw168 于 2019-10-4 21:55 编辑
1.系统:使用IO模拟串口通信发送数据给电脑的串口助手//
2.设定参数:
波特率:4800 ;8位数据位,无校验,1位停止位
3.问题点:
在使用串口连续发送某个数据时,发现电脑接收端会出现错误数据
比如连续发送0x41,电脑接收的数据却为0x50,
目前推测是因为串口接收端没有很好的识别到起始位和停止位,
所以造成了数据接收错误
因此在这里引入以前忽视的一个知识点:1位停止位,1.5位停止位和2位停止位
目前我改成直接使用2位停止位,让接收端能够更好的识别到起始和停止位,避免和数据为混淆
下面是有问题的程序代码,此程序在中断里面执行,每208us执行一次
buff1 = 'A';
switch(count_timer2)
{
case 0:
{
PA4 = 0;
count_timer2 = 1;break;
}
case 1:
{
count_timer2 = 2;
if(buff1 & 0x01) PA4 = 1;
else PA4 = 0; break;
}
case 2:
{
count_timer2 = 3;
if(buff1 & 0x02) PA4 = 1;
else PA4 = 0; break;
}
case 3:
{
count_timer2 = 4;
if(buff1 & 0x04) PA4 = 1;
else PA4 = 0; break;
}
case 4:
{
count_timer2 = 5;
if(buff1 & 0x08) PA4 = 1;
else PA4 = 0; break;
}
case 5:
{
count_timer2 = 6;
if(buff1 & 0x10) PA4 = 1;
else PA4 = 0; break;
}
case 6:
{
count_timer2 = 7;
if(buff1 & 0x20) PA4 = 1;
else PA4 = 0; break;
}
case 7:
{
count_timer2 = 8;
if(buff1 & 0x40) PA4 = 1;
else PA4 = 0; break;
}
case 8:
{
count_timer2 = 9;
if(buff1 & 0x80) PA4 = 1;
else PA4 = 0; break;
}
case 9:
{
count_timer2 = 0;
PA4 = 1;
//cnt_uart_en = 0x02;
}
}
|