3.在stm32f1xx_hal_msp.c内定义了HAL_MspInit(void)函数 (也就是间接的通过stm32f1xx_hal.h文件先声明了HAL_MspInit(void)函数,再接着对其进行具体的定义,为什么要在stm32f1xx_hal.h中先声明,是因为还要在stm32f1xx_hal.c中还进行了弱定义)。 4.stm32f1xx_hal.c内弱定义了 __weak void HAL_MspInit...
1. MSP 栈顶地址 当芯片配置为从主闪存启动(例如 BOOT0 = 0,BOOT1 = x)时,存储控制器会自动将起始地址 0x00000000 映射到主闪存的起始物理地址(通常是 0x08000000)。这是通过芯片内部的硬连线和一些基本的逻辑电路来实现的,这些电路会根据启动模式引脚(BOOT0 和 BOOT1)的状态来确定初始的地址映射关系。 这...
在HAL库中,几乎每初始化一个外设就需要设置该外设与单片机之间的联系,比如IO口,是否复用等等,可见,HAL库相对于标准库多了MSP函数之后,移植性非常强,但与此同时却增加了代码量和代码的嵌套层级。可以说各有利弊。 同样,MSP函数又可以配合句柄,达到非常强的移植性: voidHAL_UART_MspInit(UART_HandleTypeDef *huart)...
stm32l4xx_hal_msp.c 文件 MSP,全称为 MCU support package,函数名字中 带有 MspInit 的函数,它们的作用是进行 MCU 级别硬件初始化设置,并且它们通常会被上一层的初始化函数 所调用,这样做的目的是为了把 MCU …
通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库,而极少部分人会通过直接配置寄存器进行开发。 网上关于标准库、HAL库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发...
在HAL库中,几乎每初始化一个外设就需要设置该外设与单片机之间的联系,比如IO口,是否复用等等,可见,HAL库相对于标准库多了MSP函数之后,移植性非常强,但与此同时却增加了代码量和代码的嵌套层级。可以说各有利弊。 同样,MSP函数又可以配合句柄,达到非常强的移植性: ...
stm32h7xx_hal_msp.c是MCU Sopport Package(MCU支持包)的源文件,用户需要在其中重写某些外设的MSP程序,主要内容和原理暂不说明。 stm32h7xx_hal_msp.c文件 system_stm32h7xx.c文件即STM32Cube_FW_H7_V1.3.0\Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c的拷贝,所以不再赘述。
最近笔者开始学习STM32的HAL库,由于以前一直用标准库进行开发,于是发现了HAL库几点好玩的地方,在此分享。1.句柄在STM32的标准库中,假设我们要初始化一个外设(这里以USART为例)我们首先要初始化他们的各个寄存器。在标准库中,这些操作都是利用固件库结构体变量+固件库Init函数实现的: USART_InitTypeDef USART_InitStruc...
void HAL_UART_MspInit(UART_HandleTypeDef *huart); void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); 在这些函数中,只需要调用初始化时定义的句柄UART1_Handler就好。 2、MSP函数 MSP:MCUSpecificPackage单片机的具体方案 MSP是指和MCU相关的初始化,引用一下正点原子的解释,个人觉得说的很明白: ...
void HAL_UART_MspInit(UART_HandleTypeDef *huart); 在这些函数中,只需要调用初始化时定义的句柄UART1_Handler就好。 2、MSP函数 MSP: MCU Specific Package 单片机的具体方案 MSP是指和MCU相关的初始化,引用一下正点原子的解释,个人觉得说的很明白: