STM32 GPIO 描述
一、GPIO功能描述
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO端口的每个位可以由软件分别配置成多种模式。
-
输入浮空
-
输入上拉
-
输入下拉
-
模拟输入
-
开漏输出
-
推挽式输出
-
推挽式复用功能
-
开漏复用功能
每个I/O端口位可以自由编程,然而必须按照32位字访问I/O端口寄存器(不允许半字或字节访 问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器进行读/更改的独立访问。这 样,在读和更改访问之间产生IRQ时不会发生危险。
图1 I/O端口位的基本结构
图2 端口位配置表
图3 输出模式位
二、通用I/O(GPIO)
复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b, MODEx[1:0]=00b)。 复位后,JTAG引脚被置于输入上拉或下拉模式:
-
PA15:JTDI置于上拉模式
-
PA14:JTCK置于下拉模式
-
PA13:JTMS置于上拉模式
-
PB4: JNTRST置于上拉模式
当作为输出配置时,写到输出数据寄存器上的值(GPIOx_ODR)输出到相应的I/O引脚。可以以推挽模式或开漏模式(当输出0时,只有N-MOS被打开)使用输出驱动器。
输入数据寄存器(GPIOx_IDR)在每个APB2时钟周期捕捉I/O引脚上的数据。
所有GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时,它们可以被激活也可以被断开。
三、单独的位设置或位清除
当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改 一个或多个位。
这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来 实现的。没被选择的位将不被更改。
四、外部中断/唤醒线
所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。
五、复用功能(AF)
使用默认复用功能前必须对端口位配置寄存器编程。
-
对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部驱动
-
对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。
-
对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被配置成浮空输入模式。 如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。 如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
六、软件重新映射I/O复用功能
为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些 脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不再映射到它们的原始引脚上了。
七、GPIO 锁定机制
锁定机制允许冻结IO配置。当在一个端口位上执行了锁定(LOCK)程序,在下一次复位之前,将 不能再更改端口位的配置。
八、输入配置
当I/O端口配置为输入时:、
-
输出缓冲器被禁止
-
施密特触发输入被激活
-
根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接
-
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
-
对输入数据寄存器的读访问可得到I/O状态
下图给出了I/O端口位的输入配置
九、输出配置
当I/O端口被配置为输出时:
- 输出缓冲器被激活
-
开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(PMOS从不被激活)。
-
推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。
-
-
施密特触发输入被激活
-
弱上拉和下拉电阻被禁止
-
出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器
-
在开漏模式时,对输入数据寄存器的读访问可得到I/O状态
-
在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值
下图给出了I/O端口位的输出配置
十、复用功能配置
当I/O端口被配置为复用功能时:
-
在开漏或推挽式配置中,输出缓冲器被打开、
-
内置外设的信号驱动输出缓冲器(复用功能输出)
-
施密特触发输入被激活
-
弱上拉和下拉电阻被禁止
-
在每个APB2时钟周期,出现在I/O脚上的数据被采样到输入数据寄存器
-
开漏模式时,读输入数据寄存器时可得到I/O口状态
-
在推挽模式时,读输出数据寄存器时可得到最后一次写的值
下图给出了复用功能配置
十一、模拟输入配置
当I/O端口被配置为模拟输入配置时:
-
输出缓冲器被禁止;
-
禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗。施密特触发输出值被强置 为’0’;
-
弱上拉和下拉电阻被禁止;
-
读取输入数据寄存器时数值为’0’。
下图示出了I/O端口位的高阻抗模拟输入配置:
一个专注于“嵌入式知识分享”、“DIY嵌入式产品”的技术开发人员,关注我,一起共创嵌入式联盟。
相关文章:

STM32 GPIO 描述
一、GPIO功能描述 每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH) ,两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR) ,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR…...

lerna在项目中使用
1. 检查lerna.json文件中的版本号是否正确,确保版本号与安装的lerna版本一致; 2. 检查package.json文件中的依赖是否正确,确保依赖的版本号与安装的lerna版本一致; 3. 检查node_modules文件夹是否存在,如果存在&…...

java智能在线考试系统源码 基于SpringBoot+Vue开发
java智能在线考试系统源码 基于SpringBootVue开发 环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 开发技术:SpringbootVue 项目简介&…...

防逆流系统中防逆流电表的正确安装位置-安科瑞黄安南
随着光伏行业的发展,部分地区村级变压器及工业用电变压器容量与光伏项目的装机容量处于饱和。电网公司要求对后建的光伏并网系统为不可逆流发电系统,指光伏并网系统所发生的电由本地负载消耗,多余的电不允许通过低压配电变压器向上级电网逆向…...

Hello Qt!
目录 1. 什么是Qt 2. Qt中的模块 3. 下载安装 4. QtCreator 4. Hello Qt 解释 .pro 解释 main.cpp 解释 mainwindow.ui 解释 mainwindow.h 解释 mainwindow.cpp 5. Qt 中的窗口类 5.1 基础窗口类 5.2 窗口的显示 6. Qt 的坐标体系 7. 内存回收 1. 什么是Qt 是一…...

pytorch加载的cifar10数据集,到底有没有经过归一化
pytorch加载cifar10的归一化 pytorch怎么加载cifar10数据集torchvision.datasets.CIFAR10transforms.Normalize()进行归一化到底在哪里起作用?【CIFAR10源码分析】 torchvision.datasets加载的数据集搭配Dataloader使用model.train()和model.eval() pytorch怎么加载…...

Day1 ARM基础
【ARM课程认知】 1.ARM课程的作用 承上启下 基础授课阶段:c语言、数据结构、linux嵌入式应用层课程:IO、进程线程、网络编程嵌入式底层课程:ARM体系结构、系统移植、linux设备驱动c/QT 2.ARM课程需要掌握的内容 自己能够实现简单的汇编编…...

ns3入门基础教程
ns3入门基础教程 文章目录 ns3入门基础教程ns环境配置测试ns3环境ns3简单案例 ns环境配置 官方网站:https://www.nsnam.org/releases/ 代码仓库:https://gitlab.com/nsnam/ns-3-dev 如果安装遇到问题,可以参考以下博文: https://…...

计算机视觉
目录 一、图像处理 main denoise 二、Harris角点检测 三、Hough变换直线检测 四、直方图显著性检测 五、人脸识别 六、kmeans import 函数 kmeanstext 七、神经网络 常用函数: imread----------读取图像 imshow---------显示图像 rgb2hsv---------RGB转…...

NSSCTF第10页(3)
[LitCTF 2023]彩蛋 第一题: LitCTF{First_t0_The_k3y! (1/?) 第三题: <?php // 第三个彩蛋!(看过头号玩家么?) // R3ady_Pl4yer_000ne (3/?) ?> 第六题: wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题…...

MySQL性能分析工具的使用
1. 统计SQL的查询成本:last_query_cost SHOW STATUS LIKE last_query_cost; 使用场景:它对于比较开销是非常有用的,特别是我们有好几种查询方式可选的时候。 SQL 查询是一个动态的过程,从页加载的角度来看,我们可以得到…...

Uniapp使用AES128加解密16进制
在对接低功耗蓝牙时,我们需要对蓝牙传输数据进行加解密,由于我们对接的命令是16进制,如5500020101aa00,每个16进制表示特定的含义,所以直接对16进制加解密 import CryptoJS from crypto-js// AES128 加密函数 functio…...

C++基础——类与对象
1 概述 C是面向对象的语言,面向对象语言三大特性:封装、继承、多态。 C将万事万物抽象为对象,对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一,封装将属性和行为作为一个整体,对属性和…...

人工智能-卷积神经网络
从全连接层到卷积 我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。 此时,多层感…...

MySQL的event的使用方法
MySQL的event的使用方法 一、事件定时策略 1、查看event事件开启状态 SHOW VARIABLES LIKE event_scheduler;如图,Value值 ON:打开,OFF:关闭。 2、设置event事件打开 SET GLOBAL event_scheduler ON;如果MySQL重启了&#x…...

Leetcode Daily Challenge 1845. Seat Reservation Manager
1845. Seat Reservation Manager 题目要求:初始化一个SeatManager类包括默认构造函数和类函数,所有的seat初始化为true。reverse函数返回最小的true,然后把这个编号的椅子赋值为false。unreverse(seatNumber)函数把编号为seatNumber的椅子恢…...

Blender vs 3ds Max:谁才是3D软件的未来
在不断发展的3D建模和动画领域,两大软件巨头Blender和3ds Max一直在争夺顶级地位。 随着技术的进步和用户需求的演变,一个重要问题逐渐浮出水面:Blender是否最终会取代3ds Max?本文将深入探讨二者各自的优势和劣势、当前状况&…...

MapReduce:大数据处理的范式
一、介绍 在当今的数字时代,生成和收集的数据量正以前所未有的速度增长。这种数据的爆炸式增长催生了大数据领域,传统的数据处理方法往往不足。MapReduce是一个编程模型和相关框架,已成为应对大数据处理挑战的强大解决方案。本文探讨了MapRed…...

【已解决】ModuleNotFoundError: No module named ‘dgl‘
禁止使用下面方法安装DGL,这种方法会更新你的pytorch版本,环境越变越乱 pip install dgl 二是进入DGL官网:Deep Graph Library (dgl.ai),了解自己的配置情况,比如我cuda11.8,ubuntu,当然和linux是一样的 …...

R 复习 菜鸟教程
R语言老师说R好就业,学就完了 基础语法 cat()可以拼接函数: > cat(1, "加", 1, "等于", 2, \n) 1 加 1 等于 2sink():重定向 sink("r_test.txt", splitTRUE) # 控制台同样输出 for (i in 1:5) print(i…...

第十二章《搞懂算法:朴素贝叶斯是怎么回事》笔记
朴素贝叶斯是经典的机器学习算法,也是统计模型中的一个基本方法。它的基本思想是利用统计学中的条件概率来进行分类。它是一种有监督学习算法,其中“朴素”是指该算法基于样本特征之间相互独立这个“朴素”假设。朴素贝叶斯原理简单、容易实现࿰…...

【从0到1开发一个网关】网关Mock功能的实现
文章目录 什么是Mock?如何实现Mock什么是Mock? Mock(模拟)是一种测试技术,用于创建虚拟对象来模拟真实对象的行为。Mock对象模拟了真实对象的行为,但是不依赖于真实对象的实现细节。它们可以在测试中替代真实对象,以便进行独立的单元测试。 需要使用Mock的原因包括以下几…...

前端框架Vue学习 ——(三)Vue生命周期
生命周期:指一个对象从创建到销毁的整个过程。 生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子) mounted:挂载完成,Vue 初始化成功,HTML 页面渲染成功…...

相机滤镜软件Nevercenter CameraBag Photo mac中文版特点介绍
Nevercenter CameraBag Photo mac是一款相机和滤镜应用程序,它提供了一系列先进的滤镜、调整工具和预设,可以帮助用户快速地优化和编辑照片。 Nevercenter CameraBag Photo mac软件特点介绍 1. 滤镜:Nevercenter CameraBag Photo提供了超过2…...

游戏专用....
游戏专用:星际战甲 APP窗口以及键鼠监控 import tkinter as tk import time,threading from pynput.keyboard import Key,Listener import pynput.keyboard as kbclass myClass:def __init__(self):self.root tk.Tk()self.new_text self.flag threading.Event()…...

第三方登录和第三方支付
第三方登录 在现代Web应用中,提供第三方登录选项已经变得非常普遍。用户可以使用其社交媒体或其他在线帐户(如Google、GitHub或Facebook)来访问您的应用程序,而无需创建新的用户名和密码。这提供了更好的用户体验,减少…...

SpringMvc执行流程(含过滤器Filter+拦截器interceptor)
目录 1.Mvc的概念 2.SpringMvc的概念 3.SpringMvc的核心组件 4.SpringMvc的执行流程 5.SpringMvcFilterInterceptor执行流程 一、Mvc的概念 Mvc(Model View Controller):Mvc是一种设计规范,它将数据、视图、业务逻辑代码进行分离,降低代码…...

【UDS基础】简单介绍“统一诊断服务“
1. 前言 我们将在这个实用教程中介绍UDS的基础知识,重点关注在CAN总线上的UDS(UDSonCAN)和CAN诊断(DoCAN)。此外,我们还会介绍ISO-TP协议,并解释UDS、OBD2、WWH-OBD和OBDonUDS之间的差异。 最后,我们将解释如何请求、记录和解码UDS消息,并提供一些实际示例,例如记录…...

深度学习框架TensorFlow.NET之数据类型及张量2(C#)
环境搭建参考: 深度学习框架TensorFlow.NET环境搭建1(C#)-CSDN博客 由于本文作者水平有限,如有写得不对的地方,往指出 声明变量:tf.Variable 声明常量:tf.constant 下面通过代码的方式进行学…...

Pandas指定多列组合形成新列
目录 1、数据准备2、多列组合 1、数据准备 df pd.DataFrame({first_name: [A, B], last_name: [a, b]}) print(df.to_string()) first_name last_name 0 A a 1 B b 2、多列组合 2.1、方式一:使用cat() df[full_name] df[firs…...