一般处理:
stm32 uart使用dma接收时,会有自己的数据流中断,数据流中断会调用HAL_UART_RxCpltCallback。但是数据流中断只会在HAL_UART_Receive_DMA函数指定的buffer满时才会触发。
接收不定长度字符,需要和uart的UART_IT_IDLE结合。
两种结合方式
第一种:(习惯标准库的程序员)
步骤
step1 初始化
1.__HAL_UART_ENABLE_IT(&huart,UART_IT_IDLE);
2.HAL_UART_Receive_DMA(&huart,uartRxBuf,size);
step2 中断 UART_IRQHandler中:
if((__HAL_UART_GET_FLAG(&huart,UART_FLAG_IDLE)!=RESET))
{
任务处理;
__HAL_UART_ENABLE_IT(&huart,UART_IT_IDLE);
}
第二种:(重新实现hal库中的回调)
step1 初始化
HAL_UARTx_ReceiveToIdle_DMA();
step2 中断UART_IRQHandler
不需要做任何事情
step3
实现回调
void HAL_UARTEx_RxEventCallback(huart,size)
{
//任务处理
//重新调用 HAL_UARTx_ReceiveToIdle_DMA,重置DMA处理接收字符的位置
}文章来源:https://www.toymoban.com/news/detail-688283.html
size是当前串口空闲时已经接收字符的个数文章来源地址https://www.toymoban.com/news/detail-688283.html
到了这里,关于stm32 uart dma方式接收不定长度字符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!