HAL驱动库学习--如何使用HAL库
一 概述
下图是表述了用户层和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初始化