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);
}
使用串口助手能收到
单片机发送的控制指纹模块的指令,在串口助手发送数据到单片机,也能进入接收中断函数。然后将此指令用串口助手发送到指纹模块,能在串口助手上收到正确的应答包。可是单片机和指纹模块却不能正常通信,也不能进入接收中断函数。。恳请各路大神支支招,在此先谢过了。
不知道是什么原因了,换成USART1之后就可以通信了,能进入中断服务程序,问题是问题是返回的数据包读不出来,,这是我的中断服务程序,,请帮忙看看
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++;
}
}
}
一周热门 更多>