有用过HAL库的串口中断接收的朋友吗
大家的void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)这个接收完成回掉函数可以设置断点吗hal中断接收我理解只有1,配置中断
2,在主函数中调用一次HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)开启标志位;
3,编写HAL_UART_RxCpltCallback函数
我也只做了这几步,进入调试发现这个回掉函数不仅没起作用,连断点都设置不了,这是为什么呢?
找到问题了 void USART3_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart3);
}
如果在cube中设置了nvic的话这个函数会在-it.c里面自动写好
如果cube中没有设置nvic的话 这个函数要自己写 才能开启中断 本帖最后由 wenyangzeng 于 2017-1-4 13:20 编辑
这个HAL USART 需要在主循环函数中不断调用HAL_UART_Receive_IT(&UartHandle, (uint8_t *)aRxBuffer, RXBUFFERSIZE),才能响应中断。这与查询方式有何区别?
令人费解!! 不会帮顶。。。。 这个还真不清楚,断点调试用的很少 可以设置的,断点设置不了,可能是你配置不对,导致回调函数没有被调用 feiante 发表于 2017-1-4 00:05
可以设置的,断点设置不了,可能是你配置不对,导致回调函数没有被调用
嗯感觉是回调函数没有调用 被编译器优化了 1:到串口的msp初始化函数中看看是否打开了串口中断
2:确定HAL_UART_Receive_IT是否被调用;
3:确定串口是否真的能接受到数据。
在HAL_UART_RxCpltCallback函数中再次调用HAL_UART_Receive_IT函数
用过,之前是用串口中断模式接收一个字节的数据,回调函数里做帧头判断,然后再开启接收下一个字节。
结果只接收了第一个字节,然后就进不了回调函数了,后来调试判断出是数据溢出了。是因为接收第一个字节后,回调函数处理部分太大了,还没处理完下一个数据就来了。
后来我改成空闲中断。 海迹天涯 发表于 2017-1-4 10:09
1:到串口的msp初始化函数中看看是否打开了串口中断
2:确定HAL_UART_Receive_IT是否被调用;
3:确定串口 ...
HAL_NVIC_SetPriority(USART3_IRQn, 0, 2);
HAL_NVIC_EnableIRQ(USART3_IRQn);
配置中断应该只有两句代码,是在HAL_UART_MspInit中调用? any012 发表于 2017-1-4 10:21
用过,之前是用串口中断模式接收一个字节的数据,回调函数里做帧头判断,然后再开启接收下一个字节。
结果 ...
嗯看了许多留言 说这个回调函数效率太低了 arels 发表于 2017-1-4 11:14
HAL_NVIC_SetPriority(USART3_IRQn, 0, 2);
HAL_NVIC_EnableIRQ(USART3_IRQn);
配置中断应该只有两句 ...
你可以追踪下代码看看有没有被执行到