使用STM32 HAL庫進行GPIO控制的實例

??作者簡介:熱愛科研的嵌入式開發者,修心和技術同步精進,

代碼獲取、問題探討及文章轉載可私信。

???愿你的生命中有夠多的云翳,來造就一個美麗的黃昏。

🍎獲取更多嵌入式資料可點擊鏈接進群領取,謝謝支持!👇

點擊領取更多詳細資料

1. 介紹

在基于STM32微控制器的嵌入式系統開發中,GPIO(General Purpose Input/Output)控制是其中最基本、最常見的操作之一。通過使用STM32的HAL庫,可以輕松地對GPIO進行配置和控制。本文將演示如何使用STM32 HAL庫進行GPIO控制,并提供一個簡單的LED控制的實例。

2. 初始化GPIO

2.1 選擇合適的引腳

在進行GPIO控制前,首先需要選擇合適的引腳來連接外部設備,例如LED或按鈕。以STM32F4系列微控制器為例,以下是選擇引腳的方式:

```c
// 選擇要使用的GPIO引腳
#define LED_PIN GPIO_PIN_13
#define LED_GPIO_PORT GPIOC
```

2.2 GPIO初始化配置

在使用HAL庫進行GPIO控制前,需要對GPIO進行初始化配置。以下是一個典型的GPIO初始化的代碼片段:

```c
GPIO_InitTypeDef GPIO_InitStruct = {0};// GPIO時鐘使能
__HAL_RCC_GPIOC_CLK_ENABLE();// GPIO配置
GPIO_InitStruct.Pin = LED_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);// 初始化GPIO引腳
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET); // 初始化為低電平
```

以上代碼片段中,首先使能了GPIOC的時鐘,然后配置了引腳13(對應PC13)為推挽輸出模式,并初始化為低電平。

3. 控制GPIO

3.1 控制GPIO輸出電平

通過HAL庫,可以很方便地控制GPIO的輸出電平。以下是一個控制LED輸出高低電平的例子:

```c
// 控制LED輸出高電平
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_SET);// 延時一定時間
HAL_Delay(1000);// 控制LED輸出低電平
HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN, GPIO_PIN_RESET);
```

以上代碼通過`HAL_GPIO_WritePin`函數實現了對LED引腳的輸出電平控制,從而實現LED的閃爍效果。

3.2 控制GPIO輸入狀態

可以通過HAL庫獲取GPIO引腳的輸入狀態。以下是一個讀取按鈕狀態的例子:

```c
// 讀取按鈕狀態
if (HAL_GPIO_ReadPin(Button_GPIO_PORT, Button_PIN) == GPIO_PIN_SET) {// 按鈕被按下
} else {// 按鈕未被按下
}
```

4. 中斷控制

通過HAL庫可以方便地配置GPIO中斷,并實現相應的中斷處理函數。以下是一個簡單的中斷配置的例子:

4.1 初始化中斷

```c
GPIO_InitTypeDef GPIO_InitStruct = {0};// GPIO時鐘使能
__HAL_RCC_GPIOA_CLK_ENABLE();// GPIO配置
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 中斷使能
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
```

4.2 中斷處理函數

```c
void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{// 處理GPIO中斷
}
```

5. 總結

通過本文的介紹,您應當對如何使用STM32 HAL庫進行GPIO控制有了初步的了解。合理配置并控制GPIO,可以實現對外部設備(如LED、按鈕等)進行有效的控制和交互,為嵌入式系統的開發提供了基礎支持。

嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊這里,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦。?

? 點擊鏈接掃碼進入嵌入式交流群 ?https://fss.mpay8.cn/article/dmrjinh2C6fjejm

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

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

相關文章

獨立服務器的主要應用方向有什么_Maizyun

獨立服務器的主要應用方向有什么? 獨立服務器是指托管單一應用程序或網站的單臺服務器。隨著互聯網的發展,獨立服務器已經成為許多企業和個人用戶的重要選擇,因為它提供了更高的靈活性和控制權。本文將探討獨立服務器的主要應用方向。 一、…

利用R語言heatmap.2函數進行聚類并畫熱圖

數據聚類然后展示聚類熱圖是生物信息中組學數據分析的常用方法,在R語言中有很多函數可以實現,譬如heatmap,kmeans等,除此外還有一個用得比較多的就是heatmap.2。最近在網上看到一個筆記文章關于《一步一步學heatmap.2函數》,在此與…

計算機存儲結構分析(寄存器,內存,緩存,硬盤)

https://blog.csdn.net/bemodesty/article/details/81476906 前言 一個計算機包含多種存儲器比如:寄存器、高速緩存、內存、硬盤、光盤等,為啥有這么多種存儲方式,對于不太了解的人,總是覺得云里霧里的,搞不明白原因…

java-兩個列表進行比較,判斷那些是需要新增的、刪除的、和更新的

文章目錄 前言兩個列表進行比較,判斷那些是需要新增的、刪除的、和更新的 前言 如果您覺得有用的話,記得給博主點個贊,評論,收藏一鍵三連啊,寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差,實…

SpringIOC之@Configuration

博主介紹:?全網粉絲5W,全棧開發工程師,從事多年軟件開發,在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰,博主也曾寫過優秀論文,查重率極低,在這方面有豐富的經驗…

Django的logging-日志模塊的簡單使用方法

擴展閱讀: Python-Django的“日志功能-日志模塊(logging模塊)-日志輸出”的功能詳解 現在有下面的Python代碼: # -*- coding: utf-8 -*-def log_out_test(content_out):print(content_out)content1 "i love you01" log_out_test(content1)現…

云服務器Centos中安裝Docker

云服務器Centos中安裝Docker 1 簡介DockerCentosCentos和Ubuntu區別 2 安裝3 測試hello-world的鏡像測試 1 簡介 Docker Docker是一個開源的應用容器引擎,利用操作系統本身已有的機制和特性,可以實現遠超傳統虛擬機的輕量級虛擬化。它支持將軟件編譯成…

Hive 淺析

Hive是一個簡單的LUA沙盒,除了基本的LUA解釋器的功能以外,還提供了諸如熱加載等功能。 了解HIVE的工作原理有利于了解Lua虛擬機的底層實現機理。 本文從是什么-怎么用-為什么三個維度介紹HIVE。 Hive Hive是什么 hive是一個簡單的LUA應用框架,目前基于…

Mybatis Plus詳解【一】

一、簡介 MybatisPlus可以節省大量時間,所有的CRUD代碼都可以自動化完成。MyBatis-Plus是一個MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 特性: 無侵入:只做增強不做改變&…

Windows 12 和 AI 計算機

據商業時報消息 ,微軟計劃于 2024 年 6 月發布Windows 12。 新版本的操作系統將伴隨集成人工智能。 該數據基于廣達首席執行官林百里和宏基陳杰森在中國臺北醫療科技展上的發言。 雖然這篇文章沒有直接引用微軟高管的話,但它是根據他們的評論得出的結…

IDEA 社區版 add GitLab Account

問題 IntelliJ IDEA Community Edition 2023.3(社區版)在使用GitLab連接時,使用個人訪問令牌出現報錯,代碼: GraphQL error:[No such type ProjectMember,so it cant be a fraggment condition,Field id doesnt exis…

2023年最新prometheus + grafana搭建和使用

一、安裝prometheus 1.1 安裝 prometheus官網下載地址 sudo -i mkdir -p /opt/prometheus #移動解壓后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #創建一個專門的prometheus用戶: -M 不創建家目錄, -s 不讓登錄 useradd…

Navicat 技術指引 | 適用于 GaussDB 分布式的數據遷移工具

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結…

單例模式---餓漢式、懶漢式

一、什么是單例模式 單例模式,指的是一個類中的對象只能有一個,它在內存中只會創建一次對象的設計模式。 二、餓漢式 public class SingleTon {// 私有的構造方法private SingleTon() {};// 1. 餓漢式private static SingleTon instance new SingleTon…

整數以及浮點數在內存中的存儲

一.整數在內存當中的存儲 數據在內存中是以十六進制補碼的形式進行存儲的。 原碼表示法簡單易懂,適用于乘法,但用原碼表示的數進行加減運算比較復雜,當兩數相加時,如果同號則數值相加,但是進行減法時要先比較絕對值的…

認知覺醒(六)

認知覺醒(六) 第二節 感性:頂級的成長竟然是“憑感覺” 人類生存于世,比拼的是腦力思維,但極少有人知道,我們的身體里還有一個更高級的系統,若能善用,成就非凡。 1941年,德軍對英國本土進行…

Neo4j介紹

1、Neo4j介紹 Neo4j 是一個圖數據庫管理系統,它專注于存儲和處理圖形結構的數據。圖數據庫是一類特殊的數據庫,用于有效地管理圖形數據模型,其中數據以節點、關系和屬性的形式存儲。 2、Neo4j特點 圖數據庫: Neo4j 是一種 NoSQ…

目標檢測器技術演進簡史

引言 目標檢測算法的發展已經取得了長足的進步,從早期的計算機視覺方法開始,通過深度學習達到了很高的準確度。在這篇博文中,我們將一起回顧一下這些算法的發展階段以及現代目標檢測系統中使用的主要方法。 我們首先回顧早期傳統的目標檢測…

大數據技術3:數據倉庫的ETL和分層模型

前言:我們先了解一下數據倉庫架構的演變過程。 1 、數據倉庫定義 數據倉庫是一個面向主題的(Subject Oriented)、集成的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time…

電商系統架構演進

聊聊電商系統架構演進 具體以電子商務網站為例, 展示web應用的架構演變過程。 1.0時代 這個時候是一個web項目里包含了所有的模塊,一個數據庫里包含了所需要的所有表,這時候網站訪問量增加時,首先遇到瓶頸的是應用服務器連接數&a…