STM32 GPIO的几种工作模式

介绍STM32 GPIO的几种工作模式

1、输出模式

在这里插入图片描述

   STM32的引脚输出有两种方式:
      1、推挽输出
      2、开漏输出

1.1 推挽输出

    当引脚设置为推挽输出时,P-MOS和N-MOS共同配合工作。
    当使用HAL库

//该函数的作用就是将P-MOS导通,N-MOS关闭
HAL_GPIO_WritePin(XXX, XXX, 1);
//该函数的作用就是将P-MOS关闭,N-MOS导通
HAL_GPIO_WritePin(XXX, XXX, 0);

在这里插入图片描述
    如上图,当led1的一端接地,另一端接stm32的一个引脚,此时我们可以用推挽输出,输出高低电平来控制小灯的亮灭。

1.2、开漏输出

    开漏输出下,只有N-MOS工作,P-MOS一直处于断开状态。

//N-MOS断开
HAL_GPIO_WritePin(XXX, XXX, 1);

    整个IO口内部处于高阻态,或者说断路,不对外输出电平。

//N-MOS导通
HAL_GPIO_WritePin(XXX, XXX, 0);

    IO口对外输出低电平。
在这里插入图片描述

    如上图,当led2的一端接5v,另一端接在mcu的引脚上。我们可以使用开漏输出控制小灯的亮灭。当write 1时,断路,小灯灭。write 0 时小灯左侧接地右侧接5v,亮。

1.3、输出模式总结

    1、推挽输出小灯是由来自芯片的电压所驱动。
    2、开漏输出没有驱动能力,必须依靠外部的电压源来进行驱动小灯亮灭。

推挽输出开漏输出
高电平P-MOS激活、N-MOS断开,3.3VP-MOS断开、N-MOS断开
低电平P-MOS断开、N-MOS激活P-MOS断开、N-MOS激活
优点可直接输出3.3v配合外部电路,更加灵活
缺点只能输出3.3v高电平实际是高阻态,无法输出电流

2、输入模式

    框图如下:
在这里插入图片描述
    1、外部电流经引脚向内流入首先经过一对上下拉电阻。继续前进会经过肖特基触发器,或者说斯密特触发器。其作用是稳定电平。
    2、斯密特触发器:会有高参考电压和低参考电压。当高于高参考电压会被单片机认为是高电平1,低于低参考电压会被单片机认为是低电平0。如果在两者中间,则维持上次电平不变。
    3、继续前进,该值就会被写入输入数据寄存器。当调用HAL库HAL_GPIO_ReadPin函数时就会读走该值。

2.1、上拉输入

    上拉电阻使能。

2.2、下拉输入

    下拉电阻使能。

2.3、浮空输入

    上下拉电阻都关闭。

2.4、模拟输入

    该模式下是为了读取输入电压的具体数值(ADC), 所以上面框图中在斯密特触发器之前就走向了另一个分支。

3、测试

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ff860285dcd84aafb6f743a923be46fb.pn
在这里插入图片描述

    如上原理图,LED的一脚VCC 3.3V,另一脚接在stm32的PC13上。按键K1接在stm32的PB14上,外部上拉。我们实现按键按下小灯亮,再按下小灯熄灭。

3.1、STM32CubeIDE配置

    新建STM32工程,我这里使用STLINK,配置SW接口用于烧录程序。
在这里插入图片描述
在这里插入图片描述
    ctrl + s 快捷键保存生成代码。

3.2、coding

在这里插入图片描述
    如上图,调用HAL_GPIO_ReadPin会去读取按键脚对应的IDR寄存器获取引脚电平状态,来判断按键是否按下。调用HAL_GPIO_TogglePin对BSRR寄存器操作,实现引脚电平翻转。即可实现按下小灯熄灭活点亮。

4、STM32 GPIO 相关寄存器介绍

4.1、GPIO->ODR寄存器

在这里插入图片描述
    可读可写。低16位,对应位写1输出高电平,写0输出低电平。高16位保留。

4.2、GPIO->BSRR寄存器

在这里插入图片描述
    只写寄存器,32位,既能控制管教为低电平,也能控制管教为高电平。

43、GPIO->BRR寄存器

在这里插入图片描述

在这里插入图片描述

    端口位清除寄存器,只写,只能改变管脚状态为低电平。

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

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

相关文章

SqlServer中连续号及断号查询—附源码

效果如下图所示: SqlServer中连续号及断号查询SQL如下: --1.定义临时表 DECLARE TestTemp TABLE(TestCode NVARCHAR(50),TestNum INT )DECLARE DataTemp TABLE(TestCode NVARCHAR(50),TestNumStr NVARCHAR(100) )--2.插入测试数据 INSERT INTO TestT…

国产体脂方案——蓝牙体脂秤方案

蓝牙体脂秤采用的就是BIA生物电阻抗技术,用户仅需1次测量,就能知道身体的脂肪率,水分率,基础代谢率,肌肉量,骨量,蛋白质,BMI,体重,身体的得分,年龄…

Linux:kubernetes(k8s)pod的基础操作(6)

Linux:kubernetes(k8s)允许在任意节点使用kubectl命令(5)-CSDN博客https://blog.csdn.net/w14768855/article/details/136460090?spm1001.2014.3001.5501 我在前两张进行了基础环境的一系列搭建,现在就正…

模板16-类模板案例

main.cpp #include <iostream> using namespace std;#include "my_array.hpp"//测试自定义数据类型 class Person { public:Person (){}Person (string name, int age){this->m_name name;this->m_age age;}string m_name;int m_age; };void printInt…

深度学习_18_模型的下载与读取

在深度学习的过程中&#xff0c;需要将训练好的模型运用到我们要使用的另一个程序中&#xff0c;这就需要模型的下载与转移操作 代码&#xff1a; import math import torch from torch import nn from d2l import torch as d2l import matplotlib.pyplot as plt# 生成随机的…

NFTScan :什么是 ERC-404?深入解读 NFT 协议的未来

上月初&#xff0c;ERC-404 成为最首要热门的话题&#xff0c;ERC-404 是由 Pandora 团队在 2 月初为创作者和开发者等开源的实验性代币标准&#xff0c;其混合 ERC-20 / ERC-721 实现&#xff0c;具有原生流动性和碎片化等特点。伴随着早期的发展&#xff0c;越来越多参与者开…

Java学习笔记006——子类与父类的类型转换

在Java中&#xff0c;类型转换主要涉及到两种类型&#xff1a;向上类型转换&#xff08;Upcasting&#xff09;和向下类型转换&#xff08;Downcasting&#xff09;。 1. 向上类型转换&#xff08;Upcasting&#xff09;&#xff1a; 向上类型转换是将子类的对象转换为父类类…

leetcode 227. 基本计算器 II

题目描述 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意 不允许使用任何将字符串作为数学表达式计算的内置函数&#x…

win10安全中心误删文件怎么办?解析恢复与预防策略

在使用Windows 10的过程中&#xff0c;许多用户依赖于其内置的安全中心来保护电脑免受恶意软件的侵害。然而&#xff0c;有时安全中心的误判可能导致重要文件被错误地删除。当面对这种情况时&#xff0c;了解如何恢复误删的文件并掌握预防措施显得尤为重要。本文将为您详细解析…

java常用技术栈,java面试带答案

前言 我们从一个问题引入今天的主题。 在日常业务开发中&#xff0c;我们可能经常听到 DBA 对我们说“不要”&#xff08;注意&#xff1a;不是禁止&#xff09;使用 join&#xff0c;那么为什么 DBA 对 join 这么抵触呢&#xff1f;是 join 本身有问题&#xff0c;还是我们使…

【weblogic 报错 application webapp does not have any Components in it.】

当你启动你的web时&#xff0c;报错weblogic 报错 application webapp does not have any Components in it. 检查你的startWeblogic.sh 看一下你的项目路径是否正确。

G1018选择排序

题目描述 完善程序&#xff1a; 输入N个整数&#xff0c;使用选择排序法从小到大输出。 #include<bits/stdc.h> using namespace std; int N; int a[100010]; int main() {freopen("1455.in","r",stdin);freopen("1455.out","w&quo…

私募证券基金动态-24年2月报

成交量&#xff1a;2月日均9492.60亿元 2024年2月A股两市日均成交9492.60亿元&#xff0c;环比增加30.38%、同比增加5.77%。2月整体15个交易日&#xff0c;有4个单日交易日成交金额过万亿&#xff0c;单日交易日最高成交金额为13576.43亿元&#xff08;2月28日&#xff09;&am…

MySQL 学习笔记(基础篇 Day1)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 MySQL 概述 1.1 数据库相关概念 1.2 MySQL 数据库 2 SQL 2.1 SQL 通用语法 2.2 SQL 分类 2.3 DDL 2.4 图形…

【leetcode C++】电话号码的字母组合

17. 电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 题目链接 . - 力扣&#xff08;LeetCode&…

1.类和对象-友元

文章目录 1.全局函数做友元代码运行结果 2.类做友元代码运行结果 1.全局函数做友元 思路分析&#xff1a; 正常情况下&#xff0c;全局函数visit()中的ROOM 类变量r是访问不到Building类中的私有成员的。但是通过在Building类中添加使用全局函数做友元&#xff0c;即可访问私有…

什么是ElasticSearch的深度分页问题?如何解决?

在ElasticSearch中进行分页查询通常使用from和size参数。当我们对ElasticSearch发起一个带有分页参数的查询(如使用from和size参数)时,ElasticSearch需要遍历所以匹配的文档直到达到指定的起始点(from),然后返回从这一点开始的size个文档 在这个例子中: 1.from 参数定义…

ThreadLocal通俗解读,举个例子?

ThreadLocal 解读 ThreadLocal 是 Java 中一个用来创建线程局部变量的类。它为每个使用该变量的线程提供独立的变量副本 线程局部变量意味着对于同一个 ThreadLocal 实例&#xff0c;在不同的线程中访问到的值是不同的&#xff0c;每个线程都有自己的变量副本。这样可以在多线…

代码学习记录13

随想录日记part13 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.06 主要内容&#xff1a;今天的主要内容是二叉树的第二部分哦&#xff0c;主要有层序遍历&#xff1b;翻转二叉树&#xff1b;对称二叉树。 102.二叉树的层序遍历226.翻转二叉树101. 对称二叉…

MySQL用户创建和权限分配

MySQL用户创建和权限分配 用户创建 查看用户 select user,host from user; 创建用户 create user ‘用户名’ ‘host’ identified by 密码’; 删除用户 drop user ‘用户名’ ‘host’; 更新host update user set host ‘%’ where user 用户名‘&#xff1b; 权限分配 查…