一 概述
下图是表述了用户层和HAL_Driver的交互过程,基本上从用户APP调用HAL_Driver APIs并且视情况当使用DMA或者专用中断时通过中断处理程序调用HAL_Driver APIs
使用DMA或中断时,中断模式通过回调函数来完成用户定义流程(实时处理),DMA中断模式使用相同的调用流程

二 具体使用过程
1 HAL(硬件抽象层) 初始化

  1. 2 HAL IO 操作流程 -- HAL functions 与内部数据处理类似发送/接收,读/写. 提供三种处理模型
  2. a Polling mode 查询模式,HAL函数在数据处理完成(阻塞)后返回处理状态(ok or err),可以通过HAL_PPP_GetState()获取具体错误信息
  3. <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">
  4. b Interrupt mode 中断模式,启动数据处理并开启了相应中断后返回处理状态;该模式下,驱动程序声明了4个函数
  5. • HAL_PPP_Process_IT(): 启动中断处理,一般在用户文件中
  6. • HAL_PPP_IRQHandler(): 全局外设中断,一般在stm32f0xx_it.c中
  7. • __weak HAL_PPP_ProcessCpltCallback (): 有关处理结束回调函数
  8. • __weak HAL_PPP_ProcessErrorCallback(): 有关错误回调处理
  9. __weak 弱声明,用户可以在应用中重新实现

  1. c DMA mode 使能相应的DMA中断并启动DMA处理数据后返回处理状态;操作结束后调用回调函数通知用户处理完成;该模式下,驱动程序声明了4个函数:
  2. • HAL_PPP_Process_DMA():启动DMA过程,一般在用户文件中
  3. • HAL_PPP_DMA_IRQHandler():外设使用的DMA中断,一般在stm32f0xx_it.c中
  4. • __weak HAL_PPP_ProcessCpltCallback():有关过程结束回调函数
  5. • __weak HAL_PPP_ErrorCpltCallback():过程错误回调函数
  6. 如果使用DMA模式,通常在HAL_PPP_MspInit()回调函数中执行DMA初始化

HAL驱动库学习--如何使用HAL库的更多相关文章

  1. HAL驱动的串口编程陷阱

    http://bbs.elecfans.com/jishu_464356_1_1.html 手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL ...

  2. Google之Chromium浏览器源码学习——base公共通用库(二)

    上次提到Chromium浏览器中base公共通用库中的内存分配器allocator,其中用到了三方库tcmalloc.jemalloc:对于这两个内存分配器,个人建议,对于内存,最好是自己维护内存池: ...

  3. Windows动态库学习心得

    最近在工作中需要给项目组其他成员提供调用函数,决心抛弃以前“拷贝头文件/源文件”的简陋方法,采用动态库的方式对自己开发的接口进行模块化管理.因之前一直没有机会从事Windows动态库的开发,现借助这个 ...

  4. backbone库学习-model

    backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...

  5. python 操作exls学习之路1-openpyxl库学习

    这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...

  6. boost库学习之regex

    一.背景 项目中许多地方需要对字符串进行匹配,比如根据指定的过滤字符串来过滤文件名.刚开始是排斥使用boost库的,第一,我不熟悉boost库:第二,如果引入第三方库,就会增加库的依赖,这样的后果是, ...

  7. boost库学习之开篇

    本系列文章使用boost_1.58.0版本. 一.欢迎使用boost C++库 boost致力于提供一个免费的.便携的源代码级的库. 我们重视那些与C++标准一起工作良好的库.boost库将要成为一个 ...

  8. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  9. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

随机推荐

  1. 纪念逝去的岁月——C/C++交换排序

    交换排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...

  2. JavaScript_Math函数

    JavaScript_Math函数与属性按功能分类 Math三角函数与属性 Math.sin() -- 返回数字的正弦值 Math.cos() -- 返回数字的余弦值 Math.tan() -- 返回 ...

  3. Eclipse设置注释模板

    设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...

  4. 关于android端的json传输

    比较通用的传输方法 import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; impo ...

  5. c#中enum的用法小结

    转自:http://blog.csdn.net/moxiaomomo/article/details/8056356 enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存 ...

  6. CSS DIV 独占一行,清除左右两边的浮动

    clear:both //表示清除左右两边浮动的层,自己独占一行

  7. Expect 初学

    expect可以帮助脚本完成自动化.今天就用二种实例来介绍2种写法. 安装 yum -y install expect 一.直接用/usr/bin/expect 这种就不方便调用linux下的环境变量 ...

  8. 数据库---MySQL练习题及答案

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  9. <script>元素的位置

    脚本元素会组织下载网页内容,浏览器可以同时下载多个组件,但一旦遇到一个外部脚本文本后,浏览器会停止进一步下载,知道这个脚本文件下载,解析并执行完毕.这会严重影响网页载入的总时间,特别是在网页在入时会发 ...

  10. C++ 一个统计文件夹下所有代码文件行数的小工具

    // CodeLines.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Commdlg.h> #inclu ...