GPIO和PIN

文章目錄

  • 1 GPIO和Pin
    • 1.1 GPIO和Pin基礎概念
    • 1.2 GPIO輸入模式
    • 1.3 GPIO輸出模式
    • 1.4 GPIO的HAL庫
      • 1.4.1 一些HAL庫表示
      • 1.4.2 HAL庫常用GPIO函數
      • 1.4.3 GPIO點亮led燈程序例子

1 GPIO和Pin

1.1 GPIO和Pin基礎概念

? 單片機有很多的引腳,為了操控每一個引腳,我們對引腳進行分組,例如GPIOA,GPIOB,…,GPIOG等等(Group),這一個組就稱為一個GPIO端口,一般一個端口包含十六個PIN引腳[0~15]。(一個引腳占2bits,而stm32是32位的,所以一組是16個)。GPIO引腳具有可復用和重映射的特點。

  • GPIO復用功能:即一個管腳可以有不同的功能,但是同一時間的同一管腳只能占有一個功能。
  • GPIO重映射功能:將復用引腳功能重定義到其他引腳,例如USART可能默認使用GPIOA2引腳,但是你可以重映射到GPIOD5使用。

GPIO硬件示意圖:

在這里插入圖片描述

1.2 GPIO輸入模式

輸入模式有四種,分別是浮空輸入,上拉輸入,下拉輸入,模擬輸入:

  1. 浮空輸入:不接入上拉電阻或者下拉電阻,直接由觸發器輸入,該模式內部電路呈現高阻態,該模式必須有明確的電平輸入。該模式利用施密特觸發器的滯回特性,可以用于進行波形整形,用于抗干擾。如果該引腳懸空,讀出的值不確定。同時也可以用來輸入微弱的信號。
    在這里插入圖片描述

  2. 上拉輸入:即用上拉電阻將輸入拉到高電平。 在這里插入圖片描述

  3. 下拉輸入:即用下拉電阻將輸入拉到低電平。 在這里插入圖片描述

  4. 模擬輸入:把電壓信號直接傳送到片上外設模塊,如ADC,他和浮空輸入的區別是它不經過TTL施密特觸發器,是直接將模擬信號傳輸到外設模塊上。 在這里插入圖片描述

1.3 GPIO輸出模式

  1. 推挽輸出:即兩個電平,0和1。推挽電路工作時,兩只對稱功率管輪流導通。所以導通損耗小,效率高。輸出既可向負載灌電流,也可向負載抽取電流,提高了電路的負載能力和開關速度。
  2. 開漏輸出:開漏輸出沒有高電平,他的兩個電平分別是0電平和(1)高阻態(輸出1高電平時,即是高阻態)。常常用于電平匹配或者形成“線與”邏輯關系。(電平匹配:例如單片機最高只能輸出5v電壓,但是輸出的外設需要15v電壓,這時候就需要使用開漏輸出來提高輸出電平)。
  3. 復用推挽輸出:I/O端口被用做復用功能,即第二功能時的I/O引腳配置,設置為推挽模式。USART,PWM就是典型的復用推挽輸出模式。
  4. 復用開漏輸出:I/O端口被用做復用功能,即第二功能時的I/O引腳配置,設置為開漏模式。I2C可以使用復用開漏輸出模式。

1.4 GPIO的HAL庫

1.4.1 一些HAL庫表示

//在HAL庫之中,端口的類型,和pin的類型分別是
GPIO_TypeDef				*group;			 //用GPIO_TypeDef的指針定義端口
uint16_t						pin;				//引腳用無符號整形uint16_t定義//未使用宏定義的時候,例如表示GPIOA Pin12引腳。使用:
GPIOA 和 GPIO_PIN_12  //表示//若在CubeMX中起了名字,即有宏定義,例如重命名為GreenLED,那么表示為:
GreenLED_GPIO_Port 和 GreenLED_Pin //表示//電平狀態用GPIO_PinState定義
GPIO_PinState 有兩個,分別是GPIO_PIN_RESET和GPIO_PIN_SET

1.4.2 HAL庫常用GPIO函數

//根據GPIO_InitTypeDef結構體的參數初始化GPIO端口
void HAL_GPIO_Init (GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init);
//將GPIO端口的功能恢復到初始狀態
void HAL_GPIO_DeInit (GPIO_TypeDef * GPIOx, uint32_t GPIO_Pin);//讀出GPIOx中輸入寄存器的值
GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);
//將數據寫入GPIOx中輸出寄存器
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
//翻轉某個引腳的電平狀態
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);//鎖定GPIOx寄存器,鎖定后將無法修改直到復位
HAL_StatusTypeDef HAL_GPIO_LockPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);

1.4.3 GPIO點亮led燈程序例子

在CubeMX中使能相應的LED燈的引腳。
之后我們開始寫程序

//led.h文件
#ifndef __LED_H__
#define __LED_H__#include "gpio.h"#define ON 1
#define OFF 0enum{red_led,blue_led,green_led,max_led,
};extern int turn_led(int which, int status);
extern int blink_led(int which, int interval, int num);
#endif
//led.c文件
#include "led.h"typedef struct gpio_s{GPIO_TypeDef				*group;uint16_t						pin;
}gpio_t;gpio_t leds[max_led]={{ RedLED_GPIO_Port, RedLED_Pin },{	BlueLED_GPIO_Port, BlueLED_Pin},{	GreenLED_GPIO_Port, GreenLED_Pin},
};int turn_led(int which, int status)
{if (which >= max_led){return -1;}GPIO_PinState				level;level = (status==OFF) ? GPIO_PIN_SET : GPIO_PIN_RESET;HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level);return 0;
}int blink_led(int which, int interval, int num)
{while(num--){turn_led (which, ON);HAL_Delay(interval);turn_led (which, OFF);HAL_Delay(interval);}return 0;
}

之后在main函數中引入led.h頭文件,之后調用led的函數就可以實現跑馬燈,改變燈的狀態等功能了。

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

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

相關文章

grpc學習golang版( 四、多服務示例 )

系列文章目錄 第一章 grpc基本概念與安裝 第二章 grpc入門示例 第三章 proto文件數據類型 第四章 多服務示例 第五章 多proto文件示例 第六章 服務器流式傳輸 第七章 客戶端流式傳輸 第八章 雙向流示例 文章目錄 一、前言二、定義proto文件三、編寫server服務端四、編寫Client客…

MySQL之可擴展性(九)

可擴展性 直接連接 2.修改應用的配置 還有一個分發負載的辦法是重新配置應用。例如,你可以配置多個機器來分擔生成大報表操作的負載。每臺機器可以配置成連接到不同的MySQL備庫,并為第N個用戶或網站生成報表。 這樣的系統很容易實現,但如果…

使用Python自動化收集和處理視頻資源的教程

在這篇教程中,我們將介紹如何利用Python腳本自動化收集和處理視頻資源。這篇文章將幫助您掌握基本的網絡自動化技術,并使用相關庫進行視頻資源的獲取和保存。以下是具體的實現步驟和代碼示例。 環境準備 在開始之前,請確保您的工作環境中已…

數據庫基礎教程

數據庫基礎教程 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!在本文中,我們將深入探討數據庫的基礎知識和操作,幫助您建立起扎實的數據…

Spring Boot集成jasypt快速入門Demo

1.什么是Jasypt? Jasypt(Java Simplified Encryption)是一個專注于簡化Java加密操作的工具。 它提供了一種簡單而強大的方式來處理數據的加密和解密,使開發者能夠輕松地保護應用程序中的敏感信息,如數據庫密碼、API密…

stl的map和set

概念 map和set底層都是紅黑樹 set是key模型結構,本質就是看一個元素在不在容器中。 map是key/value結構,里面存了一個pair結構,可以通過一個值來查找另外一個值 map和set結構中遍歷出來的都是有序并且去重了的,map和set都支持增…

Java高級重點知識點-17-異常

文章目錄 異常異常處理自定義異常 異常 指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。Java處 理異常的方式是中斷處理。 異常體系 異常的根類是 java.lang.Throwable,,其下有兩個子類:ja…

【QT】概述|對象樹模型|兩種控件模式|信號和槽|lambda

目錄 什么是QT 特點 QT程序 main函數 QT按鈕 純代碼模式 圖形化模式 對象樹模型 信號和槽 連接與斷開 自動連接 斷開連接 信號的發射 lambda表達式 基本語法 捕獲列表 Lambda表達式用于信號與槽的連接 例如 什么是QT Qt是一個跨平臺的C圖形用戶界面應用…

NeXT-Server 手動安裝

38 cd /home 使用 wget 下載你選擇的版本,https://go.dev/dl/ 找到適用于Linux的版本,你可以選擇 .tar.gz 格式的文件以用于Debian系統 39 wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz 40 tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz 42 echo ‘export PAT…

辦理河南公司企業信用等級3A證書流程和條件

企業信用等級3A證書屬于一種榮譽資質,是提升企業公信力和影響力保障的一項資質。信用等級是信用 (資信)評估機構根據企業資信評估結果對企業信用度劃分的等級類別,它反映了企業信用度的高低。AAA信用等級是一種等級劃分。代指企業的信用經過行業、機構評…

零成本搭建個人圖床服務器

前言 圖床服務器是一種用于存儲和管理圖片的服務器,可以給我們提供將圖片上傳后能外部訪問瀏覽的服務。這樣我們在寫文章時插入的說明圖片,就可以集中放到圖床里,既方便多平臺文章發布,又能統一管理和備份。 當然下面通過在 Git…

中藥材圖像識別:中醫與深度學習的融合(目標檢測)

親愛的讀者們,您是否在尋找某個特定的數據集,用于研究或項目實踐?歡迎您在評論區留言,或者通過公眾號私信告訴我,您想要的數據集的類型主題。小編會竭盡全力為您尋找,并在找到后第一時間與您分享。 一、引…

flink的窗口

目錄 窗口分類 1.按照驅動類型分類 1. 時間窗口(Time window) 2.計數窗口(Count window) 2.按照窗口分配數據的規則分類 窗口API分類 API調用 窗口分配器器: 窗口函數 增量聚合函數: 全窗口函數…

MySQL高級-MVCC-原理分析(RC級別)

文章目錄 1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView2、先來看第一次快照讀具體的讀取過程:3、再來看第二次快照讀具體的讀取過程: 1、RC隔離級別下,在事務中每一次執行快照讀時生成ReadView 我們就來分析事務5中,兩…

VBA代碼解決方案第十五講:如何對單元格區域進行高亮顯示

《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位于入門后的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼…

Java中集中常見的算法

以下是對選擇排序、冒泡排序和插入排序的理解及代碼實現 選擇排序: 理解:它通過不斷地從待排序元素中選擇最小(或最大)元素,并將其放置在已排序序列的一端。 代碼實現: public class SelectionSort {pu…

final、const、readonly關鍵字在不同語言中代表著什么

一、Java 1.被final修飾的類不能被繼承。 2.被final修飾的方法不能被重寫。 被 final 修飾的類中所有的成員方法都會隱式的定義為 final 方法。 若父類中 final 方法的訪問權限為 private ,則子類中不能直接繼承該方法。此時可以在子類中定義相同方法名的函數&…

【操作系統期末速成】EP06 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言🚀🚀🚀二、正文:??????2.1 考點十四:同步互斥的基本概念2.2 考點十五:實現臨界區互斥的基本方法2.3 考點十六:信號量的含義及常用信號量 一、前言🚀&#x1…

品牌推廣的三個階段與核心內容,一篇文章全掌握!

在競爭激烈的市場環境中,品牌推廣是企業成功的關鍵。精心策劃的推廣策略能夠幫助企業在消費者心中樹立獨特的品牌形象,進而促進銷售增長。 作為一家手工酸奶品牌的創始人,目前全國也復制了100多家門店,我理解的品牌推廣分為3個階…

操作系統概論(二)

一、單項選擇題(本大題共20小題,每小題1分,共20分) 在每小題列出的四個備選項中只有一個選項是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未選均無分。 1.操作員接口是操作系統為用戶提供的使用計算機系統的手…