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

news2024/10/5 17:23:43

一、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.coloradmin.cn/o/1118014.html

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

相关文章

高速DSP系统设计参考指南(七)电磁干扰基础

&#xff08;七&#xff09;电磁干扰基础 1.概述2.EMI概述3.数字信号4.电流环路5.电源6.传输线7.电源层和地层8. 减少电磁干扰经验法则9.总结 1.概述 高速DSP系统中的辐射是由通过印刷电路板走线传播的快速开关电流和电压引起的。随着DSP速度的提高&#xff0c;印刷电路板走线…

【探索Linux】文件描述符 | 重定向 | 基础IO —— 强大的命令行工具 P.12

阅读导航 前言一、open()函数返回值二、文件描述符fd1. 文件描述符的分配规则2. 文件描述符0、1、2 三、重定向1. 重定向的本质⭕图解 2. dup2 系统调用函数 温馨提示 前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&…

Python常用函数中NumPy的使用教程

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1. txt文件 (1) 单位矩阵&#xff0c;即主对角线上的元素均为1&#xff0c;其余元素均为0的正方形矩阵。 在NumPy中可以用eye函数创建一个这样的二维数组&#…

合同管理系统

合同管理系统 功能介绍&#xff1a; 功能特性&#xff1a; 根据对合同管理系统系统分析合同管理由以下模块组成&#xff0c;相对方管理、合同文本管理、合同审批管理、合同履行审批、风险事件管理、合同查询、合同统计、系统提醒、系统管理。 1、相对方管理 1.有“相对方…

山西电力市场日前价格预测【2023-10-22】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-22&#xff09;山西电力市场全天平均日前电价为370.96元/MWh。其中&#xff0c;最高日前电价为612.26元/MWh&#xff0c;预计出现在18: 30。最低日前电价为216.57元/MWh&#xff0c;预计…

【换根DP】CF1882 D

Problem - D - Codeforces 思路&#xff1a; 一个很套路的换根 首先观察到&#xff0c;先对儿子一定比先对父亲操作来的代价小&#xff0c;因此考虑先对儿子操作&#xff0c;再对父亲操作 然后就可以直接换根了&#xff0c;首先考虑树形DP&#xff0c;设dp[u] 为 把 u 子树染…

Ubuntu系统下使用docker容器配置nginx并部署前端项目

1.下载 Nginx 镜像 命令 描述 docker pull nginx 下载最新版 Nginx 镜像 :2. 创建要挂载的宿主机目录 启动前需要先创建 Nginx 外部挂载的配置文件&#xff08; /home/nginx/conf/nginx.conf&#xff09; 之所以要先创建 , 是因为 Nginx 本身容器只存在 / etc/nginx 目录 ,…

京东数据平台:2023年9月京东净水器行业品牌销售排行榜!

鲸参谋监测的京东平台9月份净水器市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;今年9月份&#xff0c;京东平台净水器的销量为64万&#xff0c;环比下滑约9%&#xff0c;同比下滑约16%&#xff1b;销售额为5.2亿&#xff0c;环比下滑约12%&#xff0c;…

GO学习之 goroutine的调度原理

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

springboot缓存篇之mybatis一级缓存和二级缓存

前言 相信很多人都用过mybatis&#xff0c;这篇文章主要是介绍mybatis的缓存&#xff0c;了解一下mybatis缓存是如何实现&#xff0c;以及它在实际中的应用 一级缓存 什么是mybatis一级缓存&#xff1f;我们先看一个例子&#xff1a; GetMapping("/list") public…

折半搜索-oier复健练习题目

算法介绍&#xff1a; 折半搜索常用于复杂度O(n!)级的搜索问题&#xff0c;当我们发现很显然可以将问题划分为两部分分别搜索枚举&#xff0c;再合二为一求出最终答案时&#xff0c;我们可以选择使用折半搜索。 常见数据规模&#xff1a; 对于答案的值域往往没有要求&#x…

Jenkins自动化部署SpringBoot项目的实现

本文主要介绍了Jenkins自动化部署SpringBoot项目的实现&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 1、Jenkins介绍 1.1、概念 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成…

shell算术运算符学习笔记

文章目录 算术运算符&#xff1a;算术运算扩展算术运算指令expr算术运算指令let自增自减运算符 算术运算符&#xff1a; 加法 - 减法 * 乘法 / 除法 % 取余 ** 幂运算算术运算扩展 算术运算扩展的运算数只能是整数 [rootlocalhost tmp]# num1$[41] [rootlocalhost tmp]# echo …

子类的构造与析构过程

一、简介 父类&#xff0c;也称基类&#xff0c;其构造方法和析构方法不能被继承&#xff1b; 子类&#xff0c;也称派生类&#xff0c;继承父类的方法和属性&#xff0c;但要加入新的构造和析构函数。 二、构造与析构过程 构造&#xff1a;先调用父类——>再调用子类 析构&…

STM32 HAL高级定时器正交编码模式案例

STM32 HAL高级定时器正交编码模式案例 &#x1f516;基于stm32F030RBT6单片机采用高级定时器1&#xff0c;编码器模式&#xff0c;测试EC11编码器。 &#x1f3ac;EC11测试效果&#xff1a; &#x1f33f;STM32定时器编码器有3种映射模式: ✨本次采用的是上面的模式3&#x…

同城外卖跑腿小程序开发的关键步骤

随着快节奏的生活方式和数字化技术的不断发展&#xff0c;外卖和跑腿服务变得越来越受欢迎。为了满足这一需求&#xff0c;越来越多的创业者和企业开始着手开发同城外卖跑腿小程序。本文将详细介绍同城外卖跑腿小程序开发的关键步骤&#xff0c;帮助您了解如何成功创建一个具有…

【Cesium】绘制线、面、体

文章目录 墙矩形长方体不规则图形椭圆椭圆柱正圆圆柱圆锥不规则多边形柱一串糖葫芦&#xff1f;带洞的矩形一系列矩形、圆形贴地的线围墙宽线宽线的体复杂线状体一根水管 墙 entities.add({wall: {id:"wall",positions: Cesium.Cartesian3.fromDegreesArray([-95.0,5…

java智慧工地云平台源码,以物联网、移动互联网技术为基础,结合大数据、云计算等,实现工程管理绿色化、数字化、精细化、智能化的效果

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;围绕人、机、料、法、环等各方面关键因素&#xff0c;彻底改变传统建筑施工现场参建各方现场管理的交互方式、工作方式和管理模式&#xff0c;智…

结构体内存分配与编译器对齐数

一、编译器对齐数 先说一个编译器的概念&#xff1a;对齐数。 1、对于基本类型的数据成员&#xff1a; 结构体的成员的对齐数min&#xff08;编译器对齐数&#xff0c;成员占内存大小&#xff09; 例如VS编译器对齐数位8&#xff0c;那么int型数据对齐数就为4&#xff0c;doubl…

如何理解OSI七层模型?

一、是什么 OSI &#xff08;Open System Interconnect&#xff09;模型全称为开放式通信系统互连参考模型&#xff0c;是国际标准化组织 ( ISO ) 提出的一个试图使各种计算机在世界范围内互连为网络的标准框架 OSI 将计算机网络体系结构划分为七层&#xff0c;每一层实现各自…