IO引脚服用和映射

什么是端口复用

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.mfbz.cn/a/554012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

传感器融合 | 适用于自动驾驶场景的激光雷达传感器融合项目_将激光雷达的高分辨率成像+测量物体速度的能力相结合

项目应用场景 面向自动驾驶场景的激光雷达传感器融合,将激光雷达的高分辨率成像测量物体速度的能力相结合,项目是一个从多个传感器获取数据并将其组合起来的过程,可以更加好地进行环境感知。项目支持 ubuntu、mac 和 windows 平台。 项目效果…

ASP.NET基于TCP协议的简单即时通信软件的设计与实现

摘 要 即时通信(Instant Message),由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微…

Android --- Activity

官方文档-activity Activity 提供窗口,供应在其中多个界面。此窗口通常会填满屏幕,但也可能小于屏幕并浮动在其他窗口之上。 大多数应用包含多个屏幕,这意味着它们包含多个 Activity。通常,应用中的一个 Activity 会被指定主 Ac…

Linux数据库自动备份 - 定时任务发到百度云盘、坚果云、邮箱附件

前言 1. 坚果云的webdav云盘最好! (免费账号每月1G上传流量) 2. 不建议数据库备份文件发送到SMTP邮箱,因为对方服务器非常容易当做垃圾邮件处理,而且发信的SMTP账号会被封禁(实测163发到QQ邮箱被封&…

lambda捕获列表

lambda是C11新特性之一,优点是: 1.可以直接匿名定义目标函数或函数对象,不需要额外写一个函数 2.lambda是一个匿名的内联函数 捕获列表 总结:【】为值捕获,只读 【&】为引用捕获,可读可写

Midjourney指南 - 生成高分辨率图片(内容已更新至V5)

Midjourney 首先为每个作业生成一个低分辨率图片网格(2x2)。你可以在选择其中任一图片,使用 Midjourney upscaler 来增加尺寸并添加更多细节。有多种可用于放大图像的放大模型。 每个图像网格下方的按钮用于放大所选图像。U1 U2 U3 U4 注:upscaler 以下…

震惊金融界!巴克莱银行报告称去年投资诈骗激增29%

巴克莱银行 (Barclays) 发布的令人担忧的数据显示,在过去一年里,投资诈骗数量激增了 29%,震惊了金融界。这些诈骗给该银行的活期账户客户造成了巨大损失,占欺诈者损失资金的最高比例,平均索赔超过14,000英镑。 投资骗…

如何合理利用多个中国大陆小带宽服务器?

我们知道在中国大陆带宽单价非常昂贵,一个1Mbps 带宽的机子一年就得卖好几百人民币,这是不值当的,当然我们可以去低价漂阿里云、腾讯云的轻量服务器,99包年,但是带宽太小很难崩。 所以,我们必须构建一个能够…

怎么购买GPT api

怎么购买GPT api GPT API是由OpenAI提供的一种应用程序编程接口(API),允许开发者通过编程方式访问OpenAI开发的GPT(Generative Pre-trained Transformer)模型。GPT是一种基于深度学习的自然语言处理技术,主…

刷题之Leetcode19题(超级详细)

19.删除链表的倒数第N个节点 力扣题目链接(opens new window)https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗&#x…

爱普生计时设备AUTOMOTIVE RA8900CE DTCXO RTC

主要特点出场已校准带有DTCXO的RTC,并且内部集成晶体单元高精度: 3.4 ppm 40 to 85 C(9 s/月.)时钟输出:1 Hz.1024 Hz.32.768 kHzI 2 C Interface: Fast mode (400 kHz)The l2C-Bus is a trademark ofNXP Semiconductors供电电压: 2.5-5.5 V(main),1.6-5.5 V(备份电…

软考132-上午题-【软件工程】-沟通路径

一、定义 1-1、沟通路径1 沟通路径 1-2、沟通路径2 沟通路径 n-1 二、真题 真题1: 真题2: 真题3:

国外AI programmer 后来者SWE-agent,Devin不在孤寂

如果你正在寻找一种人工智能(AI)自主软件工程师Devin的替代品,它的强大程度足以与最近宣布的自主AI编码平台竞争。这位新手就是SWE-Agent!它是由普林斯顿大学NLP小组创造的开源人工智能程序员,旨在自主解决GitHub问题并实现最先进的性能,估值目标为20亿美元。SWE Agent在S…

jar包混淆

由于开发需要,不让甲方反编译出源代码。 命令如下: java -jar classfinal-fatjar-1.2.1.jar -file mis-admin.jar -libjars mis-ducg-3.5.0.jar -packages com.mis,cn.edu -pwd 123456 -Y 反编译软件编译的源码如下:直接null,成…

k8s使用harbor私有仓库镜像 —— 筑梦之路

官方文档: Secret | Kubernetes ImagePullSecrets的设置是kubernetes机制的另一亮点,习惯于直接使用Docker Pull来拉取公共镜像,但非所有容器镜像都是公开的。此外,并不是所有的镜像仓库都允许匿名拉取,也就是说需要身份认证&…

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 1.Matlab实现…

Windows如何下载Bun并在前端Vue或React项目上替代Yarn或Npm

Bun Bun网站 Bun 在 Windows 上下载并安装 Bun 非常简单。你可以使用以下命令在 Windows 10 或更高版本上安装 Bun powershell -c "irm bun.sh/install.ps1 | iex"“powershell”不是内部或外部命令,也不是可运行的程序或批处理文件 PowerShell 命令解决…

JET毛选学习笔记:如何利用《实践论》学习实验

一、个人背景介绍 本人本科读的是预防医学专业(因为没考上临床),硕博连读(报名人少,我报了就得了)的时候专业是流行病与卫生统计学,除了学习流行病学、统计学(忘得差不多了&#xf…

Linux 操作系统指令和Vscdoe安装

1、Linux系统介绍 Linux系统的背景介绍我就不介绍了,有兴趣的可以去看看其发展史。 1.1 Linux操作系统的主要特点 Linux操作系统的重要思想:一切皆文件 Linux操作系统的特性: 完全免费 支持多平台 支持多用户、多任务 有良好的界面 完美兼容…

市场复盘总结 20240417

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率 100% 最常用的二…
最新文章