STM32F072 Nucleo开发板USART2串口通信:单片机和指纹模块不能正常通信

2019-07-14 14:48发布

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);
}


使用串口助手能收到单片机发送的控制指纹模块的指令,在串口助手发送数据到单片机,也能进入接收中断函数。然后将此指令用串口助手发送到指纹模块,能在串口助手上收到正确的应答包。可是单片机和指纹模块却不能正常通信,也不能进入接收中断函数。。恳请各路大神支支招,在此先谢过了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
xieweibin
2019-07-15 05:22
12恒12 发表于 2019-1-4 20:05
隐约感觉到可能是硬件电路有问题,因为我的蜂鸣器处于关闭状态的,当我把指纹模块的3.3v 和GND接山单片机时蜂鸣器会有很小的滴滴声(凑到耳朵跟前才能听见),拔掉指纹模块电源时,这个声音就消失了,说明这个指纹模块对单片机的引脚是有影响的,有可能是模块干扰了TX和RX引脚,导致不能正常通信。。。可是不知道怎么解决, ...

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

要不,上个原理图看看,是不是电路错了。

一周热门 更多>