PIC24F32KA304-关于UART轮训发送数据出现数据发送不全问题的解决

本文介绍了在使用PIC24F32KA304单片机进行UART通信时遇到的数据发送不全问题,分析了问题原因在于错误地轮询UxSTA寄存器的UTXBF和TRMT位。文中指出,当TRMT为1且UTXBF为1时,才表示UART发送缓冲器未满,可以安全写入新数据。错误的轮询方式可能导致数据丢失,提出应仅依赖TRMT位来判断何时发送新数据。
摘要由CSDN通过智能技术生成

出现问题的代码:

while(U2STAbits.UTXBF && !U2STAbits.TRMT) continue;

代码中涉及到了两个寄存器:UxSTA<9>UTXBF:UARTx发送缓冲器满状态位(只读)和UxSTA<8>TRMT:UARTx发送移位寄存器空位(只读)

数据手册对这两个寄存器位的描述为:

UTXBF:UARTx 发送缓冲器满状态位(只读)
1 = 发送缓冲器满
0 = 发送缓冲器未满,至少还可写入一个字符
TRMT:UARTx 发送移位寄存器空位(只读)
1 = 发送移位寄存器为空,同时发送缓冲器为空(上一次发送已完成)
0 = 发送移位寄存器非空,发送正在进行或等待发送

对于PIC24F32系列的PIC单片机的UART,都具有一个4级深度的FIFO加一个发送移位寄存器(UxTSR),组合起来实际上就有五级深度。


第一次开始发送的时候,由于UxTSR寄存器为空,这样传输数据到UxTXREG寄存器会导致该数据立即传输到UxTSR,但是在第二次及以后的发送则不会。

如果采用上述轮询方式同时查询上述两个寄存器位的话,首先

  • TRM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值