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

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

[复制链接]
Sunrier 提问时间:2011-3-14 11:35 /
阅读主题, 点击返回1楼
收藏 评论21 发布时间:2011-3-14 11:35
21个回答
回答时间: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位很重要,否则发送数据和接受数据会不一致
 
edensky01 回答时间:2011-8-10 21:24:11

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

首先,判断PC端能否得到信号,如果用字符格式收取没有数据,说明你的数据传输或数据处理有问题,如果出现的是乱码,说明你的波特率不对。
哈哈-341063 回答时间:2012-6-7 14:41:31

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

多发几个试试,最后加上一个延时
zykzyk-93033 回答时间:2012-6-9 11:58:17

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

可能是你的串口波特率初始化不正确造成的。
常青-352632 回答时间:2012-6-9 14:20:53

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

应该是波特率不匹配造成的
candy-360301 回答时间:2012-6-9 19:00:36

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

试试PC 和MCU 的波特率对不对 如果波特率不对 那样的会出现乱码  还有就是 时钟的问题 103 和107的时钟 系统时钟是对的 但是外部时钟不对 一个8M 一个是25MHZ
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版