今天介紹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()函數裡的。