STM32
直播中

姬盼希

7年用户 916经验值
擅长:控制/MCU
私信 关注
[问答]

STM32 HAL库的串口怎样才能进入中断回调函数呢

STM32 HAL库的串口怎样才能进入中断回调函数呢?

回帖(1)

倪辰曦

2021-12-8 15:30:14
关于STM32 HAL库 串口接收中断

串口每次接收到一个数据都会进入中断,而只有huart->RxXferCount减小到0了,才会进入中断回调函数。可以从下图中看出。










所以,中断接收的过程就是





(pTxBuffPtr,TxXferSize 和 TxXferCount 三个变量分别用来设置串口发送的数据缓存指针,发送的数据量和还剩余的要发送的数据量。
pRxBuffPtr,RxXferSize 和RxXferCount 则是用来设置接收的数据缓存指针,接收的最大数据量以及还剩余的要接收的数
据量。)

过程

当接收到一个字符之后,在函数
UART_Receive_IT中会把数据保存在串口句柄的成员变量pRxBuffPtr缓存中,并且使RxXferSize +1,RxXferCount -1,当RxXferCount 减小到0的时候,就会调用接收完成回调函数
HAL_UART_RxCpltCallback 进行处理。
1.CUBEMX配置的MX_USART1_UART_Init()中是没有开启中断的,需要加上
HAL_UART_Receive_IT(&huart1, (u8 *)aRxBuffer, RXBUFFERSIZE);
其中aRxBuffer是我们自己定义的临时缓冲区,如果它的长度RXBUFFERSIZE = 1,则每次进入中断之后,都会进入中断回调函数。
2.回调函数每调用一次,库的设置会自动将中断关闭,所以需要再次开启,这里我们放在了USART1_IRQHandler(),中断入口函数中。
3.读取USARTx->SR能避免莫名其妙的错误,所以在中断入口函数中加了
while(HAL_UART_GetState(&huart1) != HAL_UART_STATE_READY)//等待就绪
举报

更多回帖

发帖
×
20
完善资料,
赚取积分