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.mzph.cn/news/768213.shtml

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

相关文章

YOLOV5 部署:TensorRT的安装和使用

1、介绍 TensorRT 可以加速神经网络的推理时间,常常在工业生产中使用 因为TensorRT需要使用到cuda和cudnn加速,所以需要安装这两个,安装的具体步骤参考前文: YOLOV5 部署:cuda和cuDNN安装-CSDN博客 2、TensorRT 下载 TensorRT下载地址:NVIDIA TensorRT Download | NV…

6.windows ubuntu 子系统 测序数据质量控制。

上一个分享,我们对测序数据进行了质量评估,接下来我们需要对数据进行数据质量控制。 数据预处理(Data Preprocessing):包括去除接头序列(adapter trimming)、去除低质量序列(qualit…

Spark—GraphX实战 OneID

OneID 前面我们学习了ID Mapping,包括ID Mapping 的背景介绍和业务场景,以及如何使用Spark 实现ID Mapping,这个过程中涉及到了很多东西,当然我们都通过文章的形式介绍给大家了,所以你再学习今天这一节之前&#xff0…

FPGA时钟资源详解——时钟Buffer的选择

目录 一、概述 二、时钟Buffer的选择 2.1 BUFG 2.2 BUFR 和 BUFIO 2.2.1 源同步接口的支持 2.2.2 扩展时钟域转换功能 2.2.3 BUFR 作为简单的时钟分频器 2.3 BUFH 2.3.1 BUFH 的关键特性 2.3.2 应用场景 三、总结 3.1 BUFG(全局时钟缓冲器&…

OpenCV4.9.0开源计算机视觉库核心功能(核心模块)

转到:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 介绍使用 下一篇:如何使用OpenCV扫描图像、查找表和时间测量 ​ OpenCV核心功能主要有以下各个:本文将开始介绍下列内容: Mat - 基…

SpringBoot配置JWT拦截器

目录 1.背景介绍 2.前提工作 3.具体代码 (1)相关依赖 (2)相关配置文件 (3)JwtUtils类 (4)准备好登录逻辑代码(Dao、Service、Controller) &#xff0…

解决方案Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j.

文章目录 一、现象二、解决方案 一、现象 当安装好JDK跟neo4j,用neo4j.bat console来启动neo4却报错: 部分报错信息: Starting Neo4j. WARNING! You are using an unsupported Java runtime. Please use Oracle Java™ 11, OpenJDK™ 11 t…

大白话扩散模型(无公式版)

背景 传统的图像生成模型有GAN,VAE等,但是存在模式坍缩,即生成图片缺乏多样性,这是因为模型本身结构导致的。而扩散模型拥有训练稳定,保持图像多样性等特点,逐渐成为现在AIGC领域的主流。 扩散模型 正如…

设计模式学习笔记 - 设计模式与范式 - 创建型:6.建造者模式:详解构造函数、set方法、建造者三种对象创建方式

概述 本章学习一个比较常用的创建型设计模式,Builder 模式,中文翻译为建造者模式或构建者模式,也有人叫它生成器模式。 建造者模式的原理和代码实现非常简单,掌握起来并不难,难点在于应用场景。比如,你有…

Google ScreenAI代表了一款先进的视觉语言模型,专为用户界面(UI)和视觉情境下的语言理解而设计

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

华为od真题2023-C卷-三叉搜索树

题目描述: 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的规则是: 1.如果数小于节点的数减去500,则将数插入节点的左子树2.如果数大于…

政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 前言 TensorFlow Extended(TFX&a…

深入了解Redis的过期策略和内存淘汰机制

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…

语言模型的原理、实战与评估

语言模型的原理、实战与评估是一个宽泛的话题,下面是对这三个方面简要概述: 语言模型的原理 语言模型(Language Model, LM)是一种统计模型,用于估计一段文本序列的概率分布。它的核心任务是给定一系列词语,计算出这些词语组合成一个完整句子或段落的概率。典型的语言模型…

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多的一方建立外键,指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程,一门课程也可以…

MySQL基础复习

目录 一、简单的命令 二、SQL语句分类 三、简单查询 四、条件查询 五、排序 一、简单的命令 net start 服务名称 net stop 服务名称 mysql -uroot -p123456 显示密码形式 mysql -uroot -p 隐藏密码形式 exit 退出 show databases; 查看MySQL中的数据库有哪些 use test…

RuleApp资源社区,知识付费社区,可对接typecho的小程序APP

强大的文章/社区/自媒体客户端,支持打包为安卓,苹果,小程序。包括文章模块,用户模块,支付模块,聊天模块,商城模块等基础功能,包含VIP会员,付费阅读等收费体系&#xff0c…

AttributeError: ‘_MSDataLoaderIter‘ object has no attribute ‘_put_indices‘

问题描述 复现代码过程中遇到错误:AttributeError: _MSDataLoaderIter object has no attribute _put_indices 解决方案 出错的原因是代码中使用了不存在的属性"_put_indices"。这个错误可能与你使用的版本不兼容有关。在pytorch1.x版本中,&q…

c语言函数大全(I开头)

c语言函数大全(I开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…

【生产力】Mac 窗口布局工具 Magnet

Magnet 是一款为Mac操作系统设计的实用工具,旨在帮助用户更加方便地管理和组织他们的窗口布局。通过使用Magnet,用户可以轻松地将应用程序窗口拖放到屏幕的各个部分,从而实现窗口的自动排列和大小调整。这款工具特别适合需要同时处理多个应用…