Bryan 发表于 2018-1-23 22:49:51

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);
          
                      }
                           }
                   }
               
}



す疯Ⅱ恒す 发表于 2018-1-24 09:59:46

检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切换到TX,发送数据完之后切换会RX。中断只接收数据即可。

Bryan 发表于 2018-1-24 13:25:05

す疯Ⅱ恒す 发表于 2018-1-24 09:59
检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切 ...

感谢回复,第一次用。
从细节上,看各种资料,比如要发N个数据,N-1个利用TXE标志发,最后一个用TC标志发,直接完成标志清零!
不知道你做过吧? 有验证过的代码,可以分享一部分!谢谢!

Bryan 发表于 2018-1-24 15:45:58

す疯Ⅱ恒す 发表于 2018-1-24 09:59
检测到TC发送完成后再切换到RX吧。中断程序不用那么复杂,平常让主机处于RX状态,如果需要发送数据了,就切 ...

感谢答复!
这个可能跟具体应用有关系!

す疯Ⅱ恒す 发表于 2018-1-25 09:59:22

Bryan 发表于 2018-1-24 13:25
感谢回复,第一次用。
从细节上,看各种资料,比如要发N个数据,N-1个利用TXE标志发,最后一个用TC标志发 ...

看你是怎么发的,如果你是一个个发的,你可以前N个都利用TXE检测发,只需再最后切换模式前检测一下TX即可。
页: [1]
查看完整版本: STM8 UART半双工 TX到RX的可靠转换