当前位置: 首页 > news >正文

嵌入式学习笔记 - HAL库对外设的封装

一 外设封装结构

HAL库对外设的封装使用了xx_HandleTypeDef类型的外设句柄结构体,这个句柄结构体的第一个成员Instance(xx_TypeDef类型)一般为该外设的所有寄存器的起始基地址,第二个成员Init(xx_InitTypeDef类型)一般为该外设的设置的需要设置的参数,以CAN 模块举例说明:

typedef struct
{
  CAN_TypeDef                 *Instance;  /*!< Register base address  */

① 第一个变量是一个指针*Instance,类型为CAN_TypeDef,如下,其实是所有CAN外设的寄存器的集合:

在初始化外设函数HAL_xx_INIT()执行之前时,HAL将这个变量(指针)赋值为该外设的基地址

  CAN_InitTypeDef             Init;       /*!< CAN required parameters        */

② 第二个变量一般为结构体Init,这个结构体是一个很多参数的集合如下图,在初始化外设函数HAL_xx_INIT()执行之前时,HAL会将外设结构体句斌的Init成员的这些参数赋值,

最终HAL会在HAL_xx_INIT()执行时把这些参数赋值到第一个变量代表的地址中

  CanTxMsgTypeDef*            pTxMsg;     /*!< Pointer to transmit structure  */

  CanRxMsgTypeDef*            pRxMsg;     /*!< Pointer to reception structure for RX FIFO0 msg */

  CanRxMsgTypeDef*            pRx1Msg;    /*!< Pointer to reception structure for RX FIFO1 msg */

  __IO HAL_CAN_StateTypeDef   State;      /*!< CAN communication state        */

  HAL_LockTypeDef             Lock;       /*!< CAN locking object             */

  __IO uint32_t               ErrorCode;  /*!< CAN Error code                 */

}CAN_HandleTypeDef;

 如果该外设有其他的附加功能参数

比如CAN外设有过滤器,并有相应的过滤器寄存器参数,也是以同样的方式将这个过滤器的相关参数赋值到第一个变量代表的基地址的寄存器里,如下图:

CAN外设过滤器结构体参数:

将过滤器参数赋值到CAN外设句柄的第一个变量指示的地址

相关文章:

  • 【卫星通信】Skylo与ViaSat标准建议详解:基于NB-IoT NTN通过GEO卫星实现IMS语音通话的解决方案
  • 【卫星通信】3GPP标准提案:面向NB-IoT(GEO)场景的IMS信令优化方案-降低卫星通信场景下的语音呼叫建立时延
  • Python装饰器:优雅增强函数行为的艺术
  • import引入api报select.default is not a function异常解析
  • 细节致胜:如何重塑反向海淘用户体验
  • 洛谷 P5711:闰年判断
  • IO扩展的一种简易方法
  • java在银行业务数值金额计算问题处理篇
  • 《A Gentle Introduction to Graph Neural Networks》
  • 前端与协议
  • H5快速学习
  • java 设计模式_行为型_15迭代器模式
  • vulnyx Diff3r3ntS3c writeup
  • QNAP威联通NAS配置SFTP与内网穿透技术实现远程文件访问
  • 2.6 激光雷达消息格式
  • NAS 资源帖
  • QT打包应用
  • AUTOSAR图解==>AUTOSAR_SRS_OCUDriver
  • 基于可靠消息确保分布式事务的最终一致性:以电商系统中订单服务的新建订单为例
  • springboot音乐网站与分享平台
  • 做电商必须知道的网站/app运营推广是干什么
  • 网站开发哪家公司好/友情链接只有链接
  • 长沙做网站工作室/无锡网站优化公司
  • wordpress编辑器哪个好用吗/推广关键词优化公司
  • 招聘网站可做哪些推广方案/360推广
  • 品牌商城网站开发/如何查看网站权重