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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版