STM32——端口复用与重映射概述与配置(HAL库)

文章目录

前言

本篇文章介绍了在单片机开发过程中使用的端口复用与重映射。做自我学习的简单总结,不做权威使用,参考资料为正点原子STM32F1系列精英板HAL库开发手册。我也做了相关对比,其实HAL库与标准库差别不大,HAL库封装更多更好移植,原理上是通用的。

一、什么是端口复用?什么是重映射?有什么区别?

STM32F1 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。

根据正点资料和自己搜索的资料,大概总结,端口复用就是一个端口有多个功能,我们查看原理图的时候有以下标志,表示是个复用端口,既可以作为PD2IO,还可以作为TIM定时器和UART串口和SDIO接口。

映射就是寄存器配置,某一位改变其IO口的功能,比如使能第三位原来是串口的TX,由于不满足配置要求,比如电压、频率等,换成了使能第四位为TX,那么重映射后,引脚的物理位置发生变化。

二、端口复用配置

参考正点资料,例子为配置 GPOPA.9,GPIOA.10 口为串口 1 复用功能的一般步骤。
1.首先,我们要使用 IO 复用功能,必须先打开对应的 IO 时钟和复用功能外设时钟,这里我们使用了 GPIOA 以及 USART1,所以我们需要使能 GPIOA 和 USART1 时钟。方法如下:

c 复制代码
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟 
__HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟
__HAL_RCC_AFIO_CLK_ENABLE(); //使能辅助功能 IO 时钟 

2. 然后,我们在 GIPOx_MODER 寄存器中将所需 IO(对于串口 1 是 PA9,PA10)配置为复用功能。
3. 最后,我们还需要对 IO 口的其他参数,例如上拉/下拉以及输出速度等进行配置。

上面三步,在我们 HAL 库中是通过 HAL_GPIO_Init 函数来实现的,参考代码如下:

c 复制代码
GPIO_InitTypeDef GPIO_Initure; 
GPIO_Initure.Pin=GPIO_PIN_9;//PA9 
GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出 
GPIO_Initure.Pull=GPIO_PULLUP;//上拉 
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速 
HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9 

通过上面的配置,PA9 复用为串口 1 的发送引脚。这个时候,PA9 将不再作为普通的 IO 口

使用。对于 PA10,配置方法一样,修改 Pin 成员变量值为 PIN_10 即可。

相关推荐
blessing。。37 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
嵌新程2 小时前
day03(单片机高级)RTOS
stm32·单片机·嵌入式硬件·freertos·rtos·u575
Lin2012302 小时前
STM32 Keil5 attribute 关键字的用法
stm32·单片机·嵌入式硬件
电工小王(全国可飞)2 小时前
STM32 RAM在Memory Map中被分为3个区域
stm32·单片机·嵌入式硬件
maxiumII3 小时前
Diving into the STM32 HAL-----DAC笔记
笔记·stm32·嵌入式硬件
美式小田5 小时前
单片机学习笔记 9. 8×8LED点阵屏
笔记·单片机·嵌入式硬件·学习
兰_博6 小时前
51单片机-独立按键与数码管联动
单片机·嵌入式硬件·51单片机
时光の尘6 小时前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
嵌入式大圣8 小时前
单片机结合OpenCV
单片机·嵌入式硬件·opencv
日晨难再9 小时前
嵌入式:STM32的启动(Startup)文件解析
stm32·单片机·嵌入式硬件