金牌会员
 
- 积分
- 1730
- 金钱
- 1730
- 注册时间
- 2016-3-8
- 在线时间
- 678 小时
|

楼主 |
发表于 2017-4-5 08:59:19
|
显示全部楼层
本帖最后由 adlu 于 2017-4-5 09:06 编辑
配置好串口并使能相应中断之后,其实并没有实现接收中断功能。
如果你想要实现串口最基本的逐字节接收功能,还应执行以下操作:
1.在进入主函数while(1)无限循环之前,调用一次HAL_UART_Receive_IT(&huart1, pData, 1);
huart1是UART句柄,pData是数据指针,第三个参数表示接收多少字节后调用一次回调函数。
2.在main文件或者其他用户文件重写回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Receive_IT(&huart1, pData, 1);//重新使能接收,同样,设置为接收1字节后调用回调函数
//用户处理pData[0]的代码
}
Cube生成的程序架构,在处理中断时,使用的是回调机制,用户不需要直接编写或处理中断函数,只需要处理回调函数。
回调函数在HAL相应文件中以__weak修饰,如HAL_UART_RxCpltCallback()函数在stm32f4xx_hal_uart.c文件中定义如下:
__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
}
注意其中的注释,意思是不要修改本函数,如果需要回调函数,可以在用户文件中实现HAL_UART_TxCpltCallback()。
|
|