一 概述
下图是表述了用户层和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. 怎么控制表单placeholder属性的样式兼容各大浏览器?

    当我们使用placeholder的时候会遇到样式的控制和版本的兼容问题(但是还是只有css3支持),以至于达不到我们想要的效果,下面来看一种: 下面是css: .invalid:-moz-placeh ...

  3. LaTeX算法排版

    需要包含的 \usepackage[noend]{algpseudocode} \usepackage{algorithmicx,algorithm} 源码 \begin{algorithm}[t]\ ...

  4. 使用explain查看mysql查询执行计划

    explain语句: 字段解释: type:     all(全表扫描)     ref() possible_keys:     预测使用什么列做为索引 key:     实际使用的key     ...

  5. crontab的坑

    1. 命令  全路径 (eg:which mysql) 2.执行脚本  (脚本中加上#!/bin/bash) eg: /bin/bash script.sh 3. 输出信息(>>) 使用全 ...

  6. iframe自适应高度js

    <iframe src="http://www.fufuok.com/" id="iframepage" name="iframepage&qu ...

  7. 树莓派3b+ 用samba与windows共享文件

    1. 树莓派安装samba sudo apt-get install samba 2. 设置一个公共目录 cd /;sudo mkdir share;sudo chmod 777 sharesudo ...

  8. asp.net 获取当前项目的根目录路径

    获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"]) Server.MapPath(" ...

  9. ajax异步验证用户名密码,提示路径错误

    使用thinkphp框架异步验证用户名和密码的时候,ajax路径错误可能有多重情况.我遇到的是,我自感路径没问题,且先前使用无错.由于多人合作使用svn,所以在更新代码后,使用firebug显示一直是 ...

  10. Asp.net点击按钮弹出文件夹选择框的实现(网页)

    本文地址:http://www.cnblogs.com/PiaoMiaoGongZi/p/4092112.html 在Asp.net网站实际的开发中,比如:需要实现点击一个类似于FileUpload的 ...