stm32之GPIO寄存器

文章目录

      • 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.rhkb.cn/news/290294.html

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

相关文章

LeetCode.2908. 元素和最小的山形三元组 I

题目 2908. 元素和最小的山形三元组 I 分析 首先,看到这道题,第一反应就是暴力方法,三层for循环,枚举每一种情况,代码如下 class Solution {public int minimumSum(int[] nums) {int min Integer.MAX_VALUE;for(i…

【详细讲解PostCSS如何安装和使用】

🌈个人主页:程序员不想敲代码啊🌈 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家🏆 👍点赞⭐评论⭐收藏 🤝 希望本文对您有所裨益,如有不足之处,欢迎在评论区提…

GPU算力池管理工具Determined AI部署与使用教程(2024.03)

1. 概念 1.1 什么是Determined? Determined AI 是一个全功能的深度学习平台,兼容 PyTorch 和 TensorFlow。它主要负责以下几个方面: 分布式训练:Determined AI 可以将训练工作负载分布在多个 GPU(可能在多台计算机上…

Untiy 布局控制器Aspect Ratio Fitter

Aspect Ratio Fitter是Unity中的一种布局控制器组件,用于根据指定的宽高比来调整包含它的UI元素的大小。实际开发中,它可以确保UI元素保持特定的宽高比,无论UI元素的内容或父容器的大小如何变化。 如图为Aspect Ratio Fitter组件的基本属性&…

开源 OLAP 及其在不同场景下的需求

目录 一、开源 OLAP 综述 二、OLAP场景思考 2.1 面向客户的报表 2.2 面向经营的报表 2.3 末端运营分析 2.4 用户画像 2.5 订单分析 2.6 OLAP技术需求思考 三、开源数据湖/流式数仓解决方案 3.1 离线数仓体系——Lambda架构 3.2 实时数据湖解决方案 3.3 实时分析解决…

Spark基于DPU Snappy压缩算法的异构加速方案

一、总体介绍 1.1 背景介绍 Apache Spark是专为大规模数据计算而设计的快速通用的计算引擎,是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些不同之处使 Spark 在某些工作负载方面表现得更加优越。换句话说&am…

Android开发 --- Android12外部存储权限问题

1.问题 Android 11中强制启用Scoped Storage是为了更好地保护用户的隐私,以及提供更加安全的数据保护。拥有对整个SD卡的读写权限,在Android 11上被认为是一种非常危险的权限,同时也可能会对用户的数据安全造成比较大的影响。Android12使用如…

html安装及入门

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、简单介绍一下前端三大件开发工具 二、安装VSCode三、VSCode相关配置1.汉化2.live server3.使用前 总结 提示:以下是本篇文章正文内容,下…

【热门话题】Yarn:新一代JavaScript包管理器的安装与使用

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Yarn:新一代JavaScript包管理器的安装与使用引言一、Yarn的安装1. 系…

探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较

title: 探索多种数据格式:JSON、YAML、XML、CSV等数据格式详解与比较 date: 2024/3/28 17:34:03 updated: 2024/3/28 17:34:03 tags: 数据格式JSONYAMLXMLCSV数据交换格式比较 1. 数据格式介绍 数据格式是用于组织和存储数据的规范化结构,不同的数据格…

腾讯云邮件推送功能有哪些?如何有效使用?

腾讯云邮件推送如何设置?怎么用邮件推送做高效营销? 腾讯云作为业界领先的云服务提供商,其邮件推送功能在便捷性、稳定性和安全性上都有着出色的表现。那么,腾讯云邮件推送功能究竟有哪些呢?让AokSend来探个究竟。 腾…

Mac添加和关闭开机应用

文章目录 mac添加和关闭开机应用添加开机应用删除/查看 mac添加和关闭开机应用 添加开机应用 删除/查看 打开:系统设置–》通用–》登录项–》查看登录时打开列表 选中打开项目,点击“-”符号

第十二届蓝桥杯物联网试题(省赛)

思路: 这个考了一个RTC的配置,RTC我只配过一次,所以有些生疏,还是不能大意,一些偏僻的考点还是要多练,在获取RTC时间的时候也遇到一些bug,这个后续会用一篇博客将最近遇到的BUG都总结一下 主要的难点还是…

【Django学习笔记(二)】CSS语言介绍

CSS语言介绍 前言正文1、CSS 快速了解2、CSS 应用方式2.1 在标签上应用2.2 在head标签中写style标签2.3 写到文件中 3、问题探讨:用Flask框架开发不方便4、选择器4.1 ID选择器4.2 类选择器4.3 标签选择器4.4 属性选择器4.5 后代选择器4.6 注意事项 5、样式5.1 高度和…

2.8、下拉刷新与上拉加载

页面的下拉刷新与上拉加载功能在移动应用中十分常见,例如,新闻页面的内容刷新和加载。这两种操作的原理都是通过响应用户的触摸事件,在顶部或者底部显示一个刷新或加载视图,完成后再将此视图隐藏。 实现思路 以下拉刷新为例,其实现主要分成三步: 监听手指按下事件,记录…

echarts双堆叠图

效果 代码 option {tooltip: {trigger: axis,axisPointer: { // 坐标轴指示器&#xff0c;坐标轴触发有效type: shadow // 默认为直线&#xff0c;可选为&#xff1a;line | shadow},formatter: function (params) { var res<div><p>时间&…

自增id,UUID,雪花id

这里写自定义目录标题 UUID1.优点2. 缺点 雪花id1.优点2.缺点 自增id1.优点2.缺点 使用 UUID 替代雪花 ID 行不行&#xff1f; UUID UUID&#xff1a;Universally Unique ldentifier 通用 唯一 标识符 对于所有的UUID它可以保证在空间和时间上的唯一性。它是通过MAC地址&…

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测

时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测 目录 时序预测 | Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-BP麻雀算法优化BP神经网络时间序列预测&#xff08;完整源码和数据…

FTP 文件传输服务

FTP连接 控制连接&#xff1a;TCP 21&#xff0c;用于发送FTP命令信息 数据连接&#xff1a;TCP 20&#xff0c;用于上传、下载数据 数据连接的建立类型&#xff1a; 主动模式&#xff1a;服务端从 20 端口主动向客户端发起连接 被动模式&#xff1a;服务端在指定范围…

数据结构-哈希表-007

1哈希表-通讯录 1.1哈希结点结构体定义 /*自定义数据类型*/ typedef struct person_information {char name[32];char sex;int age;char tel[32];char addr[64]; }DATA_TYPE;/*定义一个哈希数据结点*/ typedef struct hash_node {DATA_TYPE data;//哈希结点数据域struct hash…