【STM32F4】二、I/O引脚的复用和映射

2023-10-31

注:本博文只是对正点原子课程的又一次重复,总结正点的教程、写一些自己的感悟,并非以原创之名做抄袭之事。

STM32F4芯片数据手册的下载地址:只要5积分!

一、基本概念

1. 什么是I/O引脚?

Iinput 之意,Ooutput 之意。I/O引脚就是芯片的输入输出管脚。主要是与外部设备进行数据交换的端口。

STM32F4共有 144个引脚 ,其中 112个是I/O引脚;另外的32个是 电源脚,复位脚,特殊功能脚等

2. 什么是I/O引脚的复用?

来看下面这张图:
在这里插入图片描述
在类似上面的芯片原理图上经常可以看到GPIO端口后边接很长一串,比如PA9/USART1_TX/TIM1_CH2,意思就是PA9引脚除了可以作为简单的I/O输入输出电平,还可以有复用功能,可以复用为USART1_TX或TIM1_CH2。什么引脚复用为什么功能不是瞎定的,而是有根据的,根据就是芯片数据手册,里边会有一个表,叫做复用功能映射表(如下图所示),可以列出所有端口的所有复用功能。

复用功能映射表(部分):
在这里插入图片描述
如上表中PE2,除了做I/O口连接外设,还可以作为TRACECLK、FSMC_A23等复用功能。

二、如何配置I/O引脚复用?

1. 复用器(GPIOx_AFRL/GPIOx_AFRH)和复用功能(AF)

I/O口都对应着一个复用器,如GPIOA对应着一个复用器、GPIOB对应着一个复用器……每个复用器分为两部分,如GPIOA对应的复用器分为GPIOA_AFRL、GPIOA_AFRH两部分,其中GPIOx_AFRL负责低8位引脚,即PA0 ~ PA7;而GPIOx_AFRH负责高8位引脚,即PA8 ~ PA15

复用器有什么作用呢?

它能控制每个引脚的复用功能(AFx),AF的选择范围为 AF0 ~ AF15,但并不是每个引脚都有16个AFx起作用,大部分情况下每个引脚只有3~6个复用功能,其他的AFx都没用;如GPIOA_AFRL可以控制PA0引脚,它的复用功能如下图所示:
在这里插入图片描述
虽然AF的范围有AF0 ~ AF15,但只有AF1、AF2、AF3、AF7、AF8、AF11、AF15起作用,其他的都为空,是非法值。

2. 程序编写

2.1 打开I/O时钟和复用功能对应外设时钟

首先,我们要使用 IO 复用功能外设,必须先打开对应的 IO 时钟和复用功能外设时钟。如:

/*使能 GPIOA 时钟*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); 
/*使能 USART1 时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

这里需要说明一下,官方库提供了五个打开 GPIO 和外设时钟的函数分别为:

void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
void RCC_AHB2PeriphClockCmd(uint32_t RCC_AHB2Periph, FunctionalState NewState);
void RCC_AHB3PeriphClockCmd(uint32_t RCC_AHB3Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

这五个函数分别用来打开相应的总线下 GPIO 和外设时钟。比如我们的串口 1 是挂载在
APB2 总线之下,所以我们调用对应的 APB2 总线下外设时钟使能函数 RCC_APB2PeriphClockCmd
来使能串口 1 时钟。对于其他外设我们调用相应的函数即可。

2.2 配置I/O引脚的模式

其次,我们在 GIPOx_MODER 寄存器中将所需 IO配置为复用功能(若是复用ADC 或 DAC外设,则设置为模拟功能)。

再次,我们还需要对 IO 口的其他参数,例如类型,上拉/下拉以及输出速度

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

/*GPIOA9 与 GPIOA10 初始化*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度 50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化 PA9,PA10

2.3 配置相应的复用器

最后,我们配置 GPIOx_AFRL 或者 GPIOx_AFRH 寄存器,将 IO 连接到所需的 AFx。

这些步骤对于我们使用库函数来操作的话,是调用的 GPIO_PinAFConfig 函数来实现的。具体操作代码如下:

/*PA9 连接 AF7,复用为 USART1_TX */
/*此处并没有体现出 AF7,因为它已经在宏定义中等同于 GPIO_AF_USART1 了*/
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); 
/* PA10 连接 AF7,复用为 USART1_RX*/
/*此处并没有体现出 AF7,因为它已经在宏定义中等同于 GPIO_AF_USART1了 */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32F4】二、I/O引脚的复用和映射 的相关文章

  • 详细讲述C++各种运算符重载

    详细讲述C 各种运算符重载 1 等号运算符重载 2 加号运算符重载 3 取地址运算符重载 4 前置 后置 运算符重载 4 1后置 的引用问题 4 2相关问题分析 5 重载类型强转运算符 6 括号运算符重载 7 输出运算符重载 8 星号运算符
  • jetbrains phpstorm插件开发环境搭建

    2018 04 14 重要更新 使用 gradle 进行构建可以免去下面大部分步骤 使用 gradle 我们仅需下载安装 JDK Idea 使用 gradle 的方法是 新建 Project 然后选择如下 使用 gradle 的好处是 不用

随机推荐

  • C++多态(虚函数)使用详解

    目录 1 什么是多态 1 1父类指针指向子类指针案例 2 多态 虚函数的基本使用 3 多态 虚函数表 3 1单个类的虚函数表 3 2使用继承的虚函数表 3 3多重继承的虚函数表 4 虚函数的修饰 4 1虚函数的修饰 final 4 2虚函数
  • windows 更改pip源

    在c user 或者用户 电脑的用户名 目录下创建一个命名为 pip 的文件夹 如 C Users Administrator pip 在该文件夹下创建一个命名为 pip ini 的文件 在该文件中写入以下内容 global index u
  • SpringBoot之定时任务详解

    使用SpringBoot创建定时任务 目前主要有以下三种创建方式 一 基于注解 Scheduled 二 基于接口 SchedulingConfigurer 前者相信大家都很熟悉 但是实际使用中我们往往想从数据库中读取指定时间来动态执行定时任
  • 客观面试题--37.Spring/SpringMVC常用注解有哪些?

    Spring常用注解 使用注解来构造IoC容器 用注解来向Spring容器注册Bean 需要在applicationContext xml中注册
  • Microsoft Exchange ProxyShell Remote Code Execution CVE-2021-34473 (Metasploit exploits)分析

    CVE 2021 34473 加载winrm模块文件 Windows专用链接对象 https github com WinRb WinRM require winrm class MetasploitModule lt Msf Exploi
  • gdb调试,splint_valgrind代码检查

    文章目录 基本调试命令 语法 为什么没有产生core 文件 一 GDB 1 test 2 常用命令 3 使用core 二 代码检查 1 splint 2 valgrind 常见错误 命令格式 test1 test2 编译一个多种内存使用错误
  • Minor GC 过程

    如果Eden空间占满了 会触发 minor GC Minor GC后仍然存活的对象会被复制到S0中去 这样Eden就被清空可以分配给新的对象 又触发了一次 Minor GC S0和Eden中存活的对象被复制到S1中 并且S0和Eden被清空
  • TypeScript 最快速的入门教程

    TypeScript 最快速的入门教程 在线阅读 https niexia github io typescript tutorial 英文原版 https www typescripttutorial net 如果对你有帮助 欢迎在 gi
  • HarmonyOS开发详解(二)——鸿蒙开发体系详解及入门实例演示运行

    本篇文章的计划 先体系的介绍一下鸿蒙开发相关的体系内容 希望通过本篇内容构建对鸿蒙开发体系的了解 最后再来一个最简单入门例子 既是自我的学习 也希望对你了解鸿蒙开发的全貌有帮助 这样安排而没有直接写一个Helloworld例子的原因 很多朋
  • Leetcode 剑指Offer

    求 1 2 n 要求不能使用乘除法 for while if else switch case等关键字及条件判断语句 A B C 示例 1 输入 n 3 输出 6 示例 2 输入 n 9 输出 45 一 信息 1 求一个等差数列的求和 2
  • React教程(一)React基础

    1 React基础 目标 能够说出React是什么 能够说出React特点 能够掌握React的基本使用 能够使用React脚手架 1 1 React概述 官方网址 https zh hans reactjs org 1 1 1 什么是Re
  • jacob 导出word文档打开显示为web视图问题

    问题产生 由于是使用html 另存为word导致打开生成的word文档为web视图 Dispatch call this document SaveAs outputPath 问题解决 1 创建空的word 文档 this document
  • (大全)预后Cox 列线图Nomogram 校正曲线calibration curve 时间依赖ROC survivalROC C指数C-index 两ROC比较

    Cox模型 等比例风险检验 Nomogram C index 校准曲线 时间 ROC曲线 内置包数据运行 预期结果看图 部分代码加上自己的理解 可以直接复制到R运行 加载包 我用 R 3 6版本的 library cmprsk 已经包含在这
  • Java 垃圾回收机制原理

    一 垃圾回收机制的意义 java 语言中一个显著的特点就是引入了java回收机制 是c 程序员最头疼的内存管理的问题迎刃而解 它使得java程序员在编写程序的时候不在考虑内存管理 由于有个垃圾回收机制 java中的额对象不在有 作用域 的概
  • PowerShell学习基础篇(使用帮助)

    一 背景介绍 PowerShell不仅仅是一门脚本语言 其实是一种运行命令行工具的命令行Shell 虽然PowerShell可以通过脚本实现很复杂的功能 但脚本仅是使用PowerShell的一种方式 PowerShell为Windows管理
  • es封装cookie工具类

    CookieUtil js const CookieUtil get name let cookieName encodeURIComponent name cookieStart document cookie indexOf cooki
  • SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

    序 关于标题 说是教学 实在愧不敢当 但苦与本人文笔有限 实在找不到更合理 谦逊的词语表达 只能先这样定义了 其实最真实的想法 只是希望这个关键词能让更多的人浏览到这篇文章 也算是对于自己写文章的一个肯定吧 关于内容 再写这系列文章之前 本
  • 【数据结构与算法】5、循环链表、约瑟夫问题、静态链表

    循环链表目录 一 单向循环链表 1 add 2 remove 3 单向循环链表特点 二 双向循环链表 三 约瑟夫问题 Josephus Problem 四 静态链表 一 单向循环链表 单向循环链表在单链表的基础上 尾节点的 next 指向头
  • nrm 安装与使用

    nrm 安装与使用 nrm 是 npm 的镜像源管理工具 可以用来切换 npm 镜像源 安装 nrm 使用 npm 全局安装 npm i g nrm nrm 命令 查看镜像列表 带 号为当前镜像 nrm ls 查看当前所在镜像 nrm cu
  • 【STM32F4】二、I/O引脚的复用和映射

    目录 一 基本概念 1 什么是I O引脚 2 什么是I O引脚的复用 二 如何配置I O引脚复用 1 复用器 GPIOx AFRL GPIOx AFRH 和复用功能 AF 2 程序编写 2 1 打开I O时钟和复用功能对应外设时钟 2 2