1. 程式人生 > >一知半解學CubeMX——GPIO:外部(按鍵)中斷

一知半解學CubeMX——GPIO:外部(按鍵)中斷

一知半解學習環境:     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、牢記外部中斷回撥函式的使用;