昨天我們成功將腳位設定成輸出模式,現在我們將PB0腳位設定為輸出模式。會選PB0是因為STM32F429ZI這塊晶片的PB0腳位與USER LED的正極是連通的。因此只要將PB0設為輸出,LED就會亮,可以很直觀的判斷是否成功輸出。
這塊開發版上有3個LED分別對應到的腳位為PB0、PB7、PB14
繼上次介紹HAL_Delay()後,我們來認識學習STM的第二個函式吧~
這個函式的功能就是Arduino的digitalWrite()
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_PIN, GPIO_PinState PinState);
這是這個函式的API,不要看到一堆不認識的型態就害怕,舉個例子你就明白了
假設你要讓PB0腳位輸出高電為,第一個參數就放GPIOB,就是"GPIO"+腳位的英文。第二個參數放GPIO_PIN_0,即"GPIO_PIN_" +第幾號腳位,最後一個參數如果你要輸出HIGH,就放GPIO_PIN_SET;LOW就放GPIO_PIN_RESET,很簡單吧。
完整的程式碼如下
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
搭配我們先前學過的HAL_Delay()函數
/* USER CODE BEGIN WHILE */
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_Delay(500);
}
/* USER CODE END 3 */
就可以讓LED以1Hz的頻率閃爍囉~
這個程式就像是學程式語言第一支程式一定都是在螢幕上輸出HelloWorld一樣呢
我們再來介紹今天的第二個語法吧
HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
這個函式與剛剛的很像,只不過這個會根據你現在的狀況來做輸出,每次都輸出與現在狀態相反的狀態,例如現在是HIGH則下次輸出LOW,反之亦然。
於是我們可以再更精簡我們的程式碼
/* USER CODE BEGIN WHILE */
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
HAL_Delay(500);
}
/* USER CODE END 3 */
學習完輸出,我們來學習輸入
要注意的是我們要把腳位設定成輸入模式(剛剛是輸出模式)
將.ioc檔內配置將PF13腳位配置成輸入模式(GPIO_Input),這樣就完成設定啦
我們可以設計一個簡單的線路,將剛剛已經設定好的PB0以杜邦線連接到PF13,這樣我們就可以用PF13來偵測PB0所輸出的腳位啦
接下來介紹今天最後一個語法
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
這個函式可以讀取現在輸入是高電位還是低電位,直接來個範例吧
/* USER CODE BEGIN WHILE */
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
state = HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_13);
HAL_Delay(500);
}
/* USER CODE END 3 */
記得在全域變數宣告一個整數變數state喔
接著再利用我們之前提到的小工具-現場表達式,就可以看到state的值一直在1和0這兩個數字交替變換囉
今天總共介紹了3個函式分別是