外部中斷,使用按鍵KEY檢測
- 1、STM32CubeMX引腳設定和代碼生成
- 2、撰寫相關中斷的C檔案
- 1.相關中斷函式:
- 2.相關中斷函式的撰寫:
- 3.相關中斷的優先級順序:
- 3、編譯工程檔案,使用ST-Link燒錄,測驗按鍵的外部中斷
1、STM32CubeMX引腳設定和代碼生成
1.正點原子mini開發板KEY的電路圖,正點原子mimi板的電路:WK_UP–PA0 KEY_0–PC5 KEY_1–PA15,根據電路圖可以知道,需要將WK_UP的輸入設定為上升沿觸發,將KEY_0、KEY_0設定為下降沿觸發,
注:
高電平有效使用上升沿觸發,電平由低到高;
低電平有效使用下降沿觸發,電平由高到低;
2.在STM32CubeMX軟體中,配置相對應的引腳及引腳相關模式GPIO_EXTI*,并在軟體右側對引腳進行詳細配置,并在用戶標簽項User Label中填進WK_UP等標簽備注,
(這個標簽項有利于幫助我們查看各個引腳的使用情況及相關代碼的宏定義,相關的宏定義會在生成的代碼main.h中進行定義,)
3.在STM32CubeMX軟體右側,選擇System Core項,點擊NVIC項,勾選對應的中斷總線,
4.在STM32CubeMX軟體右上角,點擊GEBERATE CODE項,生成代碼,


2、撰寫相關中斷的C檔案
1.相關中斷函式:
相關的中斷函式在stm32f1xx_it.c檔案中可以查看得到,
在HAL_GPIO_EXTI_IRQHandler()這個函式中,我們可以看到相關中斷函式的處理,

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)函式的簡介:
進入相關的中斷處理,先判斷該個IO口是否中斷,然后清除標志位,再進入IO口的回呼函式中HAL_GPIO_EXTI_Callback(GPIO_Pin)
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
{
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}
2.相關中斷函式的撰寫:
將相關的HAL_GPIO_EXTI_Callback(GPIO_Pin)復制到main.c中的用戶代碼區進行撰寫,當然也可以建立相關的exti.hexti.c檔案,
中斷函式中回呼函式的編輯情況如下:
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == WK_UP_Pin)
led_bling_sum(3,500); //閃爍3次,間隔500ms
else if(GPIO_Pin == KEY_0_Pin)
led_bling_sum(6,500); //閃爍6次,間隔500ms
else if(GPIO_Pin == KEY_1_Pin)
led_bling_sum(6,50); //閃爍6次,間隔50ms
}
/* USER CODE END 4 */
3.相關中斷的優先級順序:
由于void led_bling_sum(uint32_t sum,uint32_t time)函式中使用了void HAL_Delay(uint32_t Delay)延時函式,在中斷中使用延時函式,因此必須要考慮中斷的優先級順序,
中斷的優先級順序為:0最高級,1次高級,數字越大優先級越低,

3、編譯工程檔案,使用ST-Link燒錄,測驗按鍵的外部中斷
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302025.html
標籤:其他
