欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 嵌入式学习笔记 - HAL库对外设的封装

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

2025/11/12 4:46:55 来源:https://blog.csdn.net/qq_35771411/article/details/148655451  浏览:    关键词:嵌入式学习笔记 - 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外设句柄的第一个变量指示的地址

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词