查詢和中斷不爽嗎?為什么要使用串口DMA?(借串口DMA引入)
如果真的是剛剛接觸單片機或嵌入式,肯定會問,因為按照難易程度:DMA>中斷>查詢。這里我提幾個反問句回答。
- 查詢方式是不是要在一個循環里反復執行判斷?如果串口傳輸數據頻率快于循環頻率,請問能及時收到數據嗎?
- 中斷過于頻繁主程序還要不要運行?如果我只接收數據,但不用接收一個字節數據就處理一次,那么請問,有必要頻繁中斷嗎?
- 數據傳輸過程需不需要時間?需要的話,那我們是不是還要等待?
其實我們要求的很簡單,就是高效,傳輸數據的時候我們不在等待的時間浪費CPU資源,而且數據是一個字節一個字節傳送的,接收的時候只要一個數據包最后一個字節數據接收到再處理即可,發送的時候讓串口自己一個字節一個字節把數據發出去即可,不用在等待一個字節發送完再發下一字節數據這樣。為了提高CPU使用效率,于是就使用DMA方式。
想學習DMA的可以轉到我CSDN的博文查看,為了保持美觀,所以文章寫到博客上了,相關內容請查看:
CSDN博客:https://blog.csdn.net/weixin_44524484/article/details/105671273
以下為文章目錄:
DMA配置和使用如此簡單(超詳細)
- DMA傳輸
- 一、查詢和中斷不爽嗎?為什么要使用串口DMA?(借串口DMA引入)
- 二、DMA介紹
- 1、什么是DMA?
- 2、STM32上的DMA資源
- 3、DMA主要特征
- 4、DMA請求映像
- 5、DMA寄存器介紹
- (1)DMA中斷狀態寄存器(DMA_ISR)
- (2)DMA中斷標志清除寄存器(DMA_IFCR)
- (3)DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)
- (4)DMA通道x傳輸數量寄存器(DMA_CNDTRx)(x = 1…7)
- (5)DMA通道x外設地址寄存器(DMA_CPARx)(x = 1…7)
- (6)DMA通道x存儲器地址寄存器(DMA_CMARx)(x = 1…7)
- 6、DMA庫函數介紹
- (1)函數 DMA_DeInit
- (2)函數DMA_Init
- (3)函數DMA_Cmd
- (4)函數 DMA_ITConfig
- 三、DMA配置
- 四、DMA使用
- 1、查詢方式
- 2、中斷方式
- 3、不定長數據傳輸
- 4、雙緩沖方式
- 五、總結