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

关于HAL库的知识1----MSP函数

在 HAL 库中,大部分外设在初始化时都会调用一个对应的 MSP 初始化函数,这个函数的主要作用就是配置与外设相关的底层硬件资源,比如时钟、GPIO、中断、DMA 等。常见的外设及其对应的 MSP 函数包括:

  • UART/USART:对应 HAL_UART_MspInit() 和 HAL_UART_MspDeInit()
  • SPI:对应 HAL_SPI_MspInit() 和 HAL_SPI_MspDeInit()
  • I2C:对应 HAL_I2C_MspInit() 和 HAL_I2C_MspDeInit()
  • CAN:对应 HAL_CAN_MspInit() 和 HAL_CAN_MspDeInit()
  • ADC:对应 HAL_ADC_MspInit() 和 HAL_ADC_MspDeInit()
  • DAC:对应 HAL_DAC_MspInit() 和 HAL_DAC_MspDeInit()
  • 定时器(TIM):如 HAL_TIM_Base_MspInit()、HAL_TIM_PWM_MspInit() 等,视具体功能而定
  • RTC:对应 HAL_RTC_MspInit() 和 HAL_RTC_MspDeInit()
  • USB:对应 HAL_PCD_MspInit()(针对 USB 外设)
  • SDMMC/SD卡接口:对应 HAL_SD_MspInit() 等

这些 MSP 函数通常由用户在工程的 MSP 文件中(如 stm32fxxx_hal_msp.c)实现,CubeMX 也会根据工程配置自动生成相应的代码。它们确保在调用 HAL_xxx_Init() 初始化外设之前,所有必需的低级硬件配置已经就绪。


gpio.c 文件通常由代码生成工具(例如 CubeMX)生成,并且主要用于配置微控制器中所有通用 GPIO(通用输入输出)引脚的初始化。具体来说,它的作用包括:

  1. 引脚配置初始化
    gpio.c 中通常包含一个初始化函数(如 MX_GPIO_Init()),在这个函数中,针对每个需要配置的 GPIO 引脚,会设置:

    • 工作模式:输入、输出、复用(Alternate Function)、模拟等。
    • 上下拉设置:无上下拉、上拉或下拉电阻。
    • 输出类型和速率:比如推挽输出、开漏输出以及输出速度的设置。
    • 引脚复用功能:当一个引脚需要作为外设(如 UART、SPI 等)的功能时,会配置相应的复用模式。
  2. 时钟使能
    在初始化 GPIO 引脚前,还需要使能对应 GPIO 端口的时钟,以确保该端口可以正常工作。这通常也在 MX_GPIO_Init() 中完成。

  3. 集中管理所有 GPIO 设置
    将所有通用 GPIO 的初始化配置集中放在一个文件中,可以使整个工程的引脚配置一目了然,方便调试和后期维护。

  4. 与外设的关系
    虽然某些外设(如 CAN)的复用引脚配置会放在对应的 MSP 初始化函数中,但一些常见外设(如 UART)的引脚配置可能直接包含在 MX_GPIO_Init() 中,具体取决于工程的组织方式和代码生成工具的配置。

总结来说,gpio.c 的主要作用是对微控制器的各个 GPIO 引脚进行初始化设置,使得所有需要用到的引脚在程序开始运行时已经处于预期的工作状态。它负责配置引脚的工作模式、时钟、上下拉及复用功能,而不涉及外设的其他低级配置(如外设时钟、中断设置等),这些通常在对应的 MSP 初始化函数中处理。

原文地址:https://blog.csdn.net/qq_53206057/article/details/146382630
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/592771.html

相关文章:

  • [解决] PDF转图片,中文乱码或显示方框的解决方案
  • 华为ipd流程华为流程体系管理华为数字化转型流程数字化管理解决方案介绍81页精品PPT
  • gralloc usage flags
  • dns实现主服务器
  • 如何解析返回的商品信息?
  • 深度解析扣减系统设计:从架构到实践
  • HAL库编程知识点---Can.c和Driver_can.c分层开发
  • 【论文阅读】Availability Attacks Create Shortcuts
  • Noe.js 原生 http 模块 vs Express 框架对比
  • c语言基础编程入门练习题
  • 蓝桥杯2023年第十四届省赛真题-子矩阵
  • 基于springboot医疗平台系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0
  • Oracle 19c更换undo表空间操作步骤
  • TCP、UDP协议的应用、ServerSocket和Socket、DatagramSocket和DatagramPacket
  • 2025年PHP框架推荐及对比
  • 【HarmonyOS Next】鸿蒙应用实现弹框DialogHub详解
  • 标准 Git Commit 模板格式指南
  • 【第14节】windows sdk编程:进程与线程介绍
  • Java-泛型总结