STM32教程(五)HAL庫之GPIO函數及實例詳細介紹!

2021-01-10 電子攻城獅

今天介紹STM32 HAL庫的GPIO函數庫,首先打開stm32f4xx_hal_gpio.h文件,我們能看到一些結構體定義以及GPIO引腳的地址定義等等,

這些都很好理解,我們需要重點看HAL庫中GPIO的函數庫有哪些?以及這些函數庫有什麼作用以及怎麼使用這些函數?我們找到有以下8個函數

void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

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);

HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

下面我們逐一介紹這8個函數:

1、void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);

這個函數我們在stm32f4xx_hal_gpio.c文件中找到它的實體,可以很清楚的看到它的解釋(不過是英文,需要點英文基礎,不過有不認識的單詞可以自己使用工具去翻譯),這個函數主要用來初始化我們需要用到的引腳的工作模式,包括具體引腳的工作速度、是否復用模式、上下拉等等參數。

2、void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);

這個函數的主要功能是將我們在1函數初始化之後的引腳恢復成默認的狀態,即各個寄存器復位時的值。這個函數比較容易理解。

3、GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

這個函數主要功能是讀取我們想要知道的引腳的電平狀態、函數返回值為0或1。

4、void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

這個函數從字面意思來看就是給某個引腳寫0或1,但是不要理解成,寫1就是使能之類的意思,有些寄存器寫1是擦除的意思,這一點要謹記。

5、void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

這個函數用來翻轉某個引腳的電平狀態,我用的最多的場合是LED燈的翻轉,也就是LED閃爍,哈哈。

6、HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

這個函數看函數名稱就是鎖住的意思,比如說一個管腳的當前狀態是1,讀管腳值使用鎖定,當這個管腳電平變化時保持鎖定時的值。

7、void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);

這個函數是外部中斷服務函數,用來響應外部中斷的觸發,函數實體裡面有兩個功能,1是清除中斷標記位,2是調用下面8要介紹的回調函數。很好理解,我們學習51單片機的時候肯定用過中斷服務函數。

8、void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);

這個函數是中斷回調函數,可以理解為中斷函數具體要響應的動作。

以上就是關於STM32 HAL庫GPIO的函數的介紹。

基於之前的教程的模板,我只要在while(1)裡面添加一句代碼就可以實現點亮LED了。

我只需要調用HAL_GPIO_WritePin()函數,填好參數就可以了。

HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);

至此,關於STM32 HAL庫GPIO的介紹就先告一段落了,下期講STM32的啟動過程,即STM32是怎麼從上電一直運行到main()函數裡的。

相關焦點

  • STM32教程(七)HAL庫之STM32串口USART的使用教程!
    這次我們講一下STM32 HAL庫中串口的配置過程:打開Cube MX軟體,新建工程New Project,選擇自己的晶片型號,我這裡用的是STM32F407ZGT6,然後選擇Start Project在這個界面,無論我們建立什麼樣的項目,都可以先把以下幾個工作先做了:1、RCC選項:這一項是為後續配置系統時鐘做準備,MCU運行也必須配置時鐘
  • stm32f405 HAL庫串口接收錯誤
    HAL庫關鍵文件文件描述stm32f7xx_hal_ppp.c/h基本外設的操作APIstm32f7xx_hal_ppp_ex.c/h拓展外設特性的APIstm32f7xx_hal.c/hHAL通用API(如HAL_Init, HAL_Delay等)stm32f7xx_hal_conf.hHAL的配置文件,選擇使能某種功能stm32f7xx_hal_def.hHAL的通用數據類型和定義stm32f7xx_ll_ppp.c
  • STM32教程(三)STM32 HAL固件庫介紹及使用建議!
    1、 什麼是HAL固件庫?STM32 HAL固件庫是Hardware Abstraction Layer的縮寫,中文名稱是:硬體抽象層。HAL庫是ST公司為STM32的MCU最新推出的抽象層嵌入式軟體,為更方便的實現跨STM32產品的最大可移植性。
  • STM32的HAL與LL庫能共同使用(混用)嗎?
    一、標準外設庫停更了 很多學習STM32的朋友都比較依賴之前的標準外設庫(StdPeriph_Lib),我想告訴大家一個事實,那就是標準外設庫已經停更很久了。 支持標準外設庫的STM32,只有相對較老的系列:F0、 F1、 F2、 F3、 F4、 L1.
  • STM32F0單片機快速入門五: GPIO中斷
    Main()函數裡調用了一個外部中斷模塊(EXTI)初始化後就進入while循環了。我們在下面可以找到這個初始化函數的實現。它調用HAL庫函數對按鍵連接的引腳PC13做了初始化,把此引腳初始化為能觸發中斷的模式。
  • STM32的GPIO使用的函數剖析
    該文是自己學習了一段STM32後所寫,是對STM32使用固件庫編程最簡單的一段程序,是對固件庫函數的一部分進行解析。如有錯誤之處請指正,不勝感激。一、GPIO_Init函數解析1本文引用地址:http://www.eepw.com.cn/article/201611/317503.htm1、參數GPIO_TypeDef12、參數GPIO_InitStruct23、函數代碼詳解44、備註6一、GPIO_Init函數解析首先來看一下GPIO_Init函數的原型
  • stm32通過spi連接esp8266的hspi 開發
    剛剛做了stm32通過spi連接esp8266的開發,目前已經解決了遇到的大多數問題,基本可以交付使用了,寫一篇文章留作記錄,也可以給以後做這個的朋友做為參考。1,stm32 spi驅動開發我使用了stm32的標準庫,並沒用hal庫,因為之前stm32的大部分其它的程序用的都是標準庫開發的,所以沒有改為hal庫。對於spi協議,可以參考另外的文檔,我已經將其傳到了CSDN上可以到我的CSDN的資源頁中下載。如果下載不到可以email 聯繫我,abc_123_ok at 163.com。
  • 樹莓派用gpiozero庫控制LED燈
    準備硬體樹莓派一個,我的是3B+閃迪SD卡(class10),不小於8G樹莓派電源,電流2.5A以上,否則供電不足軟體給樹莓派刷好系統,這部分網上教程有非常多。如果你用的不是 noobs,那麼建議使用 Etcher這個鏡像燒錄軟體:安裝gpiozero庫gpiozero庫介紹和一些廢話zero是零的意思,也有初級入門的含義,所以gpiozero庫的宗旨就是為了降低使用樹莓派gpio的門檻,相比於其他操縱樹莓派引腳gpio的庫,gpiozero用戶體驗更加友好,更加直觀和簡單。
  • STM32—cubeMX+HAL庫的SPI接口使用
    摘要: 本文主要介紹STM32的SPI接口、cubeMX軟體配置SPI接口和分析SPI相關代碼。STM32之SPI簡介:(1)SPI協議【Serial Peripheral Interface】   串行外圍設備接口,是一種高速全雙工的通信總線。
  • STM32庫函數配置
    使用V3.0以上版本固件庫的方法如下:本文引用地址:http://www.eepw.com.cn/article/201612/325031.htm1.選擇device(配置函數STM32F10x.h,具體配置方法如下)在STM32F10x.h中有如下代碼:#if !
  • 嵌入式Linux設備驅動開發之:GPIO驅動程序實例
    在表11.15中,詳細描述了GPF的主要控制寄存器。GPB的相關寄存器的描述與此類似,具體可以參考S3C2410處理器數據手冊。在下一個小節中介紹的驅動程序中,s3c2410_gpio_cfgpin()函數和s3c2410_gpio_pullup()函數將進行對某個埠的配置,而s3c2410_gpio_setpin()函數實現向數據寄存器的某個埠的輸出。
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    https://www.st.com/en/embedded-software/stm32snippets.html (公號不支持外連結,請複製連結到瀏覽器打開) 相信學習過STM32的朋友,對標準外設庫都不陌生,是一組外圍設備的C語言代碼集合。
  • STM32四種庫對比:寄存器、標準外設庫、HAL、LL
    1.我是選擇寄存器開發STM32,還是標準外設庫呢?2.你有STM32L0標準外設庫嗎?3.HAL庫和LL庫有什麼差異?。。。地址:https://www.st.com/en/embedded-software/stm32snippets.html(公號不支持外連結,請複製連結到瀏覽器打開)
  • stm32庫函數學習篇通用定時器輸入捕獲功能
    本文引用地址:http://www.eepw.com.cn/article/201611/318488.htm先有必要了解stm32定時器的輸入觸發模塊,如下圖:比如TIM_ITConfig()函數中如下:void TIM_ITConfig(TIM_TypeDef *TIMx,uint16_tTIM_IT,FunctionalStateNewState)
  • 跟著小白學STM32,用寄存器OR用庫函數?
    可能每一個小白開始學STM32的時候都會問,究竟是選擇用寄存器編程呢還是選擇用庫函數?,又或者是迷之自信?你得找各方教程,我就是這樣開始自己的STM32之旅的目前較為系統介紹操作寄存器的教程是正點原子的那本書,有興趣的可以去查一下,說實話一開始我並不知道它,我在書城找到了另一本介紹STM32的書,可以說我的入門知識多半都是來源於它,我也相當喜歡這本書,可能是比較契合我這種剛從51轉過來的初學者,我現在每次從頭來過的時候都會從這本書翻起。
  • 小用stm32f4-CAN控制器(使用庫函數)
    nr");  while(1);}下面是CAN_Config函數首先需要配置使用的GPIO的復用功能,然後配置CAN控制器的收發模式以及過濾器,並打開接收中斷。配置過程可以參照STM32F4的函數庫文件stm32f4xx_can.c中前面注釋中的介紹「How to use this 。。。」
  • excel if函數的詳細教程(基本用法和嵌套用法)
    本篇將介紹excel if函數的詳細教程,有興趣的朋友可以了解一下!excel是我們工作中很常用的表格製作工具,它不僅僅只是用來製作表格,還能幫助我們處理數據(比如:運算、篩選、排序等等)。今天小編要介紹的是excel if函數的詳細用法,希望對大家有所幫助!