天天看點

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

前言:

1、軟體:keil5,STM32CubeMX

2、STM32闆子:STM32F103VET6

4、按鍵管腳:PA0 PC13

5、LED管腳: PB0 PB1 PB5

文章目錄

  • 怎麼用外部中斷點燈?
    • 1.知道原理:
    • 2.配置STM32CubeMX:
    • 3.你要寫的代碼:
    • 4.實作的效果:
  • 具體過程:
  • 1.配置CubeMX
      • 1.打開軟體
      • 2.選擇闆子類型
      • 3.選擇serial wire:
      • 4.選擇外部時鐘:
      • 5.選擇GPIO的IO口:
      • 6.打開外部中斷:
      • 7.檔案名和選擇檔案位址:
  • 2.在keil中編寫代碼實作功能:
      • 1.配置keil
      • 2.寫代碼:

怎麼用外部中斷點燈?

1.知道原理:

綠燈的io口是PB0,藍燈的io口是PB1,紅燈的io口是PB5,外部中斷按鍵KEY1:PA0,外部中斷按鍵KEY2:PC13,

當按鍵按下PA0或者PC13IO口輸入高電平,檢測到上升沿,或者松開檢測到下降沿,使PB0,PB1,PB5,IO口為低電平就能點亮

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

2.配置STM32CubeMX:

找到LED的IO口配置為高電平(輸出模式),找到按鍵的IO口配置(外部中斷模式)。

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

3.你要寫的代碼:

我這裡用KEY1和KEY2來控制綠燈藍燈切換。

void Delay(unsigned int i)//延時
{
	while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_0)
  {
   Delay(100);/* 延時一小段時間,消除抖動 */
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
  }
  if(GPIO_Pin==GPIO_PIN_13)
  {
     Delay(100);/* 延時一小段時間,消除抖動 */
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
  }

}
           

4.實作的效果:

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

具體過程:

1.配置CubeMX

1.打開軟體

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

2.選擇闆子類型

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

3.選擇serial wire:

用于DAP和J-Link做下載下傳

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

4.選擇外部時鐘:

高速時鐘(HSE)選擇外部晶振

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

5.選擇GPIO的IO口:

按鍵管腳:PA0 PC13 (EXTI模式)

LED管腳: PB0 PB1 PB5(輸出模式)

模式:

上升沿觸發的外部中斷

下降沿觸發的外部中斷

上升/下降沿觸發的外部中斷

上升沿觸發的事件中斷

下降沿觸發的事件中斷

上升/下降沿觸發的事件中斷

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

6.打開外部中斷:

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

7.檔案名和選擇檔案位址:

建議用英文名

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

2.在keil中編寫代碼實作功能:

1.配置keil

STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

2.寫代碼:

隻能在begin和end之間寫代碼,不然再次啟動CubeMX會把寫在begin和end外的代碼覆寫掉(删掉)

/* USER CODE BEGIN 1 */
void Delay(unsigned int i)//延時
{
	while(i--);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==GPIO_PIN_0)
  {
   Delay(100);/* 延時一小段時間,消除抖動 */
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_RESET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_SET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
  }
  if(GPIO_Pin==GPIO_PIN_13)
  {
     Delay(100);/* 延時一小段時間,消除抖動 */
    if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==SET)
    {
      HAL_GPIO_WritePin (GPIOB,GPIO_PIN_1 ,GPIO_PIN_SET);
			HAL_GPIO_WritePin (GPIOB,GPIO_PIN_0 ,GPIO_PIN_RESET);
    }
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13);
  }

}
/* USER CODE END 1 */
           
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:
STM32CubeMX(三):外部中斷EXTI怎麼用外部中斷點燈?具體過程:1.配置CubeMX2.在keil中編寫代碼實作功能:

點選下載下傳就能通過按鍵點亮燈了!!!

最後:

要自己寫一個短暫的延時

void Delay(unsigned int i)
{
	while(i--);
}

           

不能用庫的延時

HAL_Delay (1000);

不然會卡死。

繼續閱讀