HAL库中的MSP文件,及HAL_Init和HAL_DeInit

      \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的引脚。

  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: msp-exp430f5529_hal 是一个硬件模块程序资源库,适用于 MSP-EXP430F5529 实验板。该资源库包含了一系列的函数和驱动程序,方便开发者在这块实验板上进行嵌入式系统的开发。 首先,msp-exp430f5529_hal 提供了丰富的驱动程序,用于操作实验板上的不同硬件模块。这包括了 GPIO 管脚、UART、SPI、I2C、ADC 等等。开发者可以使用这些驱动程序,快速、方便地实现对这些硬件模块的控制和操作。 其次,msp-exp430f5529_hal 还提供了一些配置函数,用于初始化实验板上的各个硬件模块。通过设置这些配置,开发者可以按照自己的需求来调整硬件模块的工作方式,以适应不同的应用场景。 此外,msp-exp430f5529_hal 还包含了一些实用函数,用于处理常见的操作。例如,它提供了延时函数,用于在代码添加一定的延时,以满足一些特殊需求;它还提供了一些数学函数,如求平方根、求绝对值等等。 总的来说,msp-exp430f5529_hal 是一个非常有用的硬件模块程序资源库,为开发者提供了丰富的函数和驱动程序,可帮助他们更快、更方便地开发嵌入式系统。无论是初学者还是有经验的开发者,都可以从受益,提高开发效率。 ### 回答2: msp-exp430f5529_hal是一个硬件模块程序资源库,专为MSP-EXP430F5529开发板设计。它提供了一系列的API函数,方便开发者对开发板的硬件模块进行控制和操作。 这个硬件模块程序资源库包含了多个子模块,如GPIO、UART、ADC、Timer等,每个子模块都有相应的函数和定义,可以实现对应模块的功能。例如,对于GPIO模块,我们可以通过这个资源库的API函数来控制开发板上的引脚,进行输入输出的操作;对于UART模块,我们可以利用相应的API函数来实现串口通信的功能。 使用msp-exp430f5529_hal的硬件模块程序资源库,开发者可以方便地进行硬件模块的配置和使用,减少了开发的复杂性和繁琐的底层代码编写。只需要简单地调用相应的函数,就可以实现对硬件模块的控制。这不仅节省了开发时间,还提高了开发效率。 此外,msp-exp430f5529_hal的硬件模块程序资源库还提供了一些示例程序,供开发者参考。通过这些示例程序,开发者可以更加深入地了解如何使用这个资源库来实现具体的功能。同时,它还提供了详细的文档和注释,方便开发者查阅和理解。 总的来说,msp-exp430f5529_hal的硬件模块程序资源库是一个简化硬件开发的工具,提供了丰富而方便的API函数给开发者使用,使开发过程更加高效和便捷。 ### 回答3: msp-exp430f5529_hal是一个硬件模块程序资源库,专门为MSP-EXP430F5529开发板设计的。该资源库提供了一系列的函数和驱动程序,用于帮助开发人员在该开发板上快速、方便地进行硬件模块的编程和控制。 msp-exp430f5529_hal资源库包括了多个模块,例如GPIO(通用输入输出)、ADC(模数转换器)、UART(通用异步收发器)、SPI(串行外设接口)等。每个模块都有相应的函数和接口,开发人员可以根据需要调用这些函数来完成对硬件模块的控制。 例如,对于GPIO模块,msp-exp430f5529_hal提供了GPIO_setupPinMux()函数,用于配置引脚的多路复用功能;GPIO_setAsInputPin()函数和GPIO_setOutputLowOnPin()函数,用于将引脚设置为输入模式和输出低电平模式等。 对于ADC模块,msp-exp430f5529_hal提供了ADC_init()函数,用于初始化ADC模块;ADC_startConversion()函数和ADC_getResults()函数,用于启动ADC转换并获取转换结果等。 使用msp-exp430f5529_hal资源库,开发人员可以方便地进行硬件模块的编程和控制,无需关注底层的寄存器操作和硬件细节。这样可以大大提高开发效率,缩短开发周期。 总而言之,msp-exp430f5529_hal是一个为MSP-EXP430F5529开发板设计的硬件模块程序资源库,提供了丰富的函数和驱动程序,方便开发人员进行硬件模块的编程和控制。使用该资源库可以加快开发速度,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Harvey2001

感谢您的认可,无限飓风不断进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值