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嵌入式产品”的技术开发人员,关注我,一起共创嵌入式联盟。

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

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

相关文章

Flutter:安装依赖报错doesn‘t support null safety

项目中需要引用http依赖,在pubspec.yaml文件中添加如下信息: 当同步时,报错信息如下: [myflutter] flutter pub upgrade Resolving dependencies... The current Dart SDK version is 3.1.3. Because myflutter depends on http &…

【leetcode】19.删除链表的倒数第 N 个结点

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出:[] 示例 3&a…

校园安防监控系统升级改造方案:如何实现设备利旧上云与AI视频识别感知?

一、背景与需求分析 随着现代安防监控科技的兴起和在各行各业的广泛应用,监控摄像头成为众所周知的产品,也为人类的工作生活提供了很大的便利。由于科技的发达,监控摄像头的升级换代也日益频繁。每年都有不计其数的摄像头被拆掉闲置&#xf…

R语言爬虫代码模版:技术原理与实践应用

目录 一、爬虫技术原理 二、R语言爬虫代码模板 三、实践应用与拓展 四、注意事项 总结 随着互联网的发展,网络爬虫已经成为获取网络数据的重要手段。R语言作为一门强大的数据分析工具,结合爬虫技术,可以让我们轻松地获取并分析网络数据。…

【网络】五中IO模型介绍 + 多路转接中select和poll服务器的简单编写

高级IO 前言正式开始前面的IO函数简单过一遍什么叫做低效的IO钓鱼的例子同步IO和异步IO五种IO模型阻塞IO非阻塞IO信号驱动多路转接异步IO 小结 代码演示非阻塞IO多路转接select介绍简易select服务器timeout 为 nullptrtimeout 为 {0, 0}timeout 为 {5, 0}调用accept select编写…

ACmix:卷积和self-attention的结合,YOLOv5改进之ACmix

目录 一、ACmix理论部分 二、代码 三、YOLOv5改进 ACC3 一、ACmix理论部分 论文地址:2111.14556.pdf (arxi

【Database System Concept 7th】Chapter 24 Advanced Indexing Techniques 读书笔记

Chapter 24 Advanced Indexing Techniques 24.5 Hash Indices24.5.1 Static Hashing24.5.2 Dynamic Hashing24.5.2.1 Data Structure24.5.2.2 Queries and Updates 24.5 Hash Indices 24.5.1 Static Hashing 这一部分就不介绍了,在14.5中已经介绍过了。 24.5.2 D…

javascript中的new原理及实现

在js中,我们通过new运算符来创建一个对象,它是一个高频的操作。我们一般只是去用它,而很少关注它是如何实现的,它的工作机制是什么。 1 简介 本文介绍new的功能,用法,补充介绍了不加new也同样创建对象的方…

部署kubevirt教程

前提条件 已安装:kubernetes集群、kubectl、docker apt install -y qemu-kvm libvirt virt-install bridge-utils 【所有节点全部安装】 virt-host-validate qemu部署kubevirt 下载kubevirt-cr.yaml和kubevirt-operator.yaml 先执行: Kubectl apply …

047_第三代软件开发-日志分离

第三代软件开发-日志分离 文章目录 第三代软件开发-日志分离项目介绍日志分离用法 关键字: Qt、 Qml、 log、 日志、 分离 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C 的强…

LLM之幻觉(一):大语言模型幻觉解决方案综述

论文题目:《Cognitive Mirage: A Review of Hallucinations in Large Language Models》 ​论文链接:https://arxiv.org/abs/2309.06794v1 论文代码:https://github.com/hongbinye/cognitive-mirage-hallucinations-in-llms 一、幻觉介绍 …

编写软件产品使用说明书的重要技巧分享

编写软件产品使用说明书是确保用户能够准确了解和使用你的软件的重要一步。一份清晰、详尽的软件产品使用说明书不仅可以提高用户满意度,也能减少用户的疑惑和困惑。然而,要编写一份优秀的软件产品使用说明书并不容易。接下来就跟大家分享一些我的经验和…

《学懂java》:java基础篇

他们都告诉你,必须要做什么,却没告诉你为什么。 ##《 欢迎访问我的网站,ai工具箱,https://4398ai.com里面有免费的chatgpt网站,和很多免费的编程资源的干货》 首先说一下接口,抽象(abstract)&a…

vue实现商品列表,组件抽离

1.需求说明 my-tag 标签组件封装 ​ (1) 双击显示输入框,输入框获取焦点 ​ (2) 失去焦点,隐藏输入框 ​ (3) 回显标签信息 ​ (4) 内容修改,回车 → 修改标签信息 my-table 表格组件封装 ​ (1) 动态传递表格数据渲染 ​ (2) 表头支…

15 款 PDF 编辑器帮助轻松编辑、合并PDF文档

PDF 编辑器在当今的数字环境中至关重要,因为 PDF 已成为共享和存储信息的首选格式。只需几分钟,可靠的 PDF 编辑器即可让用户能够根据其特定需求修改、定制和定制文档。在本文中,我们全面汇编了 15 款最佳免费 PDF 编辑器,让您可以…

Javaweb之HTML,CSS的详细解析

2.4 表格标签 场景:在网页中以表格(行、列)形式整齐展示数据,我们在一些管理类的系统中,会看到数据通常都是以表格的形式呈现出来的,比如:班级表、学生表、课程表、成绩表等等。 标签&#xff…

目标跟踪(DeepSORT)

本文首先将介绍在目标跟踪任务中常用的匈牙利算法(Hungarian Algorithm)和卡尔曼滤波(Kalman Filter),然后介绍经典算法DeepSORT的工作流程以及对相关源码进行解析。 目前主流的目标跟踪算法都是基于Tracking-by-Detec…

YoloV8目标检测与实例分割——目标检测onnx模型推理

一、模型转换 1.onnxruntime ONNX Runtime(ONNX Runtime或ORT)是一个开源的高性能推理引擎,用于部署和运行机器学习模型。它的设计目标是优化执行使用Open Neural Network Exchange(ONNX)格式定义的模型,…

一、Hadoop初始化配置(final+ubuntu保姆级教程)

1、配置虚拟机 三台虚拟机,分别为node1、node2、node3,内存分别为4G、2G、2G,现存最好为(>40G),如下: 2、修改主机名 分别打开三台虚拟机,root用户输入一下命令: no…

Maven3.9.1安装及环境变量配置

一、Maven的下载与安装 maven各版本下载地址 打开链接后自行选择对应版本 下载完成后解压安装,最好别选择c盘,安装目录路径等使用英文,避免产生其他问题 我这里选择的是D盘 二、Maven的环境变量配置 2.1、右键点击此电脑选择属性,点击高级系统设置,点…