STM32串口发送数据给PC机数据不一致

2019-07-14 18:10发布

int main(void)
{
           #ifdef DEBUG
           debug();
           #endif
  
           /* System clocks configuration ---------------------------------------------*/
               RCC_Configuration();
          /* NVIC configuration ------------------------------------------------------*/
             NVIC_Configuration();
         /* GPIO configuration ------------------------------------------------------*/
            GPIO_Configuration();
  
         /* USARTconfiguration ------------------------------------------------------*/
             USART_Configuration();
           while(1)
           {
                USART_SendData(USART1,0x01);  //--------> 串口工具中接收到的数据又为0xE0
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }
}
端口配置都已经正常,在while里给PC机发送0x01,用串口工具接收到的数据为0xE0,不知道为什么发送和接收到的数据不一致,求各位帮忙.
然后自己查看了USART_SendData()和USART_GetFlagStatus函数:
库中的源代码为:
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
     /* Check the parameters */
      assert_param(IS_USART_ALL_PERIPH(USARTx));
      assert_param(IS_USART_DATA(Data));
   
     /* Transmit Data */
        USARTx->DR = (Data & (u16)0x01FF);
}

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
    FlagStatus bitstatus = RESET;
    /* Check the parameters */
     assert_param(IS_USART_ALL_PERIPH(USARTx));
     assert_param(IS_USART_FLAG(USART_FLAG));
     assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */  
     if ((USARTx->SR & USART_FLAG) != (u16)RESET)
     {
          bitstatus = SET;
     }
     else
     {
         bitstatus = RESET;
     }
      return bitstatus;
}

           while(1)
           {
                USART_SendData(USART1,0x02);     //0x01改为0x02 --------> 串口工具中接收到的数据又为0xE1
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }

           while(1)
           {
                USART_SendData(USART1,0x03);     //0x01改为0x03 --------> 串口工具中接收到的数据又为0xE1
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }
然后试了下把发给PC机的数据0x01改为数据0x02,串口工具中接收到的数据又为0xE1,然后把0x01再改为0x03,串口工具中接收到数据也为0xE1,求助,帮忙看下,为什么发送和接收的数据不一致?
   
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
哇哈哈1209
1楼-- · 2019-07-15 22:25
我也遇到这个问题,没有人解答下吗?
hdfsf
2楼-- · 2019-07-16 01:27
试了下几个可能的原因,全没有完全符合,楼主最好贴出全部代码,大家才好找原因
摇着扇子聊天
3楼-- · 2019-07-16 02:21
1、对一下波特率是否一样?
2、外部加一下上拉电阻试试
3、如果还不行就开检查软件,用示波器看一下波形
TOPCB
4楼-- · 2019-07-16 03:19
 精彩回答 2  元偷偷看……
tengruiyuan
5楼-- · 2019-07-16 08:31
回复第 1 楼 Sunrier于2011-03-14 03:35:14发表:
 
int main(void)
{
           #ifdef DEBUG
           debug();
           #endif
  
           /* System clocks configuration ---------------------------------------------*/
               RCC_Configuration();
          /* NVIC configuration ------------------------------------------------------*/
             NVIC_Configuration();
         /* GPIO configuration ------------------------------------------------------*/
            GPIO_Configuration();
  
         /* USARTconfiguration ------------------------------------------------------*/
             USART_Configuration();
           while(1)
           {
                USART_SendData(USART1,0x01);  //--------> 串口工具中接收到的数据又为0xE0
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }
}
端口配置都已经正常,在while里给PC机发送0x01,用串口工具接收到的数据为0xE0,不知道为什么发送和接收到的数据不一致,求各位帮忙.
然后自己查看了USART_SendData()和USART_GetFlagStatus函数:
库中的源代码为:
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
     /* Check the parameters */
      assert_param(IS_USART_ALL_PERIPH(USARTx));
      assert_param(IS_USART_DATA(Data));
   
     /* Transmit Data */
        USARTx->DR = (Data & (u16)0x01FF);
}
 
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
    FlagStatus bitstatus = RESET;
    /* Check the parameters */
     assert_param(IS_USART_ALL_PERIPH(USARTx));
     assert_param(IS_USART_FLAG(USART_FLAG));
     assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */  
     if ((USARTx->SR & USART_FLAG) != (u16)RESET)
     {
          bitstatus = SET;
     }
     else
     {
         bitstatus = RESET;
     }
      return bitstatus;
}
 
           while(1)
           {
                USART_SendData(USART1,0x02);     //0x01改为0x02 --------> 串口工具中接收到的数据又为0xE1
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }
 
           while(1)
           {
                USART_SendData(USART1,0x03);     //0x01改为0x03 --------> 串口工具中接收到的数据又为0xE1
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
          }
然后试了下把发给PC机的数据0x01改为数据0x02,串口工具中接收到的数据又为0xE1,然后把0x01再改为0x03,串口工具中接收到数据也为0xE1,求助,帮忙看下,为什么发送和接收的数据不一致?
   
 

不懂
哇哈哈1209
6楼-- · 2019-07-16 10:08
STM32 串口发送数据给PC机,数据不一致的原因如下:
跳线JP4/JP5是ST32与232芯片之间的跳线,如果你是从跳线处引出的线与PC机相连,则会出现帖子中所有出现的问题,这是因为电平不同引起的,所以,如果你从开发板的COM端口与PC相连,则就不会出现此问题了。

一周热门 更多>