HC32F448串口发送数据丢失最后一个字节

问题:

01 03 80 33 00 08 9D C3 01 03 10 01 11 02 15 03 18 04 13 05 16 06 14 07 17 08 1B 56 FF

当串口发送数据时,结果查看有CRCH传输得到,但是没有输出CRCL。

可能的情况:

(1)时钟误差大,导致数据丢失。

(2)数据接收中断丢失数据。

(3)数据发送未完成。

分析:当前的情况可以完整接收数据。可以排除(2)。

尝试将处理时间加大,仍然出现问题。参考了下面一位博主的解释,明白移位寄存器内还有个字节没有传输完成。

STM32F407串口发送数据缺失最后一个字节-CSDN博客

解决方法:判断状态寄存器(USART_SR)的TXE(发送数据寄存器空)和TEND(发送完成标志)的状态。最终可以得到完整的字节。

while (USART_GetStatus(USART_UNIT, USART_FLAG_TX_EMPTY) == RESET);

USART_WriteData(USART_UNIT, (uint16_t)data);

while (USART_GetStatus(USART_UNIT, USART_FLAG_TX_CPLT) == RESET);

注意:USART_FLAG_TX_CPLT  和USART_FLAG_TX_END都是传输完成标志位,其中USART_FLAG_TX_END是USART.SR的TEND位需要软件清零

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值