STM32F4 HAL库开发 -- GPIO
這種外設都之前都講過了,專欄:stm32庫開發實戰指南。
但是使用STM32CubeMX該配置配置呢??接下來看一下。
一、GPIO簡介
STM32F4 的 IO 可以由軟件配置成如下 8 種模式中的任何一種:
1、 輸入浮空
2、 輸入上拉
3、 輸入下拉
4、 模擬輸入
5、 開漏輸出
6、 推挽輸出
7、 推挽式復用功能
8、 開漏式復用功能
詳細參看:STM32開發 – GPIO詳解
二、 相關函數
1、HAL_GPIO_Init 函數
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)第一個參數:用來指定需要初始化的GPIO對應的GPIO組,取值范圍是GPIOA ~ GPIOK。
第二個參數:為初始化參數結構體指針,結構體類型為 GPIO_InitTypeDef 。
初始化 GPIO 的常用格式是:
GPIO_InitTypeDef GPIO_Initure; GPIO_Initure.Pin=GPIO_PIN_0; //PB0 GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 HAL_GPIO_Init(GPIOB,&GPIO_Initure);上面代碼的意思是設置 PB0 端口為推挽輸出模式, 輸出速度為高速,上拉。
2、HAL_GPIO_TogglePin函數
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);該函數是通過操作 ODR 寄存器,達到取反 IO 口輸出電平的功能。
3、HAL_GPIO_WritePin 函數
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);該函數用來設置一組IO口中的一個或者多個IO口的電平狀態。
示例:
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); //PB5 輸出高
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, GPIO_PIN_RESET); //PB5 輸出低
4、HAL_GPIO_ReadPin 函數
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 返回值:IO口電平狀態該函數用來讀取一組IO下一個或者多個IO口電平狀態。
示例:
HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_5);//讀取 PF5 的輸入電平
三、STM32CubeMX 配置 IO 口輸入
1、配置
打開STM32CubeMX工具,在引腳圖中選擇要配置的IO口。
這里我們選擇PF12。
進入 Configuration->GPIO,在彈出的界面配置 IO 口的詳細參數。
下面我們來依次解釋這些配置項的含義:
1)GPIO output level:
用來設置IO口初始化電平狀態為High(高電平)還是Low(低電平)。
2)GPIO mode:
用來設置輸出模式為 Output Push Pull(推挽)還是Output Open Drain(開漏)。
3)GPIO Pull-up/Pull-down:
用來設置IO口是上拉/下拉/沒有上下拉。
4)Maximum output speed:
用來設置輸出速度為高速(High)/快速(Fast)/中速(Medium)/低速(Low)。
5)User Lable:
用來設置初始化的IO口Pin值為我們自定義的宏。
2、生成源碼
void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOF_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOF, ELECTRONIC_LOCK_LOCK_Pin|ELECTRONIC_LOCK_UNLOCK_Pin, GPIO_PIN_RESET);/*Configure GPIO pins : PFPin PFPin */GPIO_InitStruct.Pin = ELECTRONIC_LOCK_LOCK_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOF, &GPIO_InitStruct); }總結
以上是生活随笔為你收集整理的STM32F4 HAL库开发 -- GPIO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021餐饮外卖商户研究报告
- 下一篇: STM32F4 HAL库开发 -- 串口