嵌入式技术论坛
直播中

fanB

8年用户 1440经验值
擅长:20615
私信 关注
[问答]

串口卡在最后一条语句的while循环里有人碰到过这种情况吗

串口卡在最后一条语句的while循环里,有人碰到过这种情况吗?谢谢。
难道和rtt的串口框架冲突了?

void LCD_INT_N(uint16_t addr,uint16_t n)
{
uint16_t t,crc;
LCD_buff[0]=0x82;
LCD_buff[1]=addr/256;
LCD_buff[2]=addr%256;
for(t=0;t<n;t++)
{
LCD_buff[3+t*2+0]=LCD_DAT.uc[t*2+1];;
LCD_buff[3+t*2+1]=LCD_DAT.uc[t*2+0];;
}
crc=LCD_CRC16(LCD_buff,n*2+3);
LCD_buff[n*2+3]=(uint8_t)(crc/256);
LCD_buff[n*2+4]=(uint8_t)(crc%256);
USART1->DR=0x5a;while((USART1->SR&0X40)==0);
USART1->DR=0xa5;while((USART1->SR&0X40)==0);
USART1->DR=5+n*2;while((USART1->SR&0X40)==0);
for(t=0;t<(n*2+5);t++)
{
USART1->DR=LCD_buff[t];
while((USART1->SR&0X40)==0);
}
}thread.org/ask/question/37c829e885374055.html

回帖(6)

李斌

2022-9-9 11:05:47
你发的命令有回车换行符吗
举报

fanB

2022-9-9 11:05:59
没有,这个函数是向迪文屏发数据
举报

李斌

2022-9-9 11:06:36
while((USART1->SR&0X40)==0);//这是在等待发送结束,你的发送没结束啊
st吗,一直发送没结束这样卡死在这了?
循环发送,你去判断哪个是有问题,我之前遇到过,你去判断 发送数据寄存器 这个为空就行了while((USART1->SR&USART_FLAG_TXE)==0);或者 while((USART1->SR&0x80)==0);
举报

fanB

2022-9-9 11:06:46
我之前也一直判断txe,字符串结束的时候来一个tc,这个用的别人代码,这个问题出现概率不大。
我看到一种方法是,

while((USART1->SR&0X80)==0);//先txe
USART1->DR=LCD_buff[t];
while((USART1->SR&0X40)==0);//再tc
举报

李斌

2022-9-9 11:06:54
先txe应该就可以了,你试试
1.jpg
举报

李斌

2022-9-9 11:07:07
啊前面没说,先判断是缓冲器空了在传,这样就没事了,应该后面不用再判断发送完成了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分