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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
DAY_AND_DAY
1楼-- · 2019-07-21 01:02
谢谢大家了,问题出在这两个判断语句上。是我对中断发送数据原理理解的太不透彻了!
[mw_shl_code=applescript,true]  if(++Txread >= USART1_TX_BUF_SIZE)
                {
                        Txread = 0;
                }        

                if(++Txcounter >= USART1_TX_BUF_SIZE)  //判断发送缓冲区数据个数
                {
                        Txcounter = 0;
                } [/mw_shl_code]

DAY_AND_DAY
2楼-- · 2019-07-21 01:37
 精彩回答 2  元偷偷看……
xuande
3楼-- · 2019-07-21 04:53

错误长什么样?


DAY_AND_DAY
4楼-- · 2019-07-21 08:05
 精彩回答 2  元偷偷看……
DAY_AND_DAY
5楼-- · 2019-07-21 14:02
本帖最后由 DAY_AND_DAY 于 2016-4-27 11:22 编辑

第一幅图是调试时,缓冲区的数据;
第二幅图是串口调试软件显示的数据。
望大侠能够多多指点!!!
止天
6楼-- · 2019-07-21 19:41
如果你用的是发送中断
while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
这句话就应该去掉。

还有上边那句
发送中断本来就是为了节省死等时间的

一周热门 更多>