• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

STM32开发板USART2通信接收不到数据

心机BOY 2016-08-11 浏览量:2070
本帖最后由 心机BOY 于 2016-8-11 20:03 编辑

昨天经过USART学习写了一个与PC通讯的小程序,但一直调试不出来有没有大神帮忙看下问题出在哪里?




It文件里的程序

1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 我觉得还是直接把程序给你改了吧,我已经验证过了,可以正常收发数据,见附件.
    • 发布于 2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:12
  • 串口通信步骤:
    1、串口时钟使能,GPIO时钟使能
    2、串口复位
    3、GPIO端口模式设置
    4、串口参数初始化
    5、初始化NVIC
    6、开启中断
    7、使能串口
    按照这几个步骤下来应该就可以通信了,你应该少了第二个串口复位,增加一行代码:USART_DeInit(USART2)
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 2
    • 0

  • 楼主问题解决了,记得及时结贴哦,社区还有3倍奖励要奖励给回答问题者哦
    • 发布于2016-08-12
    • 举报
    • 评论 0
    • 1
    • 0

  • STM32的表示不懂,只能帮顶一下了:(
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 君子好“球” 发表于 2016-8-11 17:00
    串口通信步骤:
    1、串口时钟使能,GPIO时钟使能
    2、串口复位

    哪里有问题,增加的代码加在USART里面?
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • RX的GPIO设置,Mode也是AF,而不是IN。IN是GPIO模式,应该用复用模式配置为串口的RX,也就是AF。
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • LiuYang 发表于 2016-8-11 19:34
    RX的GPIO设置,Mode也是AF,而不是IN。IN是GPIO模式,应该用复用模式配置为串口的RX,也就是AF。 ...

    RX怎么改成AF,不是应该是浮空输入吗
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 这是我用的程序,如下的配置是可以正常通讯的。所以RX配置成GPIO_Mode_IN_FLOATING也是可以的。

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //RX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//
    GPIO_Init(GPIOA, &GPIO_InitStructure); //

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TX
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 在你的配置程序中,你使能的是接收中断,
    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
    程序功能是返回接收到的数据。
    先确定是不是硬件 问题。再看程序了的。
    先确定PC是不是发送了,可以短接PC上的TX与RX,试试。
    确定STM32是不是接收到了,仿真一下看下有没有进中断里。
    • 发布于2016-08-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 本帖最后由 999 于 2016-8-13 02:45 编辑

    我这里说一种我遇到过的情况:
    “在接收中断中,进行发送” 有时就会产生这样的问题。
    这个问题比较奇葩,有时修改代码或者删掉一些函数,又好了。当时没有去仔细寻找原因。

    所以我建议楼主:
    1、在接接收中断中,不要发送,设置一个IO口进行输出,如点亮一个小灯。或者进入debug模式在中断设置断点。先单独判断是否能触发接收中断。
    2、单独发送,看是否成功。

    曾遇到不好觉得的问题:比如进入debug就正常,不进入就异常。或者插着Jlink就正常,拔下去就不正常。导致原因很多,就要隔离条件,依次测试。
    • 发布于2016-08-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 残存地丢 发表于 2016-8-11 16:36
    我觉得还是直接把程序给你改了吧,我已经验证过了,可以正常收发数据,见附件. ...

    程序是不是改 void USART2_IRQHandler(void) 里的,还有把GPIOA的复用功能没开,程序试了一下,程序是可以通讯的,但是有时候不是很稳定是什么原因,有时候接收不到
    • 发布于2016-08-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

STM32开发板USART2通信接收不到数据