在HAL_UART_MspInit()中配置GPIO又需要进行如下两步操作: 1.定义GPIO_InitTypeDef初始化结构体变量作为所要初始化GPIO的配置的“暂存”。 2.然后判断此次调用HAL_UART_MspInit()函数的UART外设,根据不同的UART外设对于相应的GPIO和时钟进行如下操作: 启动所用UART外设的时钟。 启用所用GPIO的时钟。 配置GPIO_InitType...
4.stm32f4xx_hal_uart.c源文件中有HAL_UART_MspInit的弱实现 -->__weak修饰的函数其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的 文件会优先指向外部文件的函数符号;因此HAL_UART_MspInit函数实现了重写。 /** * @brief UART MSP Init. * @param huart Pointer...
2.MX生成的代码会调用HAL_UART_MspInit();来初始化UART,当然这个代码也是自动生成,不过用户可以在这个函数里面添加自己想要添加的操作,时面包括了NVIC_Configuration,DMA_Configuration等,也可以添加一些置位操作如__HAL_UART_ENABLE,__HAL_UART_ENABLE_IT等等 3.在HAL_UART_MspDeInit()中添加一些与HAL_UART_MspInit...
执行HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)时会先调用MSP初始化回调函数进行MCU初始化,打开这个函数,在356行有 HAL_UART_MspInit(huart); 这句前面是看用户有没有自定义回调函数,判断是否执行这个。自定义下面会写。在这里面可以执行GPIO和中断相关配置。打开这个函数里面是 __weak void HAL_...
3.在HAL_UART_MspDeInit()中添加一些与HAL_UART_MspInit相反的操作来完成UART的重置操作 对于以上的初始化操作,都可以由stm32cubemx自动生成,无需去具体配置寄存器。 而用户使用HAL库来驱动UART,在初始化好参数之后, 官方提供了三种方式 一、轮询模式(Polling mode IO operation) ...
在usart.c文件的HAL_UART_MspInit函数中,添加如下代码,作用是打开接收、发送、以及错误检测中断:(这部分代码是HAL库里实现的,可以方便地设置中断) 中断服务程序中,如下编写,用条件编译,将原来的中断服务函数去除掉(这样代码写在user代码区,重新生成代码时也不会被cubemx删除),添加自己的中断服务函数: ...
void HAL_UART_MspInit(UART_HandleTypeDef *huart); //串口发送函数 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); //串口接收函数 HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size...
HAL_PPP_MspInit()和 HAL_PPP_MspDeInit** 例如: __weak void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)。 在HAL_PPP_Init() 函数中被调用,用来初始化底层相关的设备(GPIOs, clock, DMA, interrupt) 2、处理完成回调函数:HAL_PPP_ProcessCpltCallback*(Process指具体某种处理,如UART的Tx), 例如: __wea...
void HAL_UART_MspInit(UART_HandleTypeDef *huart);void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); 在这些函数中,只需要调用初始化时定义的句柄UART1_Handler就好。 2、MSP函数 MSP: MCU Specific Package 单片机的具体方案 MSP是指和MCU相关的初始化,引用一下正点原子的解释,个人觉得说的很明白: ...
extern UART_HandleTypeDef com3_handle;/***串口4相关宏定义***