一知半解學CubeMX——GPIO:外部(按鍵)中斷
阿新 • • 發佈:2019-02-12
一知半解學習環境:
1、CubeMX 4.23.0
2、uVision 5.14.2
3、MCU 啟明 STM32F407 開發板(高配版) V3.1
一知半解學習目標:
1、掌握CubeMX下RCC以及SYS的相關配置;
2、掌握CubeMX下外部中斷(EXIT)的配置;
3、實現開發板按鍵輸入對LED的控制;
一知半解實現過程:
1、配置系統除錯介面及時基時鐘源;
2、配置外部高速時鐘源(HSE);
3、根據原理圖LED管腳配置相應GPIO引腳並修改巨集定義名稱;
配置LED輸出引腳為輸出模式並修改使用者標籤名
4、根據原理圖按鍵引腳配置相應外部中斷; 五向按鍵原理圖
配置按鍵引腳為外部輸入中斷,並修改使用者標籤名
5、配置時鐘樹,主頻168M;
6、配置工程涉及GPIO引腳引數; 三個LED引腳配置
四個按鍵(外部輸入中斷)配置如下
7、使能外部輸入中斷;
8、生成工程並修改程式; 首先,main.c頁面不需要做任何改動; 其次,只需要在生成的gpio.c頁面最下新增外部中斷回撥函式即可; /* USER CODE BEGIN 2 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == KEY0_Pin){/* KEY0 */
/* 翻轉LED0 */
HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
}
if(GPIO_Pin == KEY1_Pin){/* KEY1 */
/* 翻轉LED1 */
HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
}
if(GPIO_Pin == KEY2_Pin){/* KEY2 */
/* 翻轉LED2 */
HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
}
if(GPIO_Pin == KEY3_Pin){/* KEY3 */
/* 熄滅所有指示燈 */
HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
}
}
/* USER CODE END 2 */
一知半解套路回顧:
1、掌握CubeMX配置的常規套路,如SYS、RCC以及時鐘樹的配置等;
2、掌握外部中斷(EXIT)的配置方法(引腳配置+使能中斷);
3、牢記外部中斷回撥函式的使用;
2、配置外部高速時鐘源(HSE);
3、根據原理圖LED管腳配置相應GPIO引腳並修改巨集定義名稱;
配置LED輸出引腳為輸出模式並修改使用者標籤名
4、根據原理圖按鍵引腳配置相應外部中斷; 五向按鍵原理圖
配置按鍵引腳為外部輸入中斷,並修改使用者標籤名
5、配置時鐘樹,主頻168M;
6、配置工程涉及GPIO引腳引數; 三個LED引腳配置
四個按鍵(外部輸入中斷)配置如下
7、使能外部輸入中斷;
8、生成工程並修改程式; 首先,main.c頁面不需要做任何改動; 其次,只需要在生成的gpio.c頁面最下新增外部中斷回撥函式即可; /* USER CODE BEGIN 2 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){ if(GPIO_Pin == KEY0_Pin){/* KEY0 */