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.hqwc.cn/news/506252.html

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

相关文章

Java+SpringBoot+Vue:志愿服务的数字化之旅

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

守护无价数据:文件备份的重要性与实用策略

一、数据安全:为何文件备份至关重要 在数字化时代,我们的生活和工作越来越离不开电子设备与其中的文件数据。这些文件可能包含重要的工作文档、珍贵的家庭照片、个人的创意作品等,它们是我们回忆的载体,也是我们工作和创新的基石…

JavaScript入门学(Web APIs)

1.变量声明 2 DOM介绍 2.1 什么是DOM 2.2 DOM树 2.3 DOM对象&#xff08;重要&#xff09; 3.DOM&#xff08;文档对象模型&#xff09;-获取元素 3.1 获取匹配的第一个元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&…

GaN建模:强大但富有挑战性

来源&#xff1a;Modeling GaN: Powerful but Challenging&#xff08;10年&#xff09; 文章的研究内容 这篇文章主要研究了氮化镓&#xff08;GaN&#xff09;高电子迁移率晶体管&#xff08;HEMTs&#xff09;的建模问题。GaN HEMTs是微波频段高功率发射器设计中的关键技术…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜视行人检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发高效的夜视行人检测系统对于提升夜间安全和监控效能至关重要。本篇博客详尽介绍了如何利用深度学习技术搭建一个夜视行人检测系统&#xff0c;并提供了完整的实现代码。本系统采用了先进的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5进行了性能比较…

Qt 简约美观的加载动画 文本风格 第八季

今天和大家分享一个文本风格的加载动画, 有两类,其中一个可以设置文本内容和文本颜色,演示了两份. 共三个动画, 效果如下: 一共三个文件,可以直接编译 , 如果对您有所帮助的话 , 不要忘了点赞呢. //main.cpp #include "LoadingAnimWidget.h" #include <QApplic…

【风格迁移】对比度保持连贯性损失 CCPL

对比度保持连贯性损失 CCPL 提出背景解法&#xff1a;对比度保持连贯性损失&#xff08;CCPL&#xff09;对比学习&#xff1a;在无需标签的情况下有效学习区分特征应用CCPL的步骤 - 高层次描述应用CCPL的步骤 - 技术细节简单协方差变换&#xff08;SCT&#xff09;的详细过程逻…

linux之进程理解(1)

目录 1. 冯诺依曼体系结构 2. 操作系统(OS) 2.1 概念 2.2 设计OS的目的 2.3 定位 2.4 理解管理 3. 系统调用和库函数概念 4. 补充 1. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体…

集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍

Hqst华轩盛(石门盈盛)电子导读&#xff1a;集成2.5G/5G/10G高速率网络变压器的RJ45网口连接器产品特点介绍&#xff1a; 第一、 高速率&#xff1a;支持高达2.5Gbps、5Gbps和10Gbps的传输速率&#xff0c;能够满足高带宽的网络应用需求。 第二、 集成2.5G/5G/10G高速率网…

【Vue3】全局切换字体大小

VueUse 先安装VueUse <template><header><div class"left">left</div><div class"center">center</div><div class"right">right</div></header><div><button click"cha…

管理类联考--复试--能说会道

复试:面试时要能说会道 复试的脚步越来越近&#xff0c;考生又重新燃起了初试时的紧张劲儿&#xff0c;不少同学对复试抱有恐惧感&#xff0c;对于复试的未知性感到紧张&#xff0c;不知道要准备些什么。辅导老师提醒考生&#xff0c;复试其实没有那么可怕&#xff0c;尤其是面…

【SpringBean】bean的作用域和bean的生命周期

目录 前言 一 bean的作用域 1. singleton——唯一 bean 实例 2. prototype——每次请求都会创建一个新的 bean 实例 3. request——每一次HTTP请求都会产生一个新的bean&#xff0c;该bean仅在当前HTTP request内有效 4. session——每一次HTTP请求都会产生一个新的 bean&…