【STM32】GPIO輸入(按鍵)

目錄

    • 一、如何分辨GPIO輸入使用什么電頻
    • 二、輸入抖動問題如何消抖
    • 三、示例代碼

一、如何分辨GPIO輸入使用什么電頻

先看原理圖
在這里插入圖片描述
即可知道他的初始輸入狀態需要高電平
在這里插入圖片描述
判斷可知使用上拉輸入

二、輸入抖動問題如何消抖

  • 電路圖中, 按鍵輸入有額外的電容電阻, 是為了消抖

在這里插入圖片描述

  • 消抖方案:

    • 硬件消抖1, RC電路

    • 硬件消抖2, 施密特觸發器
      在這里插入圖片描述

    • 軟件消抖: 延時法, 狀態法, 統計法

一般軟硬件配合

三、示例代碼

.h

#ifndef _DRV_BTN_H_
#define _DRC_BTN_H_#include "stm32f10x.h"
#include "drv_systick.h"#define BTN_K1_Port GPIOA
#define BTN_K2_Port GPIOC
#define BTN_K1_Pin GPIO_Pin_0
#define BTN_K2_Pin GPIO_Pin_13/*** @brief 初始化* */
void BTN_Init(void);/*** @brief 按下后談起* * @param keyport * @param keypin * @return ErrorStatus */
ErrorStatus BTN_IsClicked(GPIO_TypeDef *keyport,uint16_t keypin);/*** @brief 是否按下* * @param keyport * @param keypin * @return ErrorStatus */
ErrorStatus BTN_IsPressed(GPIO_TypeDef *keyport,uint16_t keypin);/*** @brief 是否放開* * @param keyport * @param keypin * @return ErrorStatus */
ErrorStatus BTN_IsReleased(GPIO_TypeDef *keyport,uint16_t keypin);#endif

.c

#include "drv_btn.h"void BTN_Init(void)
{//RCC時鐘配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitTypeDef BTN_InitStruct;BTN_InitStruct.GPIO_Mode = GPIO_Mode_IPU;BTN_InitStruct.GPIO_Pin = BTN_K1_Pin;GPIO_Init(BTN_K1_Port, &BTN_InitStruct);// 配置K2BTN_InitStruct.GPIO_Pin = BTN_K2_Pin;GPIO_Init(BTN_K2_Port, &BTN_InitStruct);}ErrorStatus BTN_IsClicked(GPIO_TypeDef *keyport,uint16_t keypin)
{uint8_t ret;// 先判斷是否按下, 注意按下是高電平ret = GPIO_ReadInputDataBit(keyport, keypin);if (!ret)return ERROR;// 如果當前是按下, 開始等待10msMYSTK_DelayMs(10);// 再次判斷ret = GPIO_ReadInputDataBit(keyport, keypin);if (!ret)return ERROR;// 如果仍然是按下, 再等待彈起while (0 != GPIO_ReadInputDataBit(keyport, keypin)){}return SUCCESS;
}ErrorStatus BTN_IsPressed(GPIO_TypeDef *keyport, uint16_t keypin)
{uint8_t ret;ret = GPIO_ReadInputDataBit(keyport, keypin);if (!ret)return ERROR;return SUCCESS;
}ErrorStatus BTN_IsReleased(GPIO_TypeDef *keyport, uint16_t keypin)
{uint8_t ret;ret = GPIO_ReadInputDataBit(keyport, keypin);if (ret)return ERROR;return SUCCESS;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75248.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Android Studio】配置教程以及解決過程中的問題(詳細版本)

目錄 前言 一、下載安裝 二、配置 三、簡單使用 新建項目 創建默認項目 四、解決過程中的問題 前言 如果你目前不是第一次安裝,那需要完全卸載它。 因為一般電腦卸載 Android Studio 時容易落下一堆配置文件沒刪,卸載不干凈導致無用文件占用空間…

EtherNet/IP轉ProfiNet協議轉換網關驅動西門子PLC與流量計的毫秒級壓力同步控制

一、案例背景 汽車涂裝線的靜電噴涂工藝對壓縮空氣流量穩定性要求極高。原系統中Alicat流量計與西門子PLC因協議差異無法聯動,導致涂料浪費率高達8%。通過JM-EIPM-PN網關實現供氣系統與PLC的深度集成。從而實現了EtherNet/IP轉ProfiNet的通訊。 二、設備連接與配置…

如何從0-1的建設云上穩定性?

一、系統架構 整個系統包含了私有云和公有云兩個節點。前端和服務端存在私有云和公有云兩套系統交互,公有云上的系統為三方黑盒系統。 帶著上面的五點風險和挑戰,我們從前后端的視角整體制定優化策略和方案。 二、前端策略 作為釘釘的合作產品&#xff…

【學Rust寫CAD】17 通用2D仿射變換矩陣結構體(matrix/generic.rs)

源代碼 // matrix.rs use std::ops::{Add, Mul};use std::ops::{Add, Mul};/// 通用2D仿射變換矩陣&#xff08;元素僅需Copy&#xff09; #[derive(Clone, Copy, Debug, PartialEq)] pub struct Matrix<X, Y, Xx, Xy, Yx, Yy> {pub x: X, pub y: Y,pub xx: Xx, pub xy:…

Spring Boot @RequestParam 解析參數時的常見問題及解決方案

1&#xff0c;遇到的問題&#xff1a;將后端接口寫完后我想通過PostMan進行簡單的測試一下&#xff0c;一不小心就遇到了這樣的情況&#xff1a; org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter contractId is not prese…

Golang中間件的原理與實現

一. 什么是 Middleware&#xff1f; 中間件&#xff08;Middleware&#xff09; 是一種 高階函數&#xff0c;它接受一個函數作為輸入&#xff0c;并返回一個經過增強的函數。它的核心思想是通過函數的遞歸嵌套&#xff0c;動態地為函數添加功能。在 Golang 中&#xff0c;中間…

算法設計學習3

實驗目的及要求&#xff1a; 1.加強對結構體的應用。 2.熟悉字符計數排序。 實驗設備環境&#xff1a; 1.微型計算機 2.DEV C(或其他編譯軟件) 實驗步驟&#xff1a; 任務&#xff1a;要求使用自定義函數來實現 輸入一段文本&#xff0c;統計每個字符出現的次數&#xff0c;按…

Vue2和3的vue-router:生命周期、懶加載

Vue2 vue-router 在 Vue 2 中使用 vue-router 可以方便地管理單頁面應用&#xff08;SPA&#xff09;中的路由。理解 vue-router 的生命周期和懶加載機制對于構建高效的 Vue 應用至關重要。以下是一些關鍵點和示例代碼來幫助你理解這些概念。 Vue Router 的生命周期 vue-rou…

【408--考研復習筆記】計算機網絡----知識點速覽

目錄 一、計算機網絡體系結構 1.計算機網絡的定義與功能&#xff1a; 2.網絡體系結構相關概念&#xff1a; 3.OSI 七層模型與 TCP/IP 模型&#xff1a; 4.通信方式與交換技術&#xff1a; 電路交換 報文交換 分組交換 5.端到端通信和點到點通信&#xff1a; 6.計算機…

MySQL-- 多表查詢的分類,SQL92與SQL99,7種JOIN的實現,SQL99語法的新特性

目錄 一&#xff0c;多表查詢的分類 角度1&#xff1a;等值連接 vs 非等值連接 角度2&#xff1a;自連接 vs 非自連接 角度3&#xff1a;內連接 vs 外連接 二&#xff0c;SQL92語法實現內連接&#xff1a;見上&#xff0c;略SQL92語法實現外連接&#xff1a;使用 -…

時間輪算法:原理、演進與應用實踐指南

目錄 1. 時間輪算法基礎 1.1 什么是時間輪算法&#xff1f; 1.2 核心組成部分 2. 基本時間輪的實現機制 2.1 時間輪的構成要素 2.2 工作原理詳解 3. 基本時間輪的局限性 3.1 時間范圍限制問題 3.2 簡單解決方案及其缺陷 4. 時間輪算法的演進 4.1 Round機制&#xff…

Unity 常見報錯 定位和查找方法

1.控制臺 直接看報錯信息 2.打log 例子&#xff1a; for(int i 0;i < 8;i) {Debug.Log(i);//這是打的log,看看到底i是幾的時候出問題gameObject.name strs[i];} 3.斷點調試 &#xff08;1&#xff09;在你想打斷點的行&#xff0c;左邊空白處點擊可以打斷點&#xff…

第十八章:Python實戰專題:北京市水資源數據可視化與圖書館書籍管理應用開發

今天我要和大家分享兩個非常有趣的Python實戰項目&#xff1a;一個是北京市2001-2017年水資源數據的可視化分析&#xff0c;另一個是圖書館書籍管理應用程序的開發。這兩個項目都使用了Python的主流庫&#xff0c;比如Pandas、Matplotlib和Tkinter&#xff0c;非常適合初學者學…

音視頻基礎(音視頻的錄制和播放原理)

文章目錄 一、錄制原理**1. 音視頻數據解析****2. 音頻處理流程****3. 視頻處理流程****4. 同步控制****5. 關鍵技術點****總結** 二、播放原理**1. 音視頻數據解析****2. 音頻處理流程****3. 視頻處理流程****4. 同步控制****5. 關鍵技術點****總結** 一、錄制原理 這張圖展示…

Nginx多域名HTTPS配置全攻略:從證書生成到客戶端安裝

一、業務背景 在現代Web開發中&#xff0c;HTTPS已成為保障數據傳輸安全的標準協議。特別是對于地圖類API服務&#xff08;如高德地圖&#xff09;&#xff0c;往往需要同時支持多個子域名&#xff08;如webapi.amap.com、restapi.amap.com等&#xff09;的HTTPS訪問。傳統方式…

Redis原理:rename命令

RENAME key newkey 將一個key重命名為新key&#xff0c;如果key不存在&#xff0c;則會返回異常。如果newKey已經存在&#xff0c;則會被覆蓋&#xff0c;其實newKey會被顯示的刪除&#xff0c;所以如果newKey是一個大key&#xff0c;則會引起延遲。 源碼 void renameCommand…

k8s污點與容忍

k8s污點與容忍 k8s污點管理常用命令effect標記值查看污點添加污點刪除污點 node污點與容忍污點容忍yaml示例容忍放大基于污點的驅逐驅逐時排除指定服務 設置master調度設置master盡量不調度允許master節點調度pod恢復Master Only狀態將node標記為不可調度狀態(節點警戒)設置nod…

(BFS)題解:P9425 [藍橋杯 2023 國 B] AB 路線

題解&#xff1a;P9425 [藍橋杯 2023 國 B] AB 路線 題目傳送門 P9425 [藍橋杯 2023 國 B] AB 路線 一、題目描述 給定一個NM的迷宮&#xff0c;每個格子標記為A或B。從左上角(1,1)出發&#xff0c;需要移動到右下角(N,M)。移動規則是&#xff1a;必須交替走K個A格子和K個B…

python-leetcode 62.搜索插入位置

題目&#xff1a; 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置 方法一&#xff1a;二分查找 假設題意是在排序數組中尋找是否存在一個目標值&#xff0c;則可以…

【計網速通】計算機網絡核心知識點和高頻考點——數據鏈路層(一)

數據鏈路層核心知識點&#xff08;一&#xff09; 一、數據鏈路層概述 1.1 基本概念 數據鏈路層位于OSI模型的第二層&#xff0c;介于物理層和網絡層之間&#xff0c;主要負責在相鄰節點之間傳輸和識別數據幀。 1.2 主要功能 幀同步&#xff1a;識別幀的開始和結束差錯控制…