STM32 从0开始系统学习5

news2024/11/7 7:47:19

目录

STM32 GPIO输入的四种模式

Practice And Usage

练习与封装

Detailed And Reference

更加具体的说明

输入浮空模式

输入上拉模式

输入下拉模式

模拟功能


我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接触外部中断的时候,我们仍然会选择以一种简单的手段(轮询)直接检测是否有外部信号输出来。

STM32 GPIO输入的四种模式

当然,我们的输入也有四种模式。仔细思考一下,我们能动的就是处理器内部了。实际上,根据处理器最后选择使用电路的不同,我们的外在行为也不一样。这里写一下:

  • 上拉输入:在输入引脚上连接一个上拉电阻,将引脚默认拉至高电平(逻辑1)。当输入引脚被按键或其他设备拉至低电平(逻辑0)时,可以检测到状态变化。

  • 下拉输入:在输入引脚上连接一个下拉电阻,将引脚默认拉至低电平(逻辑0)。当输入引脚被按键或其他设备拉至高电平(逻辑1)时,可以检测到状态变化。

  • 浮空输入:输入引脚处于高阻状态,没有上拉或下拉电阻连接。此时引脚的状态不稳定,容易受到外部噪声的影响。通常用于不需要确定电平状态的场合。

  • 模拟模式:输入引脚被配置为模拟输入,可以读取连续的电压值。适用于接收模拟信号(如传感器输出),并将其转换为数字信号进行处理。

你可以看到:上拉下拉就是说明我们的电平摩恩被拉到哪里起作用,你可以理解为内部的水位被抬到高还是低,只有有高度差电流才会流动。我想这样说很明白了。

功能上拉输入下拉输入浮空输入模拟模式
默认状态高电平(逻辑1)低电平(逻辑0)不稳定,未定义读取连续的模拟电压
连接方式上拉电阻连接到电源下拉电阻连接到地无连接连接模拟信号源
噪声敏感性较低(受到上拉电阻影响)较低(受到下拉电阻影响)较高(容易受外部噪声影响)视信号源质量而定
应用场景按键输入、开关检测按键输入、开关检测不需要固定状态的输入传感器输入、模拟信号读取

Practice And Usage

还是GPIO的东西,但是只需要这些地方变动:

gpio_init_struct.Pin = KEY1_GPIO_PIN; /* KEY1引脚 */ 
gpio_init_struct.Mode = GPIO_MODE_INPUT;
gpio_init_struct.Pull = GPIO_PULLUP;    // 这个地方就是选择何种上拉了
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;

使用到的读取函数就是:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

读取指定 GPIO 引脚电平状态的函数。

练习与封装

更改led_driver.c为gpio_driver.c, 使用一个按钮来控制LED是否闪烁!

提示:

新增加函数: 返回状态如何,

GPIOState gainGPIOState(CCGPIO* gpio)

当然这个GPIOState是笔者修改了GPIO_OutputState的结果. 总而言之返回的就是高低电平的区别

编写测试样例的时候需要注意按钮另一侧接的是高电平还是低电平来决定是上拉还是下拉

MCU_Libs/Drivers at main · Charliechen114514/MCU_Libs (github.com)

参考代码在这里

Detailed And Reference

更加具体的说明

输入浮空模式

上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模式下,IO 口的电平完全是由外部电路决定。如果 IO 引脚没有连接其他的设备,那么检测其输入电平是不确定的。该模式可以用于按键检测等场景。

输入上拉模式

上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,所以只是“弱上拉”,不适合做电流型驱动。

输入下拉模式

下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大,所以不适合做电流型驱动。

模拟功能

上下拉电阻断开,施密特触发器关闭,双MOS 管也关闭。其他外设可以通过模拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于 ADC、DAC、MCO这类操作模拟信号的外设。

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

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

相关文章

使用Git进行版本控制的最佳实践

文章目录 Git简介基本概念仓库(Repository)提交(Commit)分支(Branching) 常用命令初始化仓库添加文件提交修改查看状态克隆仓库分支操作合并分支推送更改 最佳实践使用有意义的提交信息定期推送至远程仓库使…

冒泡排序和二分查找--go

冒泡排序的逻辑 二分查找的逻辑 func bubbleSort(arr *[5]int){//冒泡排序fmt.Println(*arr)temp : 0for j : len(*arr); j > 0; j-- {for i : 0; i < j-1; i {temp (*arr)[i]if((*arr)[i] > (*arr)[i1]){(*arr)[i] (*arr)[i1](*arr)[i1] temp}}} }func binaryF…

flutter区别于vue的写法

View.dart 页面渲染&#xff1a; 类似于vue里面使用 <template> <div> <span> <textarea>等标签绘制页面, flutter 里面则是使用不同的控件来绘制页面 样式 与传统vue不同的是 flutter里面没有css/scss样式表&#xff0c; Flutter的理念是万物皆…

电影《焚城》全国上映 王丹妮诠释新时代女性力量

今日&#xff0c;电影《焚城》全国上映&#xff0c;该片由刘德华、白宇、莫文蔚和王丹妮主演&#xff0c;以一场由高强度放射性物质铯137泄漏引发的城市灾难为背景&#xff0c;深刻描绘了人们在生死存亡关头的抉择与抗争。 王丹妮在片中饰演飒爽独立、智慧勇敢的消防队长Madam …

uniapp:启动界面关闭时长控制

代码控制关闭启动界面 App启动后不会自动关闭启动界面&#xff0c;需要在代码中调用plus.navigator.closeSplashscreen关闭启动界面。"app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"autoclose" : false,}, }很多…

Three.js 快速入门构建你的第一个 3D 应用

![ 开发领域&#xff1a;前端开发 | AI 应用 | Web3D | 元宇宙 技术栈&#xff1a;JavaScript、React、Three.js、WebGL、Go 经验经验&#xff1a;6年 前端开发经验&#xff0c;专注于图形渲染和AI技术 开源项目&#xff1a;github 晓智元宇宙、数字孪生引擎、前端面试题 大家好…

二:java 基础知识(2)-- 初始java/语法基础

目录 idea中文插件 第一个 Java 程序 Java数据类型&#xff0c;常量与变量 1. 数据类型 1.1 基本数据类型 1.2 引用数据类型 2. 常量 2.1 特性 2.2 定义常量 ​编辑 3. 变量 3.1 变量的定义与初始化 3.2 变量的类型 局部变量&#xff1a;在方法内声明的变量&#xff0…

【AAOS】【源码分析】CarSystemUI -- CarSystemBar

CarSystemBar不像Android手机那样固定的顶部“状态栏”和底部“导航栏”,而是将StatusBar和NavigationBar都统称为SystemBar,可以通过如下配置为每侧最多配置一个“系统栏”。 packages/apps/Car/SystemUI/res/values/config.xml<!-- Configure which system bars should …

企业物流管理数据仓库建设的全面指南

文章目录 一、物流管理目标二、总体要求三、数据分层和数据构成&#xff08;1&#xff09;数据分层&#xff08;2&#xff09;数据构成 四、数据存储五、数据建模和数据模型&#xff08;1&#xff09;数据建模&#xff08;2&#xff09;数据模型 六、总结 在企业物流管理中&…

多线程学习篇六:park / unpark

1. API LockSupport.park()&#xff1a;暂停当前线程LockSupport.unpark (线程对象)&#xff1a;恢复某个线程的运行 1.1 先 park 再 unpark main 线程睡眠时间大于 t1 线程睡眠时间 Slf4j(topic "c.Test01") public class Test01 {public static void main(Str…

计算机网络:网络层 —— IPv4 数据报的首部格式

文章目录 IPv4数据报的首部格式IPv4数据报分片生存时间 TTL字段协议字段首部检验和字段 IPv4数据报的首部格式 IPv4 数据报的首部格式及其内容是实现 IPv4 协议各种功能的基础。 在 TCP/IP 标准中&#xff0c;各种数据格式常常以32比特(即4字节)为单位来描述 固定部分&#x…

基于SSM演出道具租赁系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;道具类型管理&#xff0c;道具出租管理&#xff0c;租赁订单管理&#xff0c;道具归还管理&#xff0c;系统管理 商家账号功能包括&#xff1a;系统首页&…

《使用Gin框架构建分布式应用》阅读笔记:p272-p306

《用Gin框架构建分布式应用》学习第15天&#xff0c;p272-p306总结&#xff0c;总35页。 一、技术总结 1.TDD(test-driven development) 虽然经常看到TDD这个属于&#xff0c;从本人的工作经历看&#xff0c;实际开发中用得相对较少。 2.unitest(单元测试) go语言开发中&a…

三种SPI机制的了解及使用

文章目录 1.SPI机制概念2.Java SPI2.1 创建一个项目&#xff0c;并创建如下模块2.2 db-api模块2.3 mysql-impl模块2.4 oracle-impl模块2.5 main-project模块 3.Spring SPI4.Dubbo SPI 1.SPI机制概念 SPI全程Service Provider Interface&#xff0c;是一种服务发现机制。 SPI的…

【Linux系统编程】第四十弹---深入理解操作系统:信号捕捉、可重入函数、volatile关键字与SIGCHLD信号解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、捕捉信号 1.1、内核如何实现信号的捕捉 1.2、内核态与用户态 1.3.1、用户态&#xff08;User Space&#xff09; 1.3.2、…

【面试】数组中 Array.forEach()、Array.map() 遍历结束后是否改变原数组

forEach 、map 同理 数组内元素是 基本数据类型 时&#xff0c; 1.1. 直接给 item赋值&#xff0c;是 不会改变原数组 的&#xff08;如图中1&#xff09;&#xff0c; 1.2. 通过 原数组索引赋值 是会改变原数组的&#xff08;如图中2&#xff09;数组内元素是 复杂数据类型 时…

List<T>属性和方法使用

//author&#xff1a;shark_ddd using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//使用函数来减少长度namespace List_T {class Student{public string Name { get; set; }public int Age { get; set; …

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装&#xff0c;如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

视频去水印软件哪个好?这些软件值得一试

无论是社交媒体上的短视频&#xff0c;还是专业网站上的长视频&#xff0c;去除视频中的水印成为了许多人的需求。 选择一款合适的视频去水印软件&#xff0c;可以帮助我们轻松去除视频中的不必要标记&#xff0c;保持视频的完整性和美观。 那么&#xff0c;视频去水印软件哪…

qt QDoubleSpinBox详解

1、概述 QDoubleSpinBox是Qt框架中的一个控件&#xff0c;专门用于浮点数&#xff08;即小数&#xff09;的输入和调节。它提供了一个用户界面元素&#xff0c;允许用户在预设的范围内通过拖动滑块、点击箭头或使用键盘来递增或递减浮点数值。QDoubleSpinBox通常用于需要精确数…