STM32使用CubeMAX配置的串口中断接收方法
目录
1.定位串口中断发生的地方
2.处理串口中断接收的流程是:
(1)初始化串口
(2)在main中第一次调用接收中断函数(这个也是比较关键的)
(3)重写HAL_UART_RxCpltCallback回调,在回调中处理接收的数据,重点是回调函数中也要调用一次HAL_UART_Receive_IT函数。
STM32使用cubeMAX可以快速建立工程模板,但是默认使用的是Hal库构成的工程,对于习惯使用了ST标准库的同学来说,灵活调用HAL库可能会比较生疏,我也是这么觉得的,但是还是要逐步去接触学习它,毕竟这个hal库的封装还是相当好的,有好多先进的思想和用法。
在学习过程中,我遇到了一个问题,之前也遇到过,但是没时间去研究,就是串口在CUBUMAX上配置好后,如何实现串口中断接收,接下来就来记录一下我学习到的知识:
1.定位串口中断发生的地方
HAL库的中断处理还是和标准库一样的,在stm32xxxx_it.c中定义我们定位到如下函数:
HAL_UART_IRQHandler(&huart1);
再往下定位,我们找到
/* UART in mode Receiver ---------------------------------------------------*/
if((tmp_flag != RESET) && (tmp_it_source != RESET))
{
UART_Receive_IT(huart);
}
最后在UART_Receive_IT()函数中能找到串口中断接收的回调函数HAL_UART_RxCpltCallback(huart);
往里面搜索,发现这个回调函数是这样的:
/**
* @brief Rx Transfer completed callbacks.
* @param huart: Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @retval None
*/
__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_RxCpltCallback can be implemented in the user file
*/
}
你会发现这个回调函数啥也没干;后面我搜索资料知道,这个函数需要用户自己重写的,这个比较关键;
2.处理串口中断接收的流程是:
(1)初始化串口
(2)在main中第一次调用接收中断函数(这个也是比较关键的)
-
(3)重写HAL_UART_RxCpltCallback回调,在回调中处理接收的数据,重点是回调函数中也要调用一次HAL_UART_Receive_IT函数。
下面贴一下我的回调函数的代码:
uint8_t aRxBuffer1;//一个字节的缓冲
int main(void)
{
...
HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1); // Enable the USART1
...
while(1)
{
...
}
}
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1);
// save char from uart receive
QueueIn(CLI_RX_Buff, aRxBuffer1);//将接收到的数据放到自己的fifo中去
//这里打印显示,建议关闭,不然会影响中断接收,可以考虑用中断发送
//printf("%c",aRxBuffer1);
}
}
/* USER CODE END 4 */
这些就是所有需要添加的东西了,实现了串口中断接收的功能。
至于如何cubeMAX中配置串口,可以参考如下链接,也非常感谢其他博主的详细解释。
参考链接:
http://www.eeworld.com.cn/mcu/article_2018061939840.html
https://www.cnblogs.com/wt88/p/9624115.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)