STM32的端口引脚的复用功能及重映射功能解析

目录

STM32的端口引脚的复用功能及重映射功能解析

复用功能

复用功能的初始化

重映射功能

重映射功能的初始化

复用功能和重映射的区别

部分重映射与完全重映射

补充


STM32的端口引脚的复用功能及重映射功能解析

复用功能

首先、我们可以这样去理解stm32引脚的复用功能。以stm32F103RCT6芯片引脚PA9、PA10为例。
这两个芯片引脚定义如下:
PA9引脚: PA9/USART1_TX/TIM1_CH2
PA10引脚:PA10/USART1_RX/TIM1_CH3
1、这里的PA9引脚和PA10引脚我们可以理解为引脚名,用于区分两个不同的引脚。
2、可以看到PA9引脚、PA10引脚都有三种功能。其中第一项PA9和PA10是其默认功能,默认功能为GPIO功能,也即是作为通用的输入输出端口使用。
3、这样我们就知道,当PA9引脚和PA10引脚不在作为默认的GPIO功能使用,而是作为USART1_TX/USART1_RX或者作为TIM1_CH2/TIM1_CH3功能使用时,就是对PA9引脚和PA10引脚的复用。
4、总而言之,对于stm32来说,由于其内部各种外设的存在,往往每个引脚都会有几种不同的功能,这几种不同的功能都可以使用这一个端口引脚。但是由于stm32的端口引脚都有一个自己的默认功能存在,当该引脚不在作为默认功能使用时对于该引脚来说就是复用。由于大多数引脚的默认功能和其引脚名称PA9引脚或者PA10引脚一样都是作为GPIO功能使用,因此当不在作为GPIO功能而是作为其他外设的相关功能使用时就是对引脚的复用。

复用功能的初始化

通过前面的分析我们可以知道,在使用stm32的引脚复用功能时,最少要使能2个时钟。
1、无论引脚使用哪种功能,总之是要使用引脚的,因此要使能对应的GPIO组的端口时钟。
例如,对于复用为串口1的PA9、PA10引脚来说需要使能PA组端口的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2、由于引脚不在作为默认功能,而是复用为其他外设的相关功能使用,因此还需要使能对应外设的时钟。
对于复用为串口1的PA9、PA10引脚来说还需要使能外设USART1的时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3、复用后的引脚的功能配置及对应外设功能的初始化。以PA9、PA10引脚为例:3.1 复用后的引脚功能配置//PA9引脚复用为USART1_TX功能,复用后的引脚配置为复用推挽输出模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure);//PA10引脚复用为USART1_RX功能,复用后的引脚配置为浮空输入模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);3.2 复用后的外设功能初始化//这里初始化串口的各种功能

重映射功能

为了让工程师能够更好的安排布局及方便布线,在stm32中引入了外设引脚的重映射功能。即一个外设的引脚除了具有默认的引脚外还可以通过配置重映射寄存器的方式将这个外设的引脚映射到其他的引脚上去。
同样的以PA9引脚和PA10引脚为例,对于stm32F103RCT6芯片来说,有如下引脚定义:
PA9引脚: PA9/USART1_TX/TIM1_CH2
PA10引脚:PA10/USART1_RX/TIM1_CH3
PB6引脚: PB6/I2C1_SCL/TIM4_CH1/USART1_TX
PB7引脚: PB7/I2C1_SDA/FSMC_NADV/TIM4_CH2/USART1_RX

1、首先、我们要明确一点,重映射的概念是对于芯片的各种外设本身来说的而非GPIO。因为引脚作为GPIO功能使用时一般是其默认的功能,而重映射的概念是建立在对引脚的复用功能上的。也即是当引脚复用为非GPIO功能时才可能会使用到重映射的功能。
2、USART1_REMAP=0表示没有使用重映射功能的情况;USART1_REMAP=1则表示使用重映射功能的情况。
3、从上面表中可以看到,默认情况下(没有使用重映射),USART1的TX和RX引脚默认使用的就是PA9引脚和PA10引脚。
4、在开启重映射功能时,USART1的TX和RX引脚还可以重映射到PB6和PB7引脚上去。

重映射功能的初始化

在使用重映射功能时,除了需要使能复用功能的GPIO组的端口时钟和对应的外设时钟外我们还需要使能AFIO功能时钟。
例如当开启串口1的重映射时:
1、使能PB组端口时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
2、使能串口1外设时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3、使能AFIO功能时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
4、开启重映射功能
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
5、之后就是对重映射后的引脚的功能配置及对应外设功能的初始化。

复用功能和重映射的区别

通过以上对于复用功能和重映射功能的分析我们可以知道:
复用功能和重映射最大的区别就在于引脚复用功能是对于单个引脚来说的。比如同一个引脚既可以作为GPIO功能又可以作为其他外设功能使用。而重映射功能往往是对于芯片内部外设的一组引脚或者某些引脚来说的。例如USART1的发送功能引脚和接收功能引脚既可以使用PA9、PA10引脚又可以使用PB6和PB7引脚。

部分重映射与完全重映射

通过前面对于重映射功能的分析,我们理解部分重映射及完全重映射将不再困难。
从字面意思也容易知道,部分重映射就是把一部分的功能引脚重映射为其他的引脚而另外一部分引脚仍然使用默认的引脚。
完全重映射就是把所有的功能引脚全部重映射到其他的引脚上。    
如下图是USART3外设的重映射功能引脚对应情况:

通过表中的信息我们可以知道:
1、对于USART3的五个功能引脚来说,默认使用的五个引脚为PB10-PB14这5个引脚。
2、部分重映射时,原来默认使用的PB10、PB11、PB12三个功能引脚将重映射到引脚PC10、PC11和PC12上。而PB13和PB14仍然使用原来的默认引脚。
3、完全重映射就是将原来默认使用的PB10、PB11、PB12、PB13、PB14五个功能引脚全部重映射到引脚PD8、PD9、PD10、PD11和PD12上去。
4、以USART3为例,部分重映射时,我们需要使用的接口函数为:
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
5、以USART3为例,全部重映射时,我们需要使用的接口函数为:
GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);

补充

重映射的配置函数:
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
1、对于有些外设只有一种重映射时,例如前面的USART1时,第一个参数GPIO_Remap只需要设置为:GPIO_Remap_USART1即可。
2、对于有些外设有两种重映射时,例如前面的USART3时,第一个参数GPIO_Remap可以根据情况设置为:
部分重映射:GPIO_PartialRemap_USART3
完全重映射:GPIO_FullRemap_USART3
完结。。。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon(一) mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行 Hadoop、Spark以及docker等。 1.2 为…

Flowable 基本用法

一. 什么是Flowable Flowable 是一个基于 Java 的开源工作流引擎,用于实现和管理业务流程。它提供了强大的工作流引擎和一套丰富的工具,使开发人员能够轻松地建模、部署、执行和监控各种类型的业务流程。Flowable 是 Activiti 工作流引擎的一个分支&am…

服务网关GateWay基础

1. 网关基础介绍1.1 网关是什么1.2 为啥要用网关1.3 常见的网关组件NginxNetflix ZuulSpring Cloud GatewayKongAPISIX综合比较 2. gateWay的使用2.1 springCloud整合gateway2.2 GateWay的相关用法2.3 GateWay路由使用示例基本用法转发/重定向负载请求动态路由 2.5 断言(Predic…

使用Screenshots安装Fedora 40版本详细教程

Fedora 40是Fedora操作系统的最新版本,于 2024 年 4 月 23 日发布,是一个社区支持的 Linux 发行版,以其创新功能、领先技术和活跃的社区支持而闻名。 在本指南中,我们将引导您完成安装Fedora 40 Server的分步过程,确保…

Docker之存储配置与管理

一、容器本地配置与Docker存储驱动 每个容器都被自动分配了本地存储,也就是内部存储。容器由一个可写容器层和若干只读镜像层组成,容器的数据就存放在这些层中。 容器本地存储采用的是联合文件系统。这种文件系统将其他文件系统合并到一个联合挂载点&a…

【c++】深入剖析与动手实践:C++中Stack与Queue的艺术

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来到STL新的内容,stack和queue 目录 1. stack的介绍与使用函数介绍例题一:最小栈例题二:栈的压入、弹出队列栈的模…

springcloud按版本发布微服务达到不停机更新的效果

本文基于以下环境完成 spring-boot 2.3.2.RELEASEspring-cloud Hoxton.SR9spring-cloud-alibaba 2.2.6.RELEASEspring-cloud-starter-gateway 2.2.6.RELEASEspring-cloud-starter-loadbalancer 2.2.6.RELEASEnacos 2.0.3 一、思路 实现思路: 前端项目在请求后端接…

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 Ubuntu下的内核编译(打造最精确的编译步骤)_ubuntu 内核编译-CSDN博客 【Linux】(Ubuntu)内核编译 && 镜像制作_ubuntu 内核编译-CS…

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具,我将jmeter与ant都部署在了Jenkins容器中,并配置了build.xml 一、ubuntu部署jdk 1:先下载jdk-8u74-linux-x64.tar.gz,上传到服务器,这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…

基于jenkins+docker实现CI/CD实践

项目简介 利用 Jenkins、Docker、SonarQube 和 Harbor 技术,搭建一个完整的 CI/CD 管道,实现持续集成、持续交付和持续部署的流程。通过自动化构建、测试、代码质量检查和容器化部署,将开发人员从繁琐的手动操作中解放出来,提高团…

SQLite运行时可加载扩展(三十五)

返回:SQLite—系列文章目录 上一篇:SQLite轻量级会话扩展(三十四) 下一篇:SQLite的DBSTAT 虚拟表(三十六) 1. 概述 SQLite 能够在运行时加载扩展(包括新的应用程序定义的 SQL 函数、整理序列、虚拟表和 VFS&…

【深度学习】烟雾和火焰数据集,野外数据集,超大量数据集,目标检测,YOLOv5

标注了2w张数据集,是目标检测yolo格式的,有火焰、烟雾两个目标,下图是训练时候的样子: 训练方法看这里: https://qq742971636.blog.csdn.net/article/details/138097481 数据集介绍 都是博主辛苦整理和标注的&…

C++必修:类与对象(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 面向过程与面向对象 1.1. 面向过程 我们之前学习的C语言就是一种面向过程的语…

SVN小乌龟汉化问题

1.首先确认中文语言包和SVN版本需要一致(点击右键 选择最后一个选项即可查看) 官网链接 点击这个官网链接可以下载对应版本的中文包 2.下载好之后直接无脑下一步安装即可 3.如果还是没有中文,找到这个文件夹,把里面的内容全部删…

【css】select实现placeholder效果

场景&#xff1a;使用select下拉选择框的时候&#xff0c;需要像其他控件一样提示默认信息。 问题&#xff1a;表单控件select没有placeholder属性。 解决方案&#xff1a;通过css实现&#xff0c;不需要js <style>select > option[disabled]{ color:#999;cursor: n…

VUE3 ref,props,生命周期

1.--ref属性 1.1代码 1.1.1子表 <template><div class"person"><h1>中国</h1><h2 ref"title2">北京</h2><h3>尚硅谷</h3><button click"showLog">点我输出h2这个元素</button>&l…

【软测学习笔记】Day01

&#x1f31f;博主主页&#xff1a;我是一只海绵派大星 &#x1f4da;专栏分类&#xff1a;前端 &#x1f4da;参考教程&#xff1a;黑马教程❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、测试介绍 1、什么是软件测试&#xff1f; 2、测试主流技能 二、测试常用分…

unity cinemachine相机 (案例 跟随角色移动)

安装相机包 打开包管理工具 在 unity registry 搜索cinemachine 会在maincamera中生成一个组件cinemachineBrain 只能通过虚拟相机操控 主相机 虚拟相机的参数 案例 1.固定相机效果 位置 在固定的地方 默认的模式 2.相机跟随人物效果 焦距设置 20 跟随设置 把playere…

Django框架之python后端框架介绍

一、网络框架及MVC、MTV模型 1、网络框架 网络框架&#xff08;Web framework&#xff09;是一种软件框架&#xff0c;用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具&#xff0c;以简化开发过程并提高开发效率。网络框架通常包括以下功能…

Web前端框架/库/工具

前言 俗话说&#xff1a;前端从步枪&#xff08;原生js&#xff09;到了半自动武器&#xff08;jQuery&#xff09;并进化为全自动武器&#xff08;三大框架&#xff08;angular&#xff0c;react&#xff0c;vue及其生态链&#xff09;&#xff09;。 常说工欲善其事必先利其…