stm32之GPIO寄存器

news/2024/4/27 18:15:51/文章来源:https://blog.csdn.net/ILOVEYOUXIAOWANGZI/article/details/136998667

文章目录

      • 1 背景
      • 2 GPIO寄存器的类型
        • 2.1 端口配置寄存器
        • 2.2 设置/清除寄存器和位清除寄存器
      • 3 总结

1 背景

C51单片机在进行数据的输入输出时,是直接操作与外部引脚关联的内部寄存器,例如,当设置P2_1为0时,就是将外部引脚的P21引脚设置为低电平,当读取P2_1时,就是读取P21的电平。与之类似,stm32芯片内部也有很多用于输入输出的寄存器,这些寄存器也是用于操作外部引脚,但是比C51单片机复杂很多。

2 GPIO寄存器的类型

stm32的GPIO口以16位为一组,按照字母顺序分为PA、PB、PC等,PA包含PA0~PA15。

每组GPIO口需要通过多个寄存器进行读写操作:

  • CRL、CRH:端口配置低寄存器和端口配置高寄存器
  • IDR:输入数据寄存器
  • ODR:输出数据寄存器
  • BSRR:设置/清除寄存器
  • BRR:位清除寄存器
  • LCKR:锁定寄存器
2.1 端口配置寄存器

端口配置寄存器用于配置端口的模式,每个端口使用4位进行描述,总共需要64位,于是就用两个32位寄存器存储。

例如,对于GPIOA口,使用GPIOA_CRL和GPIOA_CRH两个32位寄存器进行模式的配置,其中PA0口使用GPIOA_CRL的低4位进行模式的设置,PA1使用GPIOA_CRL的从低到高的第4位到第7位(最低位索引为0)进行模式的设置,剩余端口依次类推。

4位配置的值以及含义:

请添加图片描述

当MODE1和MODE0都为0时,表示输入模式,然后根据CNF1和CNF0区分4种输入模式,否则,就是输出模式,然后根据CNF1和CNF0区分4种输出模式,并且,在输出模式下,MODE1和MODE0还可以表示输出速率。

输入数据寄存器和输出数据寄存器的含义比较明显:输入数据寄存器就是外部引脚通过内部电路转换为0和1后保存到寄存器中,输出数据寄存器则是通过内部电路转换到外部引脚的高低电平,不过两个寄存器都是32位,而外部引脚则是16个一组,因此,两个寄存器都只使用低16位。

2.2 设置/清除寄存器和位清除寄存器

输出数据寄存器只能对整个32位进行操作,如果希望对单个位进行操作(否则,就需要先读取GPIO组的数据,然修改后再整体设置),设置/清除寄存器用于对单个位进行操作。

设置/清除寄存器是32位,高16位是清除位,低16位是设置位,分别对应GPIO组的某个位。例如,GPIOA对应的设置/清除寄存器是GPIOA_BSRR,GPIOA_BSRR的高16位(31位到16位)为清除位,如果索引为20的位设置为1,则将PA4设置为0,如果索引为20的位设置为0,则无效果,同理,GPIOA_BSRR的低16位(15位到0位)为设置位,如果索引为5的位设置为1,则将PA5设置为1,如果索引为5的位设置为0,则无效果。如果针对某一位,同时设置了设置和清除,则设置位生效。

有时候,可能只需要进行清除,可以使用位清除寄存器,也叫做复位寄存器,可以将某些位设置为0。

位清除寄存器是32位,只使用低16位,如果某一位设置为1,则将对应位的输出数据寄存器的值设置为0。例如,GPIOA对应的位清除寄存器是GPIOA_BRR,如果GPIOA_BRR的索引为6的位设置为1,则将PA6设置为0,其他位无变化。

3 总结

外部引脚以16位为一组,内部的数据寄存器都是32位,为了对端口进行配置并方便的进行数据的输入输出,在提供基本的输入输出寄存器的同时,还提供了端口配置寄存器和设置/清除寄存器,能够配置寄存器的模式,并且能够方便的操作单个位。

从开发编程的角度上看,数据寄存器都是只能整体操作,而不能单个位操作,因此,如果是直接操作数据寄存器的话,就需要先读取再设置,操作起来比较麻烦,有了设置/清除寄存器,可以方便的操作单个位,而不影响其他位。而在C51单片机中,数据寄存器是可以位寻址的,可以直接对某一位进行与或的操作。

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

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

相关文章

Spark DAG

Spark DAG 什么是DAG DAG 是一组顶点和边的组合。顶点代表了 RDD, 边代表了对 RDD 的一系列操作。 DAG Scheduler 会根据 RDD 的 transformation 动作,将 DAG 分为不同的 stage,每个 stage 中分为多个 task,这些 task 可以并行运…

后端前行Vue之路(一):初识Vue

1.Vue是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方…

2.6、媒体查询(mediaquery)

概述 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率)&#xff0…

兼容 Presto、Trino、ClickHouse、Hive 近 10 种 SQL 方言,Doris SQL Convertor 解读及实操演示

随着版本迭代,Apache Doris 一直在拓展应用场景边界,从典型的实时报表、交互式 Ad-hoc 分析等 OLAP 场景到湖仓一体、高并发数据服务、日志检索分析及批量数据处理,越来越多用户与企业开始将 Apache Doris 作为统一的数据分析产品&#xff0c…

Vue3气泡卡片(Popover)

效果如下图:在线预览 APIs 参数说明类型默认值必传title卡片标题string | slot‘’falsecontent卡片内容string | slot‘’falsemaxWidth卡片内容最大宽度string | number‘auto’falsetrigger卡片触发方式‘hover’ | ‘click’‘hover’falseoverlayStyle卡片样式…

不可变集合及Stream流

若希望某个数据是不可修改的,就可以考虑使用不可变集合,以提高安全性;(JKD9之后才有) List不可变集合: public static void main(String[] args) {/*创建不可变的List集合"张三", "李四&q…

蓝桥杯练习06给网页化个妆

给页面化个妆 介绍 各个网站都拥有登录页面,设计一个界面美观的登录页面,会给用户带来视觉上的享受。本题中我们要完成一个登录页面的布局。 准备 开始答题前,需要先打开本题的项目代码文件夹,目录结构如下: 其中&…

蓝桥杯2019年第十届省赛真题-组队

一、题目 组队 题目描述 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少? &#xff…

ubuntu - 编译 linphone-sdk

业务需求需要定制sdk,首先声明我们需要的是在Android4.4上跑的sdk,因此本次编译的sdk最低支持为19(不同版本需要的环境不一致),编译过程较容易,难点在于环境配置 环境准备 Ubuntu 18.04.6 android-sdk_r24.…

面试题:Java虚拟机JVM的组成

1. 基础概念 JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收机制 JVM由哪些部分组成,运行流程是什么? …

每日一题 --- 移除链表元素[力扣][Go]

移除链表元素 题目:203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出&#xf…

ViTAR: Vision Transformer with Any Resolution

ViTAR: Vision Transformer with Any Resolution 相关链接:arxiv 关键字:Vision Transformer、Resolution Adaptability、Adaptive Token Merger、Fuzzy Positional Encoding、High-Resolution Image Processing 摘要 本文解决了视觉Transformer&#x…

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试 1 Prerequisites1.1 C11 or C0x Compiler1.2 Pangolin1.3 OpenCV1.4 Eigen3 2 安装 Intel RealSense™ SDK 2.02.1 测试设备2.2 编译源码安装 (Recommend)2.3 预编译包安装 3 编译 ORB-S…

[密码学] 密码学基础

目录 一 为什么要加密? 二 常见的密码算法 三 密钥 四 密码学常识 五 密码信息威胁 六 凯撒密码 一 为什么要加密? 在互联网的通信中,数据是通过很多计算机或者通信设备相互转发,才能够到达目的地,所以在这个转发的过程中,如果通信包…

常见的三种办公室租赁方式各自优缺点

商业办公的租赁市场。找商业办公地点,跟找住宅租房有点像,但目的和要求不同。主要也是三种方式:直接找房东租、接手别人的转租,或者找中介帮忙。每种方式都有它的小窍门和注意事项。 直租 直租商业办公,就是直接和办公…

GPT提示词分享 —— 代码释义者

提示词👇 我希望你能充当代码解释者,阐明代码的语法和语义。 3.5版本👇 free2gpt 4.0版本👇 gpt4

互联网医院APP开发攻略:搭建智能医疗平台

互联网医院APP为患者提供了便捷的就医途径,还为医生和医院提供了更加高效的服务和管理手段。接下来,小编将我们本文将就互联网医院APP的开发攻略,以及如何搭建智能医疗平台进行探讨。 1.确定需求和目标 这包括确定服务对象(患者、…

鸿蒙HarmonyOS应用开发之C/C++标准库机制概述

OpenHarmony NDK提供业界标准库 libc标准库、 C标准库 ,本文用于介绍C/C标准库在OpenHarmony中的机制,开发者了解这些机制有助于在NDK开发过程中避免相关问题。 1. C兼容性 在OpenHarmony系统中,系统库与应用Native库都在使用C标准库&#…

基于springboot实现房屋租赁管理系统项目【项目源码+论文说明】

基于springboot实现房屋租赁系统演示 摘要 房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。 …

Sublime for Mac 使用插件Terminus

1. 快捷键打开命令面板 commandshiftp2. 选择 Package Control: Install Package,然后会出现安装包的列表 3. 在安装终端插件前,我们先装个汉化包,ChineseLocallization,安装完重启 4. 输入 terminus,选择第一个&am…