你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教:STM32 串口发送数据给PC机,数据不一致

[复制链接]
Sunrier 提问时间:2011-3-14 11:35 /

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,求助,帮忙看下,为什么发送和接收的数据不一致?
   
收藏 评论22 发布时间:2011-3-14 11:35

举报

22个回答
primeking 回答时间:昨天 15:47

我也遇到过同样的情况 单片机发1 串口助手收到的是e0 外部时钟默认频率修改一下就好了

millysyg 回答时间:2011-3-30 14:40:25

RE:请教:STM32 串口发送数据给PC机,数据不一致

你把USART_Configuration()贴上来看看
zhouke58 回答时间:2011-3-31 09:04:25

RE:请教:STM32 串口发送数据给PC机,数据不一致

出现你这现象我也碰到过,但是我用的是485通信的,就是因为外部设备没有我们STM32的运行速度快,所以在485发送和接收的部分要加上适当延时.
你在发送完后的  
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}
在后面加个软件延时就可以了.
dbayj2 回答时间:2011-4-13 11:46:54

RE:请教:STM32 串口发送数据给PC机,数据不一致

我也出了类似的问题,但我的情况不太一样,之前运行正常,突然有一天不正常了,以后就没好过,换过232芯片,不管用,求解。
tlw2007 回答时间:2011-4-14 21:27:11

RE:请教:STM32 串口发送数据给PC机,数据不一致

楼主问题解决了吗,我的也是一样。
halibote523 回答时间:2011-4-15 08:47:59

RE:请教:STM32 串口发送数据给PC机,数据不一致

也有可能是他的3232的问题
瘦猪呆兔 回答时间:2011-4-15 17:45:13

RE:请教:STM32 串口发送数据给PC机,数据不一致

两边的波特率是一样的吗?
wangyin1226 回答时间:2011-4-20 16:39:32

RE:请教:STM32 串口发送数据给PC机,数据不一致

可能是驱动电路有问题,这样会有丢失包的现象
jnwsx123 回答时间:2011-6-1 19:52:42

回复:请教:STM32 串口发送数据给PC机,数据不一致

我也遇到这个问题,没有人解答下吗?
xlb1833 回答时间:2011-6-2 11:03:17

RE:请教:STM32 串口发送数据给PC机,数据不一致

试了下几个可能的原因,全没有完全符合,楼主最好贴出全部代码,大家才好找原因
废鱼 回答时间:2011-6-2 15:39:14

RE:请教:STM32 串口发送数据给PC机,数据不一致

首先确认的几个问题:
1、USART_Configuration()中波特率是多少?GPIO是否配置?使用的串口是否是需要开启重映射?
2、PC机串口采集的波特率和板子的发送波特率是否一致?
3、电平转换的问题,PC机不能直接和STM32的串口连接,需要一个232来转换电平。
huangzy314530 回答时间:2011-6-4 12:25:41

回复:请教:STM32 串口发送数据给PC机,数据不一致

回复第 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,求助,帮忙看下,为什么发送和接收的数据不一致?
   
 

不懂
jnwsx123 回答时间:2011-6-5 08:37:38

RE:请教:STM32 串口发送数据给PC机,数据不一致

STM32 串口发送数据给PC机,数据不一致的原因如下:
跳线JP4/JP5是ST32与232芯片之间的跳线,如果你是从跳线处引出的线与PC机相连,则会出现帖子中所有出现的问题,这是因为电平不同引起的,所以,如果你从开发板的COM端口与PC相连,则就不会出现此问题了。
jwdxu2009 回答时间:2011-6-9 20:05:53

RE:请教:STM32 串口发送数据给PC机,数据不一致

不好解决,多谢
hwotosign 回答时间:2011-8-10 10:22:00

回复:请教:STM32 串口发送数据给PC机,数据不一致

   USART_InitStructure.USART_WordLength = USART_WordLength_9b;   //配置成9位很重要,否则发送数据和接受数据会不一致
 
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版