用cubemx+DMA+空閑中斷接收不定長數據


1、用CUBEMX生成初始化代碼的時候,DMA的mode要設置為normal(即默認值),注意要開啟中斷。

2、空閑中斷:空閑中斷位於文件 stm32f1xx_it.c 中,名字類似於void UARTX_IRQHandler(void) 。這個空閑中斷的產生時機是接收到了數據就觸發(接收數據的數組沒有滿也可以觸發)。

3、在空閑中斷里面編寫自己的回調函數,不用自動生成的 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 函數了(因為這個回調函數需要數組接收滿才觸發)。

4、自己的回調函數里面可以用for循環判斷‘\0’元素來獲取接收數據的實際大小,然后處理數據。

5、處理完數據之后用 memset(void * /*s*/, int /*c*/, size_t /*n*/)函數清空數組(例:memset(&uart4_recive_data,0,sizeof(uart4_recive_data));),該函數在string.h頭文件中。

6、清空完數組就要stop DMA,再開啟DMA接收。(stopDMA是為了讓下一次接受的時候數據會從接收數組的首地址開始存儲)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM