STM32FF407串口发送数据错误,调试时显示缓冲区数据是正确的,请大家帮帮忙看一下,不胜感激!

2019-07-20 22:34发布

附代码如下:
void TData(uint8_t *_usBuf, uint8_t _usLen)   {          uint8_t  Tx_Status, Txread, Txwrite, Txcounter;        uint16_t  i;                       Txread =p_uart.Tx_read;        Txcounter =p_uart.Tx_counter;                      //将待发送数据缓冲区写入UART发送数据缓冲区        for(i=0; i<_usLen;i++)        {                 if(++Txread>= USART1_TX_BUF_SIZE)                 {                         Txread= 0;                 }                                         if(++Txcounter>= USART1_TX_BUF_SIZE)  //判断发送缓冲区数据个数                 {                         Txcounter= 0;                 }                                   p_uart.pTxBuf[p_uart.Tx_write]= _usBuf;                      if(++p_uart.Tx_write>= USART1_TX_BUF_SIZE)                      {                         p_uart.Tx_write= 0;                 }                 p_uart.Tx_counter++;                                       }        USART_ITConfig(USART1, USART_IT_TXE,ENABLE);  

if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)     {             USART_ClearITPendingBit(USART1,USART_IT_TXE);             if(p_uart.Tx_read== p_uart.Tx_write)            //没有新数据             {                     USART_ITConfig(USART1,USART_IT_TXE, DISABLE);                                         USART_ITConfig(USART1,USART_IT_TC, ENABLE);                }             else             {                     USART_SendData(USART1,p_uart.pTxBuf[p_uart.Tx_read]);                     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE == RESET));                                         if(++p_uart.Tx_read>= USART1_TX_BUF_SIZE)                     {                       p_uart.Tx_read = 0;                     }                     p_uart.Tx_counter--;             }}        else if(USART_GetITStatus(USART1, USART_IT_TC) !=RESET){      USART_ClearITPendingBit(USART1,USART_IT_TC);    //清除发送完成标志位      if(p_uart.Tx_read == p_uart.Tx_write)            //没有新数据      {        USART_ITConfig(USART1, USART_IT_TC,DISABLE);   //关闭发送完成中断      }      else             {                     USART_SendData(USART1,p_uart.pTxBuf[p_uart.Tx_read]);                     while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);                                           if(++p_uart.Tx_read>= USART1_TX_BUF_SIZE)                     {                             p_uart.Tx_read= 0;                     }                     p_uart.Tx_counter--;             }}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。