cubemx配置stm32(三)__GPIO的輸入輸出
1.建立工程并進行核心配置
根據文章2.使用cubemx配置stm32(二)__核心配置 進行如下配置:
CubeMX新建工程
CubeMX圖形配置除錯時鐘信號
CubeMX圖形配置時鐘樹
CubeMX圖形配置除錯介面
檢查配置:

配置詳解
1.配置選擇輸入輸出

比如LED就要配置輸出,按鍵就要配置輸入
2.配置為輸出時配置詳解(此時我把此芯片PB1配置為輸出,其他芯片其他引腳都可以,需要參考手中開發板的原理圖)

(1).GPIO output level (引腳初始電平設定 )
- High 輸出初始化為高電平
- Low 輸出初始化為低電平
(2).GPIO mode ( GPIO 輸出模式) - Output Push pull 推挽輸出 強高低電平,可以為IO設備供電
- Output Open Drain 開漏輸出模式 為強低電平,只有低電平可以為IO設備供電,但是高電平時只可以作為一個信號輸出
(3).GPIO Pull-up/Pull-dowm (上拉下拉電阻)
- No pull-up and no pull-down無上拉或下拉
- pull-up 內部上拉電阻
- Pull-dowm 內部下拉電阻
(4).Maxinum output speed(引腳速度設定)
- Low 低速
- Medium 中速
- High 高速
- Very High 高速
(5).User Label(用戶標簽)
- 給引腳設定名稱 如LED0
2.配置為輸入時配置詳解(此時我把此芯片PH3配置為輸入,其他芯片其他引腳都可以,需要參考手中開發板的原理圖)

(1).GPIO mode ( GPIO 輸入模式)
- Input mode 輸入模式
(2).GPIO Pull-up/Pull-dowm (上拉下拉電阻)
- No pull-up and no pull-down無上拉或下拉
- pull-up 內部上拉電阻
- Pull-dowm 內部下拉電阻
如下圖,KEY0,KEY1一端接地,若按鍵按下就為低電平,我們應讓按鍵沒有按下時按鍵為高電平,所以要內部上拉,上拉后在不按鍵時信號為高電平
同理KEY_UP一端接VCC,若按鍵按下就為高電平,我們應讓按鍵沒有按下時按鍵為低電平,所以要內部下拉,下拉后在不按鍵時信號為低電平

(3).User Label(用戶標簽)
- 給引腳設定名稱 如KEY0
2.示例:配置PB1 PB0 PH3,并生成代碼



選擇好要生成那個軟體的工程后,點擊右上角"GENERATE CODE"
相關小工程代碼示例看如下文章
3.關鍵代碼講解與應用
1.生成初始化函式代碼(手動添加了注釋)
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOC時鐘,外部時鐘輸入使用PC14 PC15
__HAL_RCC_GPIOH_CLK_ENABLE(); //使能GPIOH時鐘,因為按鍵使用PH3 外部時鐘輸入使用PH0 PH1
__HAL_RCC_GPIOB_CLK_ENABLE(); //使能GPIOB時鐘,因為LED使用PB0 PB1
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA時鐘,因為除錯下載介面使用的PA13 PA14
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, LED1_Pin|LED0_Pin, GPIO_PIN_SET);//LED1,LED0配置相同,可以同時配置
//配置為初始電平高電平
/*Configure GPIO pin : KEY0_Pin */ //對按鍵進行GPIO初始化配置
GPIO_InitStruct.Pin = KEY0_Pin;//main.h中有#define KEY0_Pin GPIO_PIN_3 對應PH3的3
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//模式為輸入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;//內部電阻上拉
HAL_GPIO_Init(KEY0_GPIO_Port, &GPIO_InitStruct);//根據上述內容初始化
/*Configure GPIO pins : LED1_Pin LED0_Pin */
//LED1,LED0配置相同,可以同時配置
GPIO_InitStruct.Pin = LED1_Pin|LED0_Pin;//這里配置兩個LED,也就是GPIO的輸出
//main.h中有#define LED0_Pin GPIO_PIN_1, #define LED1_Pin GPIO_PIN_0 對應PB1 PB0的1和0
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//模式為推挽輸出
GPIO_InitStruct.Pull = GPIO_PULLUP;//內部電阻上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//輸出速度為低速
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);//根據上述內容初始化
}
2.相關函式的應用
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297919.html
標籤:其他
