STM32:GPIO功能描述和工作方式

一、STM32控制原理概要

IO端口位的基本结构

在STM32有特定功能的内存单元,即"寄存器"。寄存器是程序与硬件电路通信的桥梁。寄存器按照每32位二进制0/1数据为一组。存储着芯片特定电路的相关信息。我们就是通过程序对寄存器中的数据进行修改,可以改变某个电路的开关或者读写。控制单片机就是在控制寄存器

例如把PA7设置为高电平时,调用

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SEt)

函数实际上就是对BSRR寄存器的第七个bit位设置成1.


void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{/* Check the parameters */assert_param(IS_GPIO_PIN(GPIO_Pin));assert_param(IS_GPIO_PIN_ACTION(PinState));if (PinState != GPIO_PIN_RESET){GPIOx->BSRR = GPIO_Pin;}else{GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u;}
}
stm32f1xx_hal_gpio.c 中的HAL_GPIO_WritePin的定义
每个 GPI/O 端口有两个 32 位配置寄存器 (GPIOx_CRL GPIOx_CRH) ,两个 32 位数据寄存器
(GPIOx_IDR GPIOx_ODR) ,一个 32 位置位 / 复位寄存器 (GPIOx_BSRR) ,一个 16 位复位寄存
(GPIOx_BRR) 和一个 32 位锁定寄存器 (GPIOx_LCKR)

二、输出驱动器模块

在输出驱动器中,有两个被输出控制模块控制的两个MOS(金氧半场效晶体管),分别时P_MOS和N-MOS。这两个可以简化为两个建议开关。 VDD提供3.3V的高电平,VSS提供0V的低电平。

(1).推挽输出

        假设I/O外连接一个工作电压为3.3V的小灯,小灯另一端接地。那么在推挽输出模式下,P_MOS和N-MOS协同工作.。

  • 当我们写程序控制此IO口输出高电平时,函数内部会对寄存器进行修改,使 P_MOS被激活,N-MOS被关闭,小灯两端形成3.3V电势差,小灯亮起。
  • 当我们写程序控制此IO口输出低电平时,函数内部会对寄存器进行修改,使 P_MOS被关闭,N-MOS被激活,产生的电势差不足,小灯熄灭。

(2),开漏输出

        假设I/O外连接一个工作电压为5V的小灯,那么推挽输出怎样都无法使小灯亮起。在开楼模式下只有N-MOS工作,P-MOS一直处于断开状态。假设工作电压为5V的小灯在另外一端接入外部的5V的电势,VSS与5V形成电势差,那么小灯变可以亮起。开漏输出可以根据需求自行接入电压,更加灵活。

  • 当我们写程序控制此IO口输出高电平时,函数内部会对寄存器进行修改,P_MOS被关闭,使 N-MOS被关闭,电路形成断路,小灯无法亮起。
  • 当我们写程序控制此IO口输出低电平时,函数内部会对寄存器进行修改,P_MOS被关闭,使 N-MOS被激活,相当于IO口向内部一端有0V电势,另一端电势根据外部电路决定。

(3).复用推挽输出和开漏输出

根据电路上显示,输出控制模块实际上有两个控制指令的来源。一个是我们使用HAL_GPIO_WritePin函数控制的输出寄存器。另一个来自于片上外设。比如串口模块,I²C模块等。由于同时控制将会使输出控制模块指令混乱。因此STM32将这两种输出模式由细分为

  • 普通推挽输出
  • 普通开漏输出
  • 复用推挽输出
  • 复用开漏输出

三、输入驱动器模块

(1).普通输入模式

当电流从IO引脚接入时会经过一对上拉加拉电阻

  • 当设置为上拉输入时,上拉电阻启用,VDD与IO引脚相连
  • 当设置为下拉输入时,下拉电阻启用,VSS与IO引脚相连
  • 当设置为浮空输入时,两个电阻都不启用

(2) TTL肖特基(施密特)触发器

电流继续往前走就会到达TTL肖特基(施密特)触发器。其作用是稳定电平。因为电流在实际应用中是会有波动的。如果在高低电平阈值附近上下波动,信号就会不断地变化造成不稳定。因此施密特触发器为了解决这个问题,分别设置了高电平阈值和低电平阈值。当处于低电平状态超过高电平阈值时就会变成高电平,当处于高电平时要低于低电平阈值时才会变成低电平。

最后电流通过施密特触发器便会进入到输入数据寄存器。等待我们用HAL_GPIO_ReadPin函数进行读取。

(3).模拟输入

在读出数据这条"主线"电路中有两个分支,分别是模拟输入复用功能输入。模拟输入分支在到施密特触发器前就叉出去了,没有经过高低电平的调整。因此模拟输入接入的是电压的具体数值复用功能输入在片上外设上使用,其他功能和普通输入模式一样,拿到的都是调整后的高低电平。

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

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

相关文章

pycharm转移缓存目录

原来的缓存目录为C:\Users\86176\AppData\Local\JetBrains&#xff0c;各种配置文件、缓存文件随着pycharm的使用堆积在这里&#xff0c;导致C盘逐渐爆满。 因此需要将缓存目录转移至D盘。首先需要了解缓存目录的知识。 PyCharm 和其他 JetBrains 的 IDE 通常会有两个关键的目…

QSPI介绍

0 Preface/Foreword 1 QSPI介绍 硬件连接框图如下&#xff1a; QSPI接口的Display data format&#xff08;显示数据格式&#xff09; 包含以下几种&#xff1a; 16.7M colors RGB 8,8,8-bits input262K colors, RGB 6,6,6-bits input65K colors, RGB 5,6,5-bits input256 c…

Mac运行Docker报错

Mac运行Docker报错 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助请帮我点…

LabVIEW应用开发——控件的使用(四)

接上文&#xff0c;这篇介绍时间控件。 LabVIEW应用开发——控件的使用&#xff08;三&#xff09; 1、时间控件Time Stamp control 在日常软件开发场景中&#xff0c;时间也是一种常用的控件&#xff0c;用于表达当前时间的显示、对下设置时间、时间同步等等场景。LabVIEW专门…

Python实战小项目分享

Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路&#xff0c;可以选择感兴趣的项目进行实践&#xff0c;加深对Python编程的理解和掌握。在实践过程中&…

数据与视图的完美契合:Vue响应式的交织魅力

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中&#xff0c;数据可视化正成为推动能源领域发展的重要工具。今天&#xff0c;我们将带您一起探索水电站与数据可视化的结合&#xff0c;如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分&#xff0c;它的运行与管理涉及大量的数据。然…

在行首,行尾添加文本,替换文本中的空格、制表符等

本文使用&#xff1a;notepad进行演示&#xff0c;其他编辑器有类似的功能也可使用。 替换文本中的空格、制表符 当我们在查看环境变量的时候&#xff0c;往往用肉眼去看这种格式的是相当痛苦的。 -DDATABASE_DRIVER_CLASS_NAMExxx -DDATABASE_URLxxx -DDATABASE_USERNAMExxx …

python网络爬虫实例

目录 1、访问百度 2、输入单词百度翻译 3、豆瓣电影排行榜 4、豆瓣电影top250 5、下载美女壁纸 1、访问百度 from urllib.request import urlopen url"http://www.baidu.com" respurlopen(url)with open("mybaidu.html",mode"w") as f:f.wr…

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构&#xff0c;BTree的索引结构&#xff0c;我们一般都知道Mysql的存储引擎有两种&#xff0c;MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…

JS中面向对象的程序设计

面向对象&#xff08;Object-Oriented&#xff0c;OO&#xff09;的语言有一个标志&#xff0c;那就是它们都有类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念&#xff0c;因此它的对象也与基于类的语言中的对象有所不…

机器学习-模型评估与选择

文章目录 评估方法留出法交叉验证自助法 性能的衡量回归问题分类问题查准率、查全率与F1ROC与AUC 在机器学习中&#xff0c;我们通常面临两个主要问题&#xff1a;欠拟合和过拟合。欠拟合指模型无法在训练数据上获得足够低的误差&#xff0c;通常是因为模型太简单&#xff0c;无…

Java项目_家庭记账(简易版)

文章目录 简介代码实现 简介 该项目主要用来练习&#xff0c;Java的变量&#xff0c;运算符&#xff0c;分支结构和循环结构的知识点。 程序界面如下&#xff1a; 登记收入 登记支出 收支明细 程序退出 代码实现 package project;import java.util.Scanner;import sta…

循环队列c语言版

一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…

Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析

最近DOTS发布了正式的版本, 我们来分享一下DOTS里面Baking核心机制&#xff0c;方便大家上手学习掌握Unity DOTS开发。今天给大家分享的Baking机制中的Filter Baking Output与Prefab In Baking。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础…

Plex踩坑——plex web无法找到媒体服务器

现象&#xff1a;之前安装过plex server&#xff0c;然后卸载了。再次重装后&#xff0c;plex web无法找到媒体服务器。 原因&#xff1a;卸载plex server时需要手动将plex的注册表删除&#xff1a;HKEY_CURRENT_USER\Software\Plex, Inc. 原文链接Uninstall Plex Media Serve…

组件通信$refs | $parent |$root

父组件传值子组件用Props 子组件传值父组件用$emit 父组件直接还可以直接取子组件的值用$refs 父组件直接从子子组件中获取值$refs 不建议使用会增加组件之间的耦合度&#xff0c;一般用于第三方插件的封装 ref如果绑定在dom节点上&#xff0c;拿到的就是原生dom节点。 ref如…

【从0到1设计一个网关】自研网关的架构搭建

文章目录 项目骨架搭建领域模型与DDD核心上下文模型封装静态配置的加载组件生命周期项目骨架搭建 这里我使用的IDE工具是IDEA。 从上文中我们了解到,我们的项目大概有五个模块,Client,Common,Register Center,Config Center,Core这五个模块。 下面开始具体骨架的搭建,…

项目部署Linux步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release&#xff0c;因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool&#xff1a;工具包集合&#xff0c;包含ifconfig等命令 yum install -y net-…

Hive安装配置笔记

版本说明 hadoop-3.3.6&#xff08;已安装&#xff09; mysql-8&#xff08;已安装&#xff09; hive-3.1.3 将hive解压到对应目录后做如下配置&#xff1a; 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…