GPIO的输入模式

1. GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)

1. 模拟输入

首先GPIO输出部分(N-MOS,P-MOS)是不起作用的。并且TTL施密特触发器也是不工作的。

上下拉电阻的开关都是关闭的。相当于I/o直接接在模拟输入。

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。模拟信号一般:3.3v 5v 9v。 

2. 浮空输入

首先GPIO输出部分(N-MOS,P-MOS)是不起作用的。上下拉电阻的开关都是关闭的。I/o直接的

值保存在输入数据寄存器里。

 

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。

通常用于IIC、USART。

3. 上拉输入

上拉电阻的开关闭合。所以一开始I/o就是高电平。

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(自己理解:上拉电阻连接电压);并且在I/O端口入为低电平的时候,输入端的电平也是低电平(自己理解:上拉电阻上的电压和端口导通)。

4.下拉输入

下拉电阻的开关闭合。所以一开始I/o就是低电平。

 下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。

5. 上下拉电阻的作用

6.施密特触发器的作用

施密特触发器:施密特就是为了防止在某一个临界电平的情况出现各种情况的抖动出现,为了稳定我们的输出而设计的。
施密特触发器采用电位触发方式,其状态由输入信号电位维持;对于负向递减和正向递增两种不同变化方向的输入信号,施密特触发器有不同的阈值电压。

 因为两个阈值的作用把稳定的值给到输入数据寄存器。

2. GPIO输入程序设计

要求:每按一次按键1来翻转LED1, 每按一次按键2来翻转LED2。

按键的硬件电路:

可以看到按键按下PA1,PA2为低电平。所以平时应该为高电平。按键的GPIO模式模式选择上拉输入。 

3.程序实现

KEY.h

#ifndef _KEY_H
#define _KEy_H#include "gd32f10x.h"
#include <stdio.h>#define KEY_A_PIN    GPIO_PIN_0
#define KEY_B_PIN    GPIO_PIN_1void KEY_Init(void);bool KEY_A_Pressed(void);
bool KEY_B_Pressed(void);#endif

KEY.c

#include "KEY.h"
#include "DELAY.h"void KEY_Init(void){rcu_periph_clock_enable(RCU_GPIOA);/* 按键设置为上拉输入模式 */gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, KEY_A_PIN|KEY_B_PIN);
}/*
功能:判断按键A是否被按下(加了软件消抖)
返回:如果按下返回TRUE;否则返回FALSE
*/
bool KEY_A_Pressed(void){if(gpio_input_bit_get(GPIOA, KEY_A_PIN)==RESET){delay_ms(15);		// 软件消抖if(gpio_input_bit_get(GPIOA, KEY_A_PIN)==RESET){while(gpio_input_bit_get(GPIOA, KEY_A_PIN)==RESET);return TRUE;}}return FALSE;
}/*
功能:判断按键B是否被按下(没加软件消抖)
返回:如果按下返回TRUE;否则返回FALSE
*/
bool KEY_B_Pressed(void){if(gpio_input_bit_get(GPIOA, KEY_B_PIN)==RESET){delay_ms(15);		// 软件消抖if (gpio_input_bit_get(GPIOA, KEY_B_PIN)==RESET) {while(gpio_input_bit_get(GPIOA, KEY_B_PIN)==RESET);return TRUE;}return TRUE;}return FALSE;
}

main.c

#include "LED.h"
#include "KEY.h"int main(){LED_Init();KEY_Init();while(1){/* 判断按键1是否按下 */if(KEY_A_Pressed()){LED1_Toggle();}/* 判断按键2是否按下 */if(KEY_B_Pressed()){LED2_Toggle();}}
}

4.GPIO的寄存器

具体寄存器每个bit的用法可以查芯片的数据手册。

 

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

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

相关文章

【每日一题】种花问题

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心 写在最后 Tag 【贪心】【数组】【2023-09-29】 题目来源 605. 种花问题 题目解读 种花要种在空地&#xff08;没有种过花的位置&#xff09;上&#xff0c;花不能种在相邻位置上否则会抢夺水资源无法正常生长&a…

问 ChatGPT 关于GPT的事情:压缩篇

一、我现在有一个175B的GPT模型&#xff0c;但我的计算机运行不起来&#xff0c;想给它压缩成6B的小型模型&#xff0c;应该采取哪些具体步骤&#xff1f; 要将一个175B的GPT模型压缩成6B的小型模型&#xff0c;可以采取以下具体步骤&#xff1a; 1.网络架构优化&#xff1a;…

ChatGPT,AIGC 助力人力资源管理对身份证号处理

HR&#xff0c;行政&#xff0c;文员办公对于员工信息管理中有一项目非常重要的操作&#xff0c;便是从身份证号中提取相关信息如下&#xff1a; 可以用ChatGPT完成三个字段的提取与计算。 我们先让ChatGPT描述一下身份证号每一位都代表什么意思。 接下来从身份证号中提取出生…

集合-ArrayList源码分析(面试)

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 目录 系列文章目录 前言 一 . 什么是ArrayList? 二 . ArrayList集合底层原理 总结 前言 大家好,今天给大家讲一下Arra…

MySQL了解视图View (视图篇 一)

视图View是什么&#xff1f; MySQL的视图是一种虚拟表&#xff0c;它是基于一个或多个表的查询结果构建而成的。视图并不实际存储数据&#xff0c;而是根据定义的查询逻辑动态生成结果。 ----------------------------------- 视图的特点&#xff1a; - 虚拟表&#xff1a;…

SpringMVC-Rest风格

一、简介 REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候&#xff0c;可以使用两种方式: 传统风格资源描述形式 http://localhost/user/getById?id1 查询id为1的用户信息…

华为centos7服务器中安装python3.10.13 脚本方式安装或手动安装

一条命令搞定在centos7.9服务器中的python3.10.13的安装 【2023年9月27日】 因为华为服务器中的centos7.9版本的自带python2.7 和python 3.6版本 需求&#xff1a;在服务器中安装python3.10.13版本【稳定版本】 并且安装最新版本的pip 注意&#xff1a; 1这里会使用到华为的镜…

高仿互站网多套模板完整源码

高仿互站网 后台手机端两套模板 电脑端二十套模版&#xff0c;简单介绍几个功能&#xff0c; 支持用户注册开店 开店申请&#xff0c;支持用户发布自己商品 支持卡密形式或实物形式&#xff0c; 支持用户自己发布求助 任务大厅功能&#xff0c;源码完整 更多功能自己去发现吧…

iTOP-RK3588开发板体验RKNN_DEMO

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…

ReactPortals传送门

ReactPortals传送门 React Portals提供了一种将子节点渲染到父组件以外的DOM节点的解决方案&#xff0c;即允许将JSX作为children渲染至DOM的不同部分&#xff0c;最常见用例是子组件需要从视觉上脱离父容器&#xff0c;例如对话框、浮动工具栏、提示信息等。 描述 <div&…

爬取北京新发地当天货物信息并展示十五天价格变化(三)---获取物品十五天内的价格

。。。。。。。。。。。。。。。。。。。。。。 1.网页请求一下内容2.通过爬虫进行请求3.获取商品十五天详细数据并绘制折线图4.项目详细代码 1.网页请求一下内容 通过抓包我们发现一共七个参数 limit: 20 # 一页多少数据 current: …

PHP基于原生GD库, 获取图片中文字颜色, 匹配稀有度

PHP基于原生GD库, 获取图片中文字颜色, 匹配稀有度 一&#xff0c;获取文字颜色部分 如果背景有渐变色就不是很准&#xff0c; 如果对颜色没有特殊要求&#xff0c;建议使用调整图片对比度 二&#xff0c; 匹配对应的稀有度数据 这块不是很重要根据自己情况调整 /*** 根据文字…

Python计算巴氏距离

Python计算巴氏距离 巴氏距离简介 在统计中&#xff0c;巴氏距离&#xff08;Bhattacharyya Distance&#xff09;测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作…

大麦订单截图生成 大麦一键生成订单截图

新版大麦订单生成 图样式展示 这个样式图就是在大麦生成完的一个订单截图&#xff0c;它的状态是等待卖家发货 后台一键生成&#xff0c;独立后台管理 教程&#xff1a;修改conf数据库账号密码 不会的可以看源码里有搭建教程 下载程序&#xff1a;https://pan.baidu.com/…

[论文笔记]MacBERT

引言 今天带来MacBERT的阅读笔记。论文题目是 重新审视中文自然语言处理的预训练模型。 本篇主要是探讨中文预训练语言模型在非英文语言中的有效性,然后提出了一种简单而有效的模型,称为MacBERT,它在多个方面改进了RoBERTa,特别是采用纠错型掩码语言模型(MLM as correcti…

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图&#xff0c;这些数据和功能可以直…

提取多个txt数据并合成excel——例子:与中国建交的国家

提取多个txt数据并合成excel——例子&#xff1a;与中国建交的国家 一、概要二、整体架构流程三、完整代码 一、概要 这段代码主要执行以下任务&#xff1a; 1. 定义辅助函数&#xff1a;首先&#xff0c;定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否…

如何在 Elasticsearch 中使用 Openai Embedding 进行语义搜索

随着强大的 GPT 模型的出现&#xff0c;文本的语义提取得到了改进。 在本文中&#xff0c;我们将使用嵌入向量在文档中进行搜索&#xff0c;而不是使用关键字进行老式搜索。 什么是嵌入 - embedding&#xff1f; 在深度学习术语中&#xff0c;嵌入是文本或图像等内容的数字表示…

vue2和vue3拖拽移动div

直接上代码&#xff0c;代码可以直接运行&#xff0c; vue2拖拽移动div&#xff1a; <template><divref"draggable"mousedown"dragStart"mousemove"drag"mouseup"dragEnd"style"width:100px;height:100px;background-c…

使用GDIView排查GDI对象泄漏导致的程序UI界面绘制异常问题

目录 1、问题说明 2、初步分析 3、查看任务管理器&#xff0c;并使用GDIView工具分析 4、GDIView可能对Win10兼容性不好&#xff0c;显示的GDI对象个数不太准确 5、采用历史版本比对法&#xff0c;确定初次出现问题的时间点&#xff0c;并查看前一天的代码修改记录 6、将…