各位大侠:
最近做一个STM8 UART半双工,发送自定义协议控制下位控制器,控制器正常有答复,测试发现数据发送和回发不稳定,
考虑综合利用TXE和TC标志位,下面中断处理程序,大家看看是否有问题,是否能实现TX到RX的可靠转换。
- INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17)
- {
- /* Write one byte to the transmit data register */
- // UART1_SendData8(TxBuffer1[IncrementVar_TxCounter1()]);
- if(Uart1_Send_Complete)
- {
- if(UART1_GetITStatus(UART1_IT_TC)==SET)
- {
- // Send last data
- UART1_SendData8(Command_Data_From_Controller_Buffer1[Uart1_Send_Counter]);
- 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]);
- 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);
-
- }
- }
- }
-
- }
复制代码
|
评分
查看全部评分
感谢回复,第一次用。
从细节上,看各种资料,比如要发N个数据,N-1个利用TXE标志发,最后一个用TC标志发,直接完成标志清零!
不知道你做过吧? 有验证过的代码,可以分享一部分!谢谢!
感谢答复!
这个可能跟具体应用有关系!
看你是怎么发的,如果你是一个个发的,你可以前N个都利用TXE检测发,只需再最后切换模式前检测一下TX即可。