一、GPIO口配置
1、GPIO的主要配置有輸入和輸出
① 作為普通GPIO輸入:
根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時不要使能該引腳對應的所有復用功能模塊。
② 作為普通GPIO輸出:
根據需要配置該引腳為推挽輸出或開漏輸出,同時不要使能該引腳對應的所有復用功能模塊。
③ 作為普通模擬輸入:
配置該引腳為模擬輸入模式,同時不要使能該引腳對應的所有復用功能模塊。
④ 作為內置外設的輸入:
根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時使能該引腳對應的某個復用功能模塊。
⑤ 作為內置外設的輸出:
根據需要配置該引腳為復用推挽輸出或復用開漏輸出,同時使能該引腳對應的所有復用功能模塊。
以流水彩燈為例子對GPIO進行初始化
使用STM32CubeMX會自動生成初始化代碼
GPIO寄存器詳解
參見《STM32F10X數據手冊》
GPIO基本設置
#define GPIO_MODE_INPUT ((uint32_t)0x00000000) /*!< GPIO輸入模式 */
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001) /*!< GPIO推挽輸出 */
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011) /*!< GPIO開漏輸出 */
#define GPIO_MODE_AF_PP ((uint32_t)0x00000002) /*!< GPIO推挽復用 */
#define GPIO_MODE_AF_OD ((uint32_t)0x00000012) /*!< GPIO開漏復用 */
#define GPIO_MODE_AF_INPUT GPIO_MODE_INPUT /*!< */
#define GPIO_MODE_ANALOG ((uint32_t)0x00000003) /*!< 模擬輸入 */
GPIO輸入輸出速度選擇:
#define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /*!< Low speed */
#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */
#define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /*!< High speed */
GPIO輸入輸出狀態選擇:
typedef enum
{
GPIO_PIN_RESET = 0, //低電平
GPIO_PIN_SET //高電平
}GPIO_PinState;
GPIO初始化:
typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;
uint32_t Speed;
}GPIO_InitTypeDef;
三、主要庫函數有:
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);