IO引脚服用和映射

news2024/11/26 4:54:31

什么是端口复用

STM32F4 有很多的内置外设,这些外设的外部引脚都是与 GPIO 复用的。也就是说,一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。在芯片数据手册或STM32F4XX参考手册中都可以查到哪些引脚可以复用为哪些内置外设。

端口复用

例如:USART1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用做GPIO,而用做复用功能USART1的发送接收引脚的时候,叫端口复用。

在这里插入图片描述

STM32F4的端口复用映射原理

STM32F4 系列微控制器 IO 引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF) 连接到对应的 IO 口。这样可以确保共用同一个 IO 引脚的外设之间不会发生冲突。
每个 IO 引脚都有一个复用器,该复用器采用 16 路复用功能输入(AF0 到 AF15),可通过GPIOx_AFRL(针对引脚 0-7)和 GPIOx_AFRH(针对引脚 8-15)寄存器对这些输入进行配置,每四位控制一路复用:
1) 完成复位后,所有 IO 都会连接到系统的复用功能 0(AF0)。
2) 外设的复用功能映射到 AF1 到 AF13。
3) Cortex-M4 EVENTOUT 映射到 AF15。

端口复用映射示意图
在这里插入图片描述

AFRL寄存器

在这里插入图片描述

AFRH寄存器

在这里插入图片描述

端口复用为复用功能配置过程

例:以PA9 PA10配置为USART1为例
① 使能GPIO端口时钟使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

② 复用外设时钟使能
我们现在是将PA9 PA10端口复用为USART1,所以这里要使能USART1时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

③ 端口模式配置为复用功能 GPIO_Init() 函数

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //将模式设置为复用功能

④ 配置GPIO_AFRL或GPIO_AFRH寄存器,将IO连接到所需的AFx
从上面的端口映射示意图中可以看到USART1端口连接在AF7上面(AF7 (USART1…3) )

/* PA9 连接 AF7,复用为 USART1_TX */
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
  
/* PA10 连接 AF7,复用为 USART1_TX */
  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

PA9 PA10复用为USART1的配置过程

//GPIO端口中PA9 PA10映射成USART_1串口功能
	
	GPIO_InitTypeDef GPIO_InitStructure;
	//1. 使能GPIO时钟、USART_1时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1时钟
	
	//2. USART1端口配置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9 与 GPIOA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用功能
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //上拉速度100MHz
	GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9 PA10	

	
	//3. USART1对应引脚复用映射
	GPIO_PinAFConfig(GPIOA,PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1	
	GPIO_PinAFConfig(GPIOA,PinSource10,GPIO_AF_USART1);	//GPIOA10复用为USART1	

如何查找使能外设时钟函数?

比如上面我们PA9,PA10复用为USART1功能,那么使能USART1时钟的时候怎么知道调用那个函数呢???
在STM32F4xx中文参考手册中【 复位和始终控制(RCC) 】章节中查找哪一个寄存器中的某一位可以使能USART1时钟,下图中我们可以看到 RCC APB2外设复位寄存器当中的 Bit4 置1可以复位(使能)USART1该串口时钟。
在这里插入图片描述
那么接下来就在程序文件中(stm32f4xx_rcc.h)找到使能USART1时钟需要调用的函数了。

void        RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

光纤和铜缆:了解不同通信媒介的优势

在现代通信技术中,光纤和铜缆是两种主要的数据传输媒介。它们各有优势和局限性,但都在我们的日常生活中扮演着不可或缺的角色。 左侧(网络跳线)右侧(光纤跳线) 一、光纤的原理与优势 ADOP光纤跳线 光纤通信…

Day38: 动态规划 LeedCode:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 蓝桥杯: 更小的数

对于动态规划问题,拆解为如下五步曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化(容易数组溢出)确定遍历顺序举例推导dp数组 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐…

STM32 HAL库F103系列之ADC实验(1)

ADC工作原理: 1、输入通道: 2、转换序列: A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组) 规则组最多可以有16个转换,注入组最多有4个转换 规则组和注入…

艾迪比皮具携手工博科技SAP ERP公有云,打造数字化转型新标杆

4月1日,广州市艾迪比皮具有限公司(以下简称“艾迪比”)SAP S/4HANA Cloud Public Edition(以下简称“SAP ERP公有云”)项目正式启动。双方项目组领导、成员出席本次项目启动会,为未来项目的顺利实施打下坚实…

Computer Organization/Architecture 计算机组织/架构/结构 重要观念和笔记(陆续更新中,2024/04/17周三,已更新)

前情提要:我的说法比较白话,希望可以更好理解其中一些观念,这篇会以中文为主,专有名词还是用英文,好吧应该会中英穿插,自己学的时候感觉听中文会吸收比较快,也可能是我英文比较烂的关系&#xf…

软件产品许可证书 Licence 全流程研发(使用非对称加密技术,既安全又简单)

本篇博客对应的代码地址: Gitee 仓库地址:https://gitee.com/biandanLoveyou/licence 源代码百度网盘链接: https://pan.baidu.com/s/1_ZhdcENcrk2ZuL11hWDLTQ?pwdbmxi 提取码: bmxi 1、背景介绍 公司是做软件 SAAS 服务的,一般来说软件部…

《操作系统导论》第26章读书笔记:并发:介绍

《操作系统导论》第26章读书笔记:并发:介绍 —— 杭州 2024-04-18 夜 文章目录 《操作系统导论》第26章读书笔记:并发:介绍0.前言1.实例:线程创建(略)2.为什么更糟糕:共享数据(略)3.核心问题:不…

基于Springboot+Vue的Java项目-企业客户管理系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

uiautomation、pytest、schedule实现桌面程序自动化(初级)02

一:安装uiAutomation 前置条件:安装python、pycharm 命令行安装 Pip install uiautomation2.0.17 #指定版本 二:安装辅助工具:inspect.exe和、Accessibility Insights For Windows定位元素工具 辅助工具介绍 步骤中提到…

【每天一个linux小知识】tailf 和 tail -f

目录 典型使用场景区别 典型使用场景 如果我们实时查看文件的末尾内容,特别是当文件持续写入时,可以使用tailf 和 tail -f。两者都可以显示文件的最后几行内容,并且在文件被追加新内容时,会实时显示这些新内容。 tailf演示 区别 …

逆向案例二十八——红某点集登录接口逆向序

网址:aHR0cHM6Ly93d3cuaHJkanl1bi5jb20vIy9sb2dpbj9yZWRpcmVjdD0lMkZyZWFsVGltZUxpdmluZw 登录接口,发现两个参数加密,分别是pwd和sig,t很明显是时间戳。 观察pwd,发现很像md5加密,我输入的密码是123456,在在线加密网…

mac安装nvm详细教程

0. 前提 清除电脑上原有的node (没有装过的可以忽略)1、首先查看电脑上是否安装的有node,查看node版本node -v2、如果有node就彻底删除nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}2、保证自己的电脑上有安装git,不然下载n…

Python基于Django的旅游城市关键词分析和提取,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt 小区物业管理系统 的设计与实现

一.项目介绍 系统分为管理员 和 业主 两块: 管理员点击进入到系统操作界面,可以对首页、业主信息管理、管理员信息管理、 楼栋和房屋信息管理、物业费管理、地下停车位管理、公告信息管理、报修信息管理、 投诉管理以及个人信息等功能模块 …

数字逻辑课程实验环境配置与使用说明

文章目录 I.虚拟机搭建1.1 Vmware安装1.2 Win XP安装1.3 xftp7安装 I. Quartus II安装II. 使用说明2.1 新建工程2.2 在工程中加入代码2.3 代码编译波形仿真 I.虚拟机搭建 1.1 Vmware安装 Vmware17安装教程 1.2 Win XP安装 Win XP安装教程 1.3 xftp7安装 给虚拟机添加FTP …

部署wordpress

查看别名type ll ll 是 ls -l --colorauto 的别名 设置别名alias alias ymyum install -y 使用别名ym nginx 取消别名unalias ym 基于LNMP做一个wordpress nginx mysql 5.7 PHP 7.4 1、linux基本环境 修改主机名 hostnamectl set-hostname $name 关闭防火墙及selinux …

python爬豆瓣top250电影

文章目录 前言分析与实现1.对豆瓣网网站进行Ajax分析2.发送请求3.进一步筛选(提取) 完整代码 前言 通过这个项目,可以让小白对爬虫有一个初步认识,爬取豆瓣top250是一个初学者学爬虫的必经之路,话不多说,我…

【缓存常见问题】

在使用缓存时特别是在高并发场景下会遇到很多问题,常用的问题有缓存穿透、缓存击穿、缓存雪崩以及缓存一致性问题。 1、缓存穿透 首先,什么是缓存穿透呢? 缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据&…

图片各种格式区别介绍:

图片各种格式区别介绍: JPEG格式(Joint Photographic Experts Group) JPEG格式一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是…

目标检测——防护装备数据集

一、重要性及意义 防护装备中的头盔和背心检测具有至关重要的重要性和深远的意义,主要体现在以下几个方面: 首先,它们对于保护工作人员的人身安全起着至关重要的作用。在各类工作环境中,尤其是那些涉及高空作业、机械操作或交通…