\quad\;\;\,MSP(MCU support package),它的作用是进行 MCU 级别的硬件初始化设置,并且它们通常会被上一层的初始化函数所调用,这样做的目的是为了把 MCU 相关的硬件初始化剥夺出来,方便用户代码在不同型号的 MCU 上移植。
\quad\;\;\,stm32f4xx_hal_msp.c 文件定义了两个函数 HAL_MspInit() 和 HAL_MspDeInit()。这两个函数分别被文件 stm32f4xx_hal.c 中的 HAL_Init 和 HAL_DeInit 所调用。

函数HAL_Init

HAL_StatusTypeDef HAL_Init(void)
{/* Configure Flash prefetch, Instruction cache, Data cache */
#if (INSTRUCTION_CACHE_ENABLE != 0U)__HAL_FLASH_INSTRUCTION_CACHE_ENABLE();
#endif /* INSTRUCTION_CACHE_ENABLE */#if (DATA_CACHE_ENABLE != 0U)__HAL_FLASH_DATA_CACHE_ENABLE();
#endif /* DATA_CACHE_ENABLE */#if (PREFETCH_ENABLE != 0U)__HAL_FLASH_PREFETCH_BUFFER_ENABLE();
#endif /* PREFETCH_ENABLE *//* Set Interrupt Group Priority */HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);/* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */HAL_InitTick(TICK_INT_PRIORITY);/* Init the low level hardware */HAL_MspInit();/* Return function status */return HAL_OK;
}

此函数用于初始化HAL库,此函数主要实现如下功能:

  • 设置NVIC优先级分组是4。
  • 设置滴答定时器的每1ms中断一次。
  • 函数 HAL_Init 里面调用的 HAL_MspInit 一般在文件stm32f4xx_hal_msp.c 里面做具体实现,主要用于底层初始化。此函数也在文件 stm32f4xx_hal.c 里面,只是做了__week(弱定义),方便重新写。

注:必须在main函数里面优先调用此函数,且保证每1ms一次滴答中断。

此函数的使用比较简单,上电后优先调用即可。

函数HAL_DeInit

HAL_StatusTypeDef HAL_DeInit(void)
{/* Reset of all peripherals */__HAL_RCC_APB1_FORCE_RESET();__HAL_RCC_APB1_RELEASE_RESET();__HAL_RCC_APB2_FORCE_RESET();__HAL_RCC_APB2_RELEASE_RESET();__HAL_RCC_AHB1_FORCE_RESET();__HAL_RCC_AHB1_RELEASE_RESET();__HAL_RCC_AHB2_FORCE_RESET();__HAL_RCC_AHB2_RELEASE_RESET();__HAL_RCC_AHB3_FORCE_RESET();__HAL_RCC_AHB3_RELEASE_RESET();/* De-Init the low level hardware */HAL_MspDeInit();/* Return function status */return HAL_OK;
}

此函数用于复位HAL库和滴答时钟。

  • 复位了 AHB1,2,3,4 的时钟以及 APB1L,APB1H,APB2,3,4 的时钟。
  • 函数 HAL_DeInit 里面调用的 HAL_MspDeInit 一般在文件stm32f4xx_hal_msp.c 里面做具体实现,主要用于底层初始化,跟函数HAL_Init 里面调用的 HAL_MspInit 是一对。当前此函数也在文件stm32f4xx_hal.c里面,只是做了弱定义。

此函数的使用比较简单,需要调用的时候直接调用即可。

比如串口的初始化
1、我们要初始化和MCU无关的东西:例如串口协议,其中包括波特率,奇偶校验,停止位等等。这些设置和使用什么样的MCU没有任何关系,可以使用F1的MCU,也可以是F2…F4,甚至是PC上的串口。所以就把串口抽像成为一个“串口”。
2、有了抽像的串口,这个“串口”就要在MCU上进行承载,这里用STM32F4进行承载,PA9做为发送,PA10做为接收。MSP就是要初始化PA9、PA10,配置这两个引脚。

所以HAL驱动方式的初始化流程就是:
HAL_USART_Init() ----->HAL_UART_MspInit() 先初始化协议,再初始化MCU的引脚。

HAL库中的MSP文件,及HAL_Init和HAL_DeInit相关推荐

  1. HAL 库中 GPIO 工作模式配置(H7)

    1.配置流程 (1)时钟使能 (2)结构体赋值 (3)写入寄存器 2.配置说明 2.1使能 IO 口时钟 调用函数为: __HAL_RCC_GPIOX_CLK_ENABLE //使能GPIO时钟(其中 ...

  2. 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) ....

    可视化webpart基础开发--TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 作者:miragesky2049 原文地址:http://blog.csdn.net/mirages ...

  3. SharePoint 2010遍历文档库中所有的文件,文件夹

    转:http://hi.baidu.com/sygwin/item/f99600849d51a12b110ef3eb 创建一个可视WebPart,并拖放一个label控件到ascx文件上,用于显示结果 ...

  4. GD32F427使用HAL库读写U盘文件的BUG

    GD32F427使用HAL库读写U盘文件时(使用Fatfs文件系统),上电后,第一次读U盘文件,当文件大于11KB后,总是卡死,卡在USB状态这边,一直报BUSY.导致USB底层报超时故障.解决方法: ...

  5. 如何从HAL库中找到寄存器的蛛丝马迹

    以下文章来源于:公_众_号开源电子网 读取更多技术文章,请扫码关注 如何从HAL库中找到寄存器的蛛丝马迹 对于初学者来说,有时候知其然而不知其所以然,换句话来讲,知道这个东西是这样子操作,但是不知道为 ...

  6. 关于HAL库中系统嘀嗒时钟的简单探究

    在利用HAL库建立STM32工程时,系统嘀嗒时钟的初始化是在函数HAL_Init()中实现的: HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash ...

  7. STM32标准库与HAL库中的Mode和Pull设置

    目录 概述 HAL库 标准库 再看HAL库 概述 最近做SDK的BSP驱动.之前使用STM32CubeMX进行开发,设计GPIO的初始化接口包括了mode.pull两个参数. 现在对接另一款国产芯片, ...

  8. git 清除版本库中的忽略文件

    一.在已经提交的git代码管理里,删除不想提交的目录或文件 1.在 .gitignore 里面删除想要删除的文件*(没有就不用)(我以app/build 文件夹为例子) git add app/bui ...

  9. esp32 添加官方组件库中的头文件提示“No such file or directory”【已解决】

    环境 windows下vscode ssh到Linux对esp32项目进行操作. 背景 使用espadf框架下的wwe例程添加#include "baidu_access_token.h&q ...

最新文章

  1. windows系统中的常用网络命令
  2. java统计 pv uv_统计PV、UV的新武器——Aviator
  3. 【转】浅谈MS-SQL锁机制
  4. CodeForces - 1295D Same GCDs(欧拉函数)
  5. 10.1-控制单元CU的组合逻辑设计
  6. 利用Nmap对MS-SQLSERVER进行渗透
  7. 【转】数组指针指针数组
  8. 8s 配置session保持_分布式session共享解决方案
  9. Shiro 常用标签
  10. java基于微信小程序的学习打卡系统 uniapp 小程序
  11. 可道云kodexplorer隐藏免费版按钮及简单修改使用方法
  12. RapidMiner Studio 自动模型
  13. 安卓开发学习之锁屏的实现
  14. 2008服务器系统备份工具,服务器2008系统备份
  15. Parasoft全面发布最广泛的MISRA规则覆盖
  16. “二舅”火了,自媒体短视频“爆火”的基本要素,你知道吗?
  17. bigdata101:Permission denied (publickey .....) 这次的不一样
  18. 新冠疫情下的化工企业数字化转型
  19. oracle事务数统计,【学习笔记】Oracle数据库收集统计信息的两种方法介绍案例
  20. Docker启动MySql时Exited (1) 8 seconds ago或者Error response from daemon: Container xx is not running的解决方法

热门文章

  1. 2022 199管综真题及答案解析
  2. python代码格式怎么写比较好
  3. Spark 全套知识体系,终于搞到了!
  4. java模拟一个军队作战,()系统在作战过程中帮助指挥和参谋人员实施各项作战业务,辅助指挥人员对部队和武器实施指挥控制...
  5. L1-7 矩阵列平移
  6. 第十二章 HTTAPI – FreeSWITCH向Webserver寻问下一步操作
  7. CRF进行实体的识别
  8. 关于“Guice ”
  9. bzoj 4398 福慧双修——二进制分组
  10. 自定义Paging分页