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

STM32F407使用USART1从串口助手接收一个字符后,发送数据,...

[复制链接]
taoshengyijiu-3 提问时间:2015-10-26 20:29 /
我用STM32F407进行串口通信,串口助手发送一个数据时如0x12,STM32F07接收到后判断,然后向串口调试助手发送相关数据,但在正确的数据前面会多了刚才发送的数据(如0x12),不知道这个是什么原因????




主函数
  1. #include<stm32f4xx.h>

  2. void config_clock(void);
  3. void delay_us(u32 nus);
  4. void config_GPIOs(void);
  5. void config_USART1(void);
  6. int flag = 1, i = 0;
  7. char a[15] = "hellow world ";

  8. void main(void)
  9. {
  10.   config_clock();
  11.   config_GPIOs();
  12.   config_USART1();
  13.   NVIC_EnableIRQ(USART1_IRQn);
  14.   while (1)
  15.   {
  16.     if (flag == 0)
  17.     {
  18.       USART1->DR = 's';
  19.       while ((USART1->SR & USART_SR_TC) == 0)
  20.           ;
  21.       USART1->SR &= ~USART_SR_TC;
  22.       flag=2;
  23.     }
  24.     else if (flag == 1)
  25.     {
  26.       flag = 2;
  27.       for (i=0; i<=12; i++)
  28.       {
  29.         USART1->DR = a[i];
  30.         while ((USART1->SR & USART_SR_TC) == 0)
  31.           ;
  32.         USART1->SR &= ~USART_SR_TC;
  33.       }
  34.     }
  35.   }
  36.   
  37. }

  38. void USART1_IRQHandler()
  39. {
  40.   if ((USART1->SR & USART_SR_RXNE) == USART_SR_RXNE)
  41.   {
  42.     if (USART1->DR == 0x12)
  43.       flag=1;
  44.     else if (USART1->DR == 0x13)
  45.       flag = 0;
  46.   }
  47. }
复制代码
==========================================================================
配置USART1
  1. #include<stm32f4xx.h>

  2. void config_USART1(void)
  3. {
  4.   USART1->CR1 |= USART_CR1_UE;                  //USART1 enable
  5.   USART1->CR1 &= ~USART_CR1_M;                  //use 1 start bit, 8 data bit, n stop bit
  6.   USART1->CR2 &= ~USART_CR2_STOP;               //1 stop bit
  7.   USART1->BRR = 0x5161;                         //brad rate 2400
  8.   USART1->CR1 |= USART_CR1_TE;                  //send an idle frame as first transmission
  9.   USART1->CR1 |= USART_CR1_RE;                  //receive is enabled and begins searching for a start bit
  10.   USART1->SR &= ~USART_SR_TC;
  11.   
  12.   
  13.   USART1->CR1 |= USART_CR1_RXNEIE;              //RXNE interrupt enable
  14. }
复制代码




QQ截图20151026201728.jpg
QQ截图20151026201804.jpg
收藏 1 评论5 发布时间:2015-10-26 20:29

举报

5个回答
peter001 回答时间:2015-10-26 21:02:12
楼主是不是发送什么数字,接收区就会多出什么数字?如果是这样,检查硬件是否有虚搭,或者是线路过长产生耦合
taoshengyijiu-3 回答时间:2015-10-27 08:59:43
peter001 发表于 2015-10-26 21:02
楼主是不是发送什么数字,接收区就会多出什么数字?如果是这样,检查硬件是否有虚搭,或者是线路过长产生耦 ...

发送什么数据就会先发送这个数据后,然后再发送其他数据
taoshengyijiu-3 回答时间:2015-10-27 10:03:56
peter001 发表于 2015-10-26 21:02
楼主是不是发送什么数字,接收区就会多出什么数字?如果是这样,检查硬件是否有虚搭,或者是线路过长产生耦 ...

换了一个USB转串口模块就好了……
peter001 回答时间:2015-10-27 12:27:19
看来串口模块质量不行呀
taoshengyijiu-3 回答时间:2015-10-27 14:22:50
peter001 发表于 2015-10-27 12:27
看来串口模块质量不行呀

                 
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版