STM32F4 HAL库中是如何实现UART IO配置的?
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配置的?的更多相关文章
- stm32 HAL库笔记(一)——普通IO口
今天介HAL库操作普通IO口,就是输入/输出. 如果用CubeMX配置io工程,打开以后可以看到如下代码: GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_GPIOB ...
- 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 ...
- STM32 HAL库学习系列第1篇 ADC配置 及 DAC配置
ADC工作均为非阻塞状态 轮询模式 中断模式 DMA模式 库函数: HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//轮询模式,需放 ...
- STM32 HAL库学习系列第2篇 GPIO配置
GPIO 库函数 基本就是使用以下几个函数 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void H ...
- 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章 STM32H7的USART串口基础知识和 ...
- STM32 之 HAL库(固件库) _
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- STM32 HAL库与标准库的区别_浅谈句柄、MSP函数、Callback函数
最近笔者开始学习STM32的HAL库,由于以前一直用标准库进行开发,于是发现了HAL库几点好玩的地方,在此分享. 1.句柄在STM32的标准库中,假设我们要初始化一个外设(这里以USART为例)我们首 ...
- STM32 之 HAL库(固件库)
1 STM32的三种开发方式 通常新手在入门STM32的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的.一般大多数都会选用标准库和HAL库,而极少部分人会通过直 ...
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章 STM32H7的HAL库框架设计学 ...
- STM32基于HAL库通过DMA读写SDIO
通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或 ...
随机推荐
- 只会Jquery,后端程序员如何学会前端(webpack,react,babel,es5,es6)
写在前 希望通过短暂的学习,可以达到一下目标: 1.能看懂现在前端的工程化手段 2.知道当前前端群体中大致的解决问题的思路 3.当前的问题在哪里,技术发展趋势是什么 4.建立起自己的认知模型 文章内容 ...
- charles证书安装-客户端证书
1.iOS设置教程: 1)wifi中配置代理 2)浏览器中输入chls.pro/ssl,进行证书下载 3)证书下载成功后,设置--通用--描述文件–安装刚下载的证书 4)设置--通用--关于本机--证 ...
- Java面向对象之类与对象的创建
类与对象的创建 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物. 1.动物.植物.手机.电脑..... 2.Person类.Pet类.Cat类等,这些类都是用来 ...
- Java控制流程(复习)
流程控制语句 流程控制语句包括:顺序结构,分支结构,循环结构 分支结构 if语句: 第一种: if(关系表达式){ 语句体 } else{ 语句体2 } 第二种: if (){ } else if ( ...
- uniapp对接ChatGPT 简单实现对话功能
最近很火的ChatGPT来了!我也是做了一个最最基础的模型,让大家更通俗易懂! 先看效果: 接下来直接上代码: <template> <view class="conte ...
- md工具
C:\Users\XJ\AppData\Roaming\Typora 删掉后重新打开就可以使用了,之前做的配置都失效了,需要重新配置:允许折叠大纲,图片存储方式. 把自动检测更新给关闭
- HCIP-进阶实验03-网络流量路径控制
HCIP-进阶实验03-网络流量路径控制 实验需求 某城域网网络环境部署规划如图所示,该网络通过OSPF协议进行部署设计,分为四个区域,分别为骨干区域0.普通区域1.2.3.其中普通区域1为特殊区域N ...
- 至少有K个重复字符的最长子串
传送门 /** * 分治 */ class Solution { // dp[i]:表示以i为结尾满足条件的子串的长度 public int longestSubstring(String s, in ...
- moduleNotFoundError:No module named 'exceptions'
如果pip install docx 过请先卸载,输入如下指令: pip uninstall docx 方法一: pip install python-docx 方法二: 下载: python_doc ...
- 解决 VSCode git commit 时 No such file or directory 报错问题
在git 进行 commit 时出现了 Git: .git/hooks/pre-commit: line 2: ./node_modules/pre-commit/hook: No such file ...