一 概述
下圖是表述了用戶層和HAL_Driver的交互過程,基本上從用戶APP調用HAL_Driver APIs並且視情況當使用DMA或者專用中斷時通過中斷處理程序調用HAL_Driver APIs
使用DMA或中斷時,中斷模式通過回調函數來完成用戶定義流程(實時處理),DMA中斷模式使用相同的調用流程
二 具體使用過程
1 HAL(硬件抽象層) 初始化
2 HAL IO 操作流程 -- HAL functions 與內部數據處理類似發送/接收,讀/寫. 提供三種處理模型
a Polling mode 查詢模式,HAL函數在數據處理完成(阻塞)后返回處理狀態(ok or err),可以通過HAL_PPP_GetState()獲取具體錯誤信息
<img src="d99d3f80-e264-472f-a9db-a088dc0c5c20_files/6ae88b28-8824-40a4-a8ea-71c3b1b5a415.png" border="0" alt="" style="font-size: 10.5pt; line-height: 1.5;" name="" width="416" height="205">
b Interrupt mode 中斷模式,啟動數據處理並開啟了相應中斷后返回處理狀態;該模式下,驅動程序聲明了4個函數
• HAL_PPP_Process_IT(): 啟動中斷處理,一般在用戶文件中
• HAL_PPP_IRQHandler(): 全局外設中斷,一般在stm32f0xx_it.c中
• __weak HAL_PPP_ProcessCpltCallback (): 有關處理結束回調函數
• __weak HAL_PPP_ProcessErrorCallback(): 有關錯誤回調處理
__weak 弱聲明,用戶可以在應用中重新實現
c DMA mode 使能相應的DMA中斷並啟動DMA處理數據后返回處理狀態;操作結束后調用回調函數通知用戶處理完成;該模式下,驅動程序聲明了4個函數:
• HAL_PPP_Process_DMA():啟動DMA過程,一般在用戶文件中
• HAL_PPP_DMA_IRQHandler():外設使用的DMA中斷,一般在stm32f0xx_it.c中
• __weak HAL_PPP_ProcessCpltCallback():有關過程結束回調函數
• __weak HAL_PPP_ErrorCpltCallback():過程錯誤回調函數
如果使用DMA模式,通常在HAL_PPP_MspInit()回調函數中執行DMA初始化