一. TC和TXE的置位

相同点:TC和TXE软件清零,硬件置1
不同点:发送单个字节,需要等待TXE被置1
发送多个字节,发送过程中,需要等待TXE被置1,最后一个字节需要等待TC置1
二. 两个配合使用
TXE用在MODBUS RTU数据帧的发送过程中。
TC用在MODBUS RTU数据帧最后确认。
MODBUS RTU 需要确定当前数据帧发送完成后,才能发送下一位数据帧,用TC确认数据帧全部发送完成。
两者都要使用。
三. 代码
void RS485_byte(unsigned char d) //485发送一个字节 TXE
{
RS485_RT_1; //将其设置位发送模式
USART_SendData(USART1, d); // 发送一个字节
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET); // 等待TXE置1
RS485_RT_0; //将其设置为接收模式
}
// 发送数组
void RS485_SendDatas(unsigned char *datas, int len)
{
int i;
RS485_RT_1; //发送模式
for (i = 0; i < len; i++)
{
RS485_byte(datas[i]);
}
/* 等待发送完成 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET);//等待TC置1
RS485_RT_0; //接收模式
}