首页 > 其他 > 详细

嵌入式系统:驱动层

时间:2021-05-25 15:30:03      阅读:12      评论:0      收藏:0      [点我收藏+]

Hardware Abstraction Layer:对硬件(外设)进行抽象

一、外设的抽象

1.外设“类”

外设结构体

  • 每个外设的所有寄存器的地址是集中且连续的
  • 每个寄存器相对于外设段地址,都有相同的偏移量
  • 寄存器类型:uint32_t、uint16_t、uint8_t 代表单个寄存器长度
typedef struct{
  寄存器类型 寄存器名;
  ...
} PPP_TypeDef;

2.外设“对象”

外设结构体指针

  • 存储器映射:在同一型号MCU中,都被分配一个固定的外设段地址
  • 外设段地址的形式为 0xhhhh hhhh UL
#define PPPx_BASE      该外设段地址
#define PPPx               ((PPP_Type *) PPPx_BASE)

3.“寄存器”

引用外设结构体指针的成员变量

某个外设的段地址+某个寄存器的偏移量

PPPx->寄存器名

4.“接口函数”

对“寄存器”位操作:实现外设的各种功能

PPP_操作名(){
  ...
  PPPx->寄存器名...//进行相关的位操作
  ...
}

5.ST提供驱动包

STM32Cube固件包:STM32Cube_FW_XX_Vx.x.x
|-Driver 驱动源文件
|-|-【重要】CMSIS
|-|-【重要】stm32XXxx_HAL_Driver
|-|-BSP:ST为官方开发板设计的板级驱动包:NUCLEO板、探索套件板Discovery、评估板EVAL
|-Middlewares:中间件
|-Project :工程文件官方开发板的demo
|-Utilities :公用组件,包括demo的音频、视频、字库
|-Documentation :使用文档
|-Relase_Notes: 版本更新说明

CMSIS:Cortex Microcontroller Software Interface Standard 由ARM设计的CortexM软件接口标准,ARM实现部分接口,厂商实现部分接口

  • CMSIS作为外设最底层驱动:ARM对CM核内外设、ST对STM32的片上外设进行抽象(数据结构和接口函数)

stm32XXxx_HAL_Driver :ST设计的HAL库

  • 依赖于CMSIS,主要实现STM32外设的接口函数
  • ST:为了更换不同型号MCU时,减少移植的工作量,增加了一个抽象层

BPS:板级支持包

  • 依赖于HAL,实现开发板外设的接口函数
  • 开发板厂商:为了调整开发板时,减少应用层移植的工作量,增加了一个抽象层

应用层:主要使用HAL库和BSP库提供的接口函数

二、CMSIS

CubeMX工程目录 外设的数据结构、接口函数 STM32Cube固件包的Driver目录
Drivers\... core_cm4.h等文件 CMSIS\Include
Drivers\... stm32f4xx.h
stm32f411xe.h
system_stm32f4xx.h
CMSIS\Include\Device\ST\STM32F4xx\Include
  • 【ARM定义】CM外设的结构体、结构体指针、接口函数:core_cm4.h等文件
  • 【厂商ST定义】STM32的外设的结构体、结构体指针:stm32f4xx.h、stm32f411xe.h

三、STM32 HAL

CubeMX工程目录 外设的数据结构、接口函数 STM32Cube固件包的Driver目录
Drivers\... stm32f4xx_hal.h
stm32f4xx_hal_cortex.h
stm32f4xx_hal_ppp.h
stm32f4xx_hal_ppp_ex.h
STM32F4xx_HAL_Driver\Inc
Drivers\... stm32f4xx_hal.c
stm32f4xx_hal_cortex.c
stm32f4xx_hal_ppp.c
stm32f4xx_hal_ppp_ex.c
STM32F4xx_HAL_Driver\Src

1.HAL设计

HAL接口函数

  • 初始化函数
  • IO操作函数:入口参数为句柄、轮询后缀start/stop、中断后缀start_it/stop_it、DMA后缀Start_DMA
  • 控制函数
  • 状态函数

HAL数据结构
HandleTypeDef:句柄数据类型

  • Instance:外设实例(外设寄存器)
  • InitTypeDef:每一类功能都有单独的初始化参数
  • 外设状态:保护锁、运行状态
  • DMA通道句柄
  • IO buffer

四、BSP

嵌入式系统:驱动层

原文:https://www.cnblogs.com/rayoli/p/14808321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!