串口通信数据覆盖问题

在使用串口通信的液晶项目中,遇到数据覆盖问题导致通信异常。当RXNE中断标志为1时,如果在接收期间液晶继续发送数据,原始数据将被覆盖。解决方案包括:1.取消液晶向主控返回的数据;2.采用DMA以一帧一帧处理接收数据,确保数据完整处理后再接收新的数据。
摘要由CSDN通过智能技术生成

问题开头:
在使用一款通过串口通信的液晶,具体的方式是这样的,主控向液晶发送字符串,然后液晶向主控返回o,k,\r,\n四个字符,只有按这个顺序接收到这四个字符,才能算是一次完整且正常的通信,只要主控接收期间错了一个字符就会被卡死。

问题原因:
我的代码是在串口中断里面进行主控的接收及判断,在这其中有一个标注位RXNE,当它为1的时候表示收到数据,可以读出。但如果在RXNE仍为1期间,液晶仍然向主控发送数据的时候,原先的数据就会被覆盖,导致通信不正常。

问题解决
方法一:这个方法比较粗暴,直接省掉主控发送数据后,液晶向主控返回的数据。意思就是只让主控给液晶发送数据,不再需要液晶向主控返回数据。

方法二:这个方法就比较合理安全,让主控用DMA来接收液晶返回的数据。使用的是DMA的正常模式,也就是一帧数据一帧数据的处理,当我主控接收到数据后,就先不接收数据,当处理完接收到的数据后,再开启数据的接收。

DMA代码的配置

void dma_init(void)
{
   
 DMA_InitTypeDef  DMA_InitStructure;
 
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); 
 
 DMA_DeInit(DMA1_Channel3);
 DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值