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

STM32F072 Nucleo开发板 USART2串口通信问题

[复制链接]
愤怒的小宝 提问时间:2018-4-5 18:10 /
STM32新手,刚开始学习,尝试用STM32F072 Nucleo开发板和AS608指纹模块做一个指纹识别的应用,遇到的一个问题是开发板和指纹模块不能用串口(USART2)通信。用的库是stm32f0xx_HAL_Driver,串口配置程序如下
void usart2_init(u32 bound)
{  
        GPIO_InitTypeDef GPIO_InitStructure;

   __GPIOA_CLK_ENABLE();  // GPIOA时钟
  __USART2_CLK_ENABLE();   //串口2时钟

                 //USART2_TX   PA2
   GPIO_InitStructure.Pin = GPIO_PIN_2; //PA2
  GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
  GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;        //复用推挽输出
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2

    //USART2_RX          PA3
  GPIO_InitStructure.Pin = GPIO_PIN_3;
  GPIO_InitStructure.Mode = GPIO_MODE_INPUT;//浮空输入
  HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA3
       
        huart2.Instance = USART2;
  huart2.Init.BaudRate = bound;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED ;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  HAL_UART_Init(&huart2);
        __HAL_UART_ENABLE(&huart2);       //使能串口2
//        __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
        //开启中断
        HAL_NVIC_SetPriority(USART2_IRQn,1,0);
        HAL_NVIC_EnableIRQ(USART2_IRQn);
}


使用串口助手能收到单片机发送的控制指纹模块的指令,在串口助手发送数据到单片机,也能进入接收中断函数。然后将此指令用串口助手发送到指纹模块,能在串口助手上收到正确的应答包。可是单片机和指纹模块却不能正常通信,也不能进入接收中断函数。。恳请各路大神支支招,在此先谢过了。
收藏 评论12 发布时间:2018-4-5 18:10

举报

12个回答
无薪税绵 回答时间:2018-4-5 18:35:06
请检查一下,单片机的TX、RX和指纹的TX、RX,是否连接对了。
我估计是反了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

愤怒的小宝 回答时间:2018-4-5 18:49:22
无薪税绵 发表于 2018-4-5 18:35
请检查一下,单片机的TX、RX和指纹的TX、RX,是否连接对了。
我估计是反了。 ...

又检查了一遍,单片机TX接指纹RX,没错啊,,很恼火
wenyangzeng 回答时间:2018-4-5 19:03:12
本帖最后由 wenyangzeng 于 2018-4-5 19:20 编辑

楼主把这句屏蔽掉了 __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);禁止了接收中断。
既然分开用串口助手都能进行通讯,那就应该检查一下单片机和指纹模块的硬件连接是否正常,尤其是RXD和TXD可能需要交叉对接的。。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

愤怒的小宝 回答时间:2018-4-5 19:31:25
wenyangzeng 发表于 2018-4-5 19:03
楼主把这句屏蔽掉了 __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);禁止了接收中断。
既然分开用串口助手 ...

隐约感觉到可能是硬件电路有问题,因为我的蜂鸣器处于关闭状态的,当我把指纹模块的3.3v 和GND接山单片机时蜂鸣器会有很小的滴滴声(凑到耳朵跟前才能听见),拔掉指纹模块电源时,这个声音就消失了,说明这个指纹模块对单片机的引脚是有影响的,有可能是模块干扰了TX和RX引脚,导致不能正常通信。。。可是不知道怎么解决,
wenyangzeng 回答时间:2018-4-5 19:54:46
愤怒的小宝 发表于 2018-4-5 19:31
隐约感觉到可能是硬件电路有问题,因为我的蜂鸣器处于关闭状态的,当我把指纹模块的3.3v 和GND接山单片机 ...

可以先对指纹模块单独外部供电。
无薪税绵 回答时间:2018-4-5 20:28:28
愤怒的小宝 发表于 2018-4-5 19:31
隐约感觉到可能是硬件电路有问题,因为我的蜂鸣器处于关闭状态的,当我把指纹模块的3.3v 和GND接山单片机 ...

建议楼主使用示波器,
看看TX和RX,是不是被干扰了。

要不,上个原理图看看,是不是电路错了。
toofree 回答时间:2018-4-6 02:16:20
本帖最后由 toofree 于 2018-4-6 02:18 编辑

还是上程序和原理图吧!
之前就有一位,跟你现在说的问题非常像,也是串口指纹模块。硬件能排除的都排除过了。只剩下程序了,说他程序有问题,他非常确定的说没问题,但是不提供程序。
最终还是中断服务函数用法有问题导致的丢数据。
跟你说这的目的是想告诉你,你以为的不一定就是你以为的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Angel_YY 回答时间:2018-4-6 07:18:28
从现象上开硬件连接的问题可能性大一些,如果还是不行,建议楼主串口RX和TX上拉10K电阻试试,串口协议要求TX和RX在空闲的时候是高电平,有些设备可能在不满足条件的情况下会出现串口通讯异常。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

愤怒的小宝 回答时间:2018-4-6 19:46:14
toofree 发表于 2018-4-6 02:16
还是上程序和原理图吧!
之前就有一位,跟你现在说的问题非常像,也是串口指纹模块。硬件能排除的都排除过 ...

我现在USART1了,串口配置的流程跟上面一样,现在的情况是单片机发的指令能被指纹模块接收到,指纹模块返回应答数据包,然后能进入中断服务程序,但是就卡在中断服务里面了,调试模式下全速运行,能看到RDR寄存器有值,查看指纹模块手册后发现这个值正是应答数据包的第一个字节。。。这是我的中断服务函数,返回的数据包读不出来。
void USART1_IRQHandler(void)
{        
       
        if(__HAL_USART_GET_FLAG(&huart1, USART_FLAG_RXNE) == SET)
        {         
                BeepNormal(100);  //响应中断程序提示,蜂鸣器嘀一声
                if(USART1_RX_COUNT < USART1_MAX_RECV_LEN) //接收缓冲区未满
                {
                        //HAL_USART_Receive_IT(&huart1,&USART1_RX_BUF[USART1_RX_COUNT],1);
                        USART1_RX_BUF[USART1_RX_COUNT] = USART1->RDR;
                        USART1_RX_COUNT++;
                }
        }
}   
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版