STM8 UART半双工 TX到RX的可靠转换
各位大侠:
最近做一个STM8 UART半双工,发送自定义协议控制下位控制器,控制器正常有答复,测试发现数据发送和回发不稳定,
考虑综合利用TXE和TC标志位,下面中断处理程序,大家看看是否有问题,是否能实现TX到RX的可靠转换。
INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
{
/* Write one byte to the transmit data register */
// UART1_SendData8(TxBuffer1);
if(Uart1_Send_Complete)
{
if(UART1_GetITStatus(UART1_IT_TC)==SET)
{
// Send last data
UART1_SendData8(Command_Data_From_Controller_Buffer1);
Uart1_Send_Complete=0;
//UART1_REC_START_CHECK=1;
UART1_ITConfig(UART1_IT_TXE, DISABLE);
UART1_ITConfig(UART1_IT_TC, DISABLE);
// Transfer to UART1 REC STATE
ENABLE_UART1_REC;
Uart3_Rec_Counter=0;
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
//UART3_ITConfig(UART3_IT_RXNE_OR, ENABLE);
}
}
else
{
if(UART1_GetITStatus(UART1_IT_TXE)==SET)
{
UART1_SendData8(Command_Data_From_Controller_Buffer1);
Uart1_Send_Counter++;
if (Uart1_Send_Counter >= NbrOfDataToTransfer2)
{
//Uart1_Send_Counter=0;
// NbrOfDataToTransfer2=0;
Uart1_Send_Complete=1;
// UART1_ITConfig(UART1_IT_TXE, DISABLE);
//while (UART1_GetFlagStatus(UART1_FLAG_TXE) == RESET);
//while( UART1_GetFlagStatus(UART1_FLAG_IDLE) == RESET);
}
}
}
}
检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切换到TX,发送数据完之后切换会RX。中断只接收数据即可。 す疯Ⅱ恒す 发表于 2018-1-24 09:59
检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切 ...
感谢回复,第一次用。
从细节上,看各种资料,比如要发N个数据,N-1个利用TXE标志发,最后一个用TC标志发,直接完成标志清零!
不知道你做过吧? 有验证过的代码,可以分享一部分!谢谢! す疯Ⅱ恒す 发表于 2018-1-24 09:59
检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切 ...
感谢答复!
这个可能跟具体应用有关系! Bryan 发表于 2018-1-24 13:25
感谢回复,第一次用。
从细节上,看各种资料,比如要发N个数据,N-1个利用TXE标志发,最后一个用TC标志发 ...
看你是怎么发的,如果你是一个个发的,你可以前N个都利用TXE检测发,只需再最后切换模式前检测一下TX即可。
页:
[1]