stm32hal库串口dma接收数据缺失
时间: 2023-08-09 12:12:43 浏览: 196
在使用STM32HAL库进行串口DMA接收数据时,可能会出现数据缺失的情况。根据引用\[1\]中的博主的经验,他在使用STM32CubeIDE生成的代码中发现了一些问题,导致串口接收不到数据。为了解决这个问题,他建议稍作修改初始化流程,先初始化DMA,再初始化相关的串口。具体的修改流程如下所示:
MX_DMA_Init();
MX_USART1_UART_Init();
MX_UART4_Init();
MX_UART5_Init();
MX_USART2_UART_Init();
MX_USART3_UART_Init();
MX_USART6_UART_Init();
此外,引用\[2\]中提到了一些整体思路。首先,需要打开串口空闲中断,并开启DMA接收。当串口接收到空闲中断标志后,会跳转到中断函数进行处理。在中断函数中,可以使用__HAL_DMA_GET_COUNTER函数来获取DMA接收剩余的字节数,然后根据实际收到的字节数进行处理。最后,需要重新初始化缓冲区并重新开启DMA接收。
需要注意的是,根据引用\[3\]中的代码,__HAL_DMA_GET_COUNTER函数用于统计DMA接收剩余的字节数。在开始时,DMA接收的字节数是固定的,然后在空闲中断中,通过这个函数可以统计到实际收到的字节数。根据实际情况,可以根据收到的字节数定义合适的变量类型,如uint16_t。
希望以上的信息对你有帮助。如果还有其他问题,请随时提问。
#### 引用[.reference_title]
- *1* [stm32HAL库 串口接收不定长数据(DMA传输)](https://blog.csdn.net/qq_33954661/article/details/124882073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [STM32 HAL库 串口DMA接收不定长数据](https://blog.csdn.net/weixin_41872408/article/details/118739340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文