1.配置串口IO、中断等底层的东西需要在用户文件中重写HAL_UART_MspInit函数
2.hal库是在stm32f4xx_hal_msp.c文件中重写的HAL_UART_MspInit函数,分析如下:
stm32f4xx_hal_msp.c通过间接方式最终包含了stm32f4xx_hal_uart.h,包含关系如下:
stm32f4xx_hal_msp.c
-->#include "main.h"
  -->#include "stm32f4xx_hal.h"
    -->#include "stm32f4xx_hal_conf.h"
      -->#define HAL_UART_MODULE_ENABLED //是否使用串口模块的开关,打开开关则包含头文件 #include "stm32f4xx_hal_uart.h"

3.stm32f4xx_hal_uart.h头文件中有HAL_UART_MspInit函数的声明
-->void HAL_UART_MspInit(UART_HandleTypeDef *huart);//定义在stm32f4xx_hal_uart.h头文件中

4.stm32f4xx_hal_uart.c源文件中有HAL_UART_MspInit的弱实现

-->__weak修饰的函数其作用是将当前文件的对应函数声明为弱函数符号,如果外部文件出现相同的函数名,最终编译出来的
文件会优先指向外部文件的函数符号;因此HAL_UART_MspInit函数实现了重写。

/**
* @brief UART MSP Init.
* @param huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART module.
* @retval None
*/
__weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_MspInit could be implemented in the user file
*/

}

4.重写后的函数

 1 /**
2 * @brief UART MSP Initialization
3 * This function configures the hardware resources used in this example:
4 * - Peripheral's clock enable
5 * - Peripheral's GPIO Configuration
6 * @param huart: UART handle pointer
7 * @retval None
8 */
9 void HAL_UART_MspInit(UART_HandleTypeDef *huart)
10 {
11 GPIO_InitTypeDef GPIO_InitStruct;
12
13 /*##-1- Enable peripherals and GPIO Clocks #################################*/
14 /* Enable GPIO TX/RX clock */
15 USARTx_TX_GPIO_CLK_ENABLE();
16 USARTx_RX_GPIO_CLK_ENABLE();
17 /* Enable USART2 clock */
18 USARTx_CLK_ENABLE();
19
20 /*##-2- Configure peripheral GPIO ##########################################*/
21 /* UART TX GPIO pin configuration */
22 GPIO_InitStruct.Pin = USARTx_TX_PIN;
23 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
24 GPIO_InitStruct.Pull = GPIO_NOPULL;
25 GPIO_InitStruct.Speed = GPIO_SPEED_FAST;
26 GPIO_InitStruct.Alternate = USARTx_TX_AF;
27
28 HAL_GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStruct);
29
30 /* UART RX GPIO pin configuration */
31 GPIO_InitStruct.Pin = USARTx_RX_PIN;
32 GPIO_InitStruct.Alternate = USARTx_RX_AF;
33
34 HAL_GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStruct);
35 }

STM32F4 HAL库中是如何实现UART IO配置的?的更多相关文章

  1. stm32 HAL库笔记(一)——普通IO口

    今天介HAL库操作普通IO口,就是输入/输出. 如果用CubeMX配置io工程,打开以后可以看到如下代码: GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB ...

  2. STM32的HAL库中的DMA_FLAG_TCIF3_7等几个宏定义的含义

    DMA_FLAG_TCIF0_4就是指DMA的通道0和通道4,DMA_FLAG_TCIF1_5就是指DMA的通道1和通道5,DMA_FLAG_TCIF2_6就是指DMA的通道2和通道6,DMA_FLA ...

  3. STM32 HAL库学习系列第1篇 ADC配置 及 DAC配置

    ADC工作均为非阻塞状态 轮询模式 中断模式 DMA模式 库函数: HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//轮询模式,需放 ...

  4. STM32 HAL库学习系列第2篇 GPIO配置

    GPIO 库函数 基本就是使用以下几个函数 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void H ...

  5. 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章       STM32H7的USART串口基础知识和 ...

  6. STM32 之 HAL库(固件库) _

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  7. STM32 HAL库与标准库的区别_浅谈句柄、MSP函数、Callback函数

    最近笔者开始学习STM32的HAL库,由于以前一直用标准库进行开发,于是发现了HAL库几点好玩的地方,在此分享. 1.句柄在STM32的标准库中,假设我们要初始化一个外设(这里以USART为例)我们首 ...

  8. STM32 之 HAL库(固件库)

    1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...

  9. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  10. STM32基于HAL库通过DMA读写SDIO

    通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...

随机推荐

  1. 开始学python不知该怎么学?Python基础教程(第2版) 免费下载

    Python基础教程(第2版)pdf高清版免费下载  解压码:n0nl   内容简介  · · · · · · 本书是经典教程的全新改版,作者根据Python 3.0版本的种种变化,全面改写了书中内容 ...

  2. python发送钉钉消息通用脚本

    1.使用shell生成需要发送的内容. 2.调用该脚本发送文本内容python3,其中的文件 /wj/sbjk,需要改成直接需要发送的文件. [root@manager dingding]# more ...

  3. VIT论文笔记

    VIT An image is worth 16x16 words: transformers for image recognition at scale 将transformer首次应用在视觉任务 ...

  4. Windows10安装VMware

    系统环境: Windows 10 安装步骤: 1.下载vmware https://my.vmware.com/cn/web/vmware/downloads 2.安装(这里安装语言我选择的是中文) ...

  5. vue-cli4.3中配置publicPath和router后,报错chunk-vendors.js:1 Uncaught SyntaxError: Unexpected token '<'

  6. SpringBoot的使用

    1. Spring Boot概述 目标:了解Spring Boot是什么,有什么作用 小结: Spring Boot是一个便捷搭建 基于spring工程的脚手架:作用是帮助开发人员快速搭建大型的spr ...

  7. 组建LAN

    推荐 cisco packet tracer 软件,可以画拓扑图,组件局域网等. ---------------------------------- 物联网:世界上很多物体的连接.物联网与现有的互联 ...

  8. 面试题 --MySQL索引

    InnoDB引擎与MyISAM引擎的区别 ? InnoDB支持事务,MyISAM不支持事务 InnoDB支持行级锁,表级锁,MyISAM只支持表级锁 InnoDB支持外键,MyISAM不支支持外键 I ...

  9. C/C++中的可变参数

    所需的函数参数不固定,需要用到带有可变参数的函数,类似printf();项目中需要打印信息等也会用到带可变参数的函数. C语言标准库的头文件 #include<stdarg.h>包含一组能 ...

  10. 安装指定版本homeassistant

    pip3 install homeassistant==0.84.5