STM32的中斷系統和外部中斷(基於STM32CubeMX開發)


一 概述
STM32芯片有16個外部中斷源,EXTI0-EXTI15,分別對應着七個中斷服務函數,其中有五個EXTI0,EXTI1,EXTI2,EXTI3,EXTI4是專用的,其余為共用。
EXTI0對應每個端口組的0號引腳,也就是說 EXTI0的連接引腳為PA0-PG0。以此類推,EXTI1、EXTI2、EXTI3、EXTI4分別對應每個端口組的1、2、3、4號引腳。
而EXTI5-EXTI9為5-9端口共用,而EXTI10-EXTI15為10-15端口共用。具體的表示如圖所示:
在這里插入圖片描述
外部中斷觸發條件有:上升沿觸發,下降沿觸發,雙邊沿觸發。注意不能配置成高電平低電平觸發。
二 設計步驟
基於STM32CubeMX的外部中斷設計步驟:
【1】在STM32CubeMX中指定引腳,配置中斷初始化參數。
選擇GPIO引腳的功能,設置中斷信號觸發條件,使能NVIC對應的中斷通道。
【2】重寫該I/O引腳對應的中斷回調函數。
三 具體操作
例:將PC13引腳設置成外部中斷,下降沿觸發,在終端服務函數中,翻轉PB9引腳的電平信號。

  1. 首先配置時鍾和系統選項
    在這里插入圖片描述
    在這里插入圖片描述

  2. 我采用的是ST-LINKV2仿真器,所以我選用了serial wire串行線路。同時在硬件上要將單片機最小系統的BOOT0和BOOT1都置為0。

  3. 同時如圖所示配置中斷,輸出引腳:在這里插入圖片描述

  4. 將引腳參數,中斷參數配置完成:
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    其余關於STM32CubeMX項目建立等其他操作不再贅述。如圖所示:
    在這里插入圖片描述
    在這里插入圖片描述

四 代碼執行

  1. 在keil工程文件里會發現一個stm32f1xx_it.c文件,里面保存的就是中斷的一些代碼。
    在main文件里將會看到 MX_GPIO_Init();,里面包含外部中斷的初始化。
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);
	//設置PB9為輸出
  /*Configure 配置 GPIO pin : PC13 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /*Configure 配置 GPIO pin : PB9 */
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  /* EXTI interrupt init*/
  HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
	//中斷初始化
}
  1. 接下來我們重寫該I/O引腳對應的中斷回調函數:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_13)
	{
		HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_9);
	}
	
}

運行,即可看到效果。
注:
本筆記為歐浩源老師STM32課程的一些梳理,對應的視頻為:
https://www.bilibili.com/video/av87017878?p=4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM