0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的外部中斷

汽車電子技術 ? 來源:玩轉單片機 ? 作者:Julian ? 2023-02-10 14:53 ? 次閱讀

1、外部中斷/事件線映射

poYBAGPl6cmAVGtJAAHWx2SaZnM342.png

從上表可知,STM32F10x 的 EXTI 供外部 IO 口使用的中斷線有 16 根,但是我們使用的 STM32F103 芯片卻遠遠不止 16 個 IO 口,那么 STM32F103 芯片怎么解決這個問題的呢?因為 STM32F103 芯片每個 GPIO 端口均有 16 個管腳,因此把每個 端 口 的 16 個 IO 對 應 那 16 根 中 斷 線 EXTI0-EXTI15 。比 如 :GPIOx.0-GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對應中斷線 EXTI0-EXTI15,這樣一來每個中斷線就對應了最多 7 個 IO 口,比如:GPIOA.0、GPIOB.0、GPIOC.0、GPIOD.0、GPIOE.0、GPIOF.0、GPIOG.0。但是中斷線每次只能連接一個在 IO 口上,這樣就需要通過 AFIO 的外部中斷配置寄存器 1 的 EXTIx[3:0]位來決定對應的中斷線映射到哪個 GPIO 端口上,對于中斷線映射到 GPIO 端口上的配置函數(shù)在stm32f10x_gpio.c 和 stm32f10x_gpio.h 中,所以使用到外部中斷時要把這個文件加入到工程中,在創(chuàng)建庫函數(shù)模板的時候我們默認已經添加。

pYYBAGPl6b2AD0glAAEEwAL79pA733.png

2、EXTI 配置

#include "stm32f10x.h"

uint8_t main_temp = 0;    //標志位

void LED_Init()
{
  GPIO_InitTypeDef GPIO_InitStructure;            //定義結構體變量
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;          //選擇你要設置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;   //設置推挽輸出模式
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //設置傳輸速率
  GPIO_Init(GPIOC,&GPIO_InitStructure);            //初始化GPIO
  
  GPIO_SetBits(GPIOC,GPIO_Pin_0);                  //將LED端口拉高,熄滅所有LED
}

void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;       //定義結構體變量  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;     //選擇你要設置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //下拉輸入  
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //設置傳輸速率
  GPIO_Init(GPIOA,&GPIO_InitStructure);       //初始化GPIO
}

/*
 * 簡單說明: 外部中斷初始化
 */
void My_EXTI_Init(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef  EXTI_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//開啟 AFIO 時鐘
  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//選擇GPIO管腳用作外部中斷線路
  
  
  //EXTI0 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;        //EXTI0中斷通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;  //搶占優(yōu)先級
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;        //子優(yōu)先級
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;          //IRQ通道使能
  NVIC_Init(&NVIC_InitStructure);  //根據指定的參數(shù)初始化VIC寄存器
  
  EXTI_InitStructure.EXTI_Line=EXTI_Line0;                //中斷/事件線
  EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;       //中斷模式
  EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;    //上升沿觸發(fā)
  EXTI_InitStructure.EXTI_LineCmd=ENABLE;                 //使能
  EXTI_Init(&EXTI_InitStructure);  //初始化EXTI
  
}

/*
 * 簡單說明: 外部中斷0函數(shù)
 */
void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0)==1)  //判斷中斷線是否有中斷發(fā)生
  {
    if( main_temp ){
      main_temp = 0x00;
    }
    else{
      main_temp = 0xff;
    }
  }
  EXTI_ClearITPendingBit(EXTI_Line0);  //清除中斷標志位
}

int main( void )
{
  LED_Init();
  KEY_Init();
  My_EXTI_Init();
  while(1)
  {
    if( main_temp == 0x00 ){
      GPIO_SetBits(GPIOC,GPIO_Pin_0);
    }
    else{
      GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    }
    
  }
}

--END--

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32F10x
    +關注

    關注

    1

    文章

    81

    瀏覽量

    20632
  • STM32F103
    +關注

    關注

    33

    文章

    475

    瀏覽量

    63195
  • EXTI
    +關注

    關注

    0

    文章

    27

    瀏覽量

    3642
收藏 人收藏

    評論

    相關推薦

    STM32CubeIDE軟件實現(xiàn)STM32外部中斷實例

    本文用STM32CubeIDE軟件實現(xiàn)STM32外部中斷實例。
    的頭像 發(fā)表于 08-24 09:09 ?4192次閱讀

    STM32外部中斷的設置

    發(fā)現(xiàn)了一個關于STM32外部中斷的設置小文章
    發(fā)表于 03-13 16:04

    STM32外部中斷的怎么配置

    STM32中斷分組STM32外部中斷的配置過程使用GPIO口接按鍵進行外部
    發(fā)表于 03-02 07:34

    詳細解析STM32外部中斷

    說明:本文旨在詳細解析STM32外部中斷,以實現(xiàn)按鍵觸發(fā)外部中斷。其中包含“編程流程”、“程序代碼”、“代碼解析”、“原理分析”、“小結”
    發(fā)表于 08-13 07:50

    STM32外部中斷簡介

    STM32外部中斷+TFTLCD顯示STM32外部中斷簡介S
    發(fā)表于 08-16 07:46

    stm32外部中斷簡介

    stm32外部中斷實驗
    發(fā)表于 08-17 08:20

    STM32外部中斷中斷通道是什么?

    STM32外部中斷中斷通道是什么?
    發(fā)表于 11-16 09:12

    STM32外部中斷怎么設置?

    STM32外部中斷怎么設置?
    發(fā)表于 11-18 07:36

    STM32外部中斷實現(xiàn)紅外遙控功能

    STM32外部中斷實現(xiàn)紅外遙控功能。
    發(fā)表于 12-14 15:49 ?67次下載

    STM32_外部中斷程序

    STM32 外部中斷程序,很好的學習資料,快來下載吧
    發(fā)表于 02-15 17:09 ?30次下載

    STM32外部中斷實驗-EXTI

    STM32 外部中斷簡介STM32 的每個 IO 都可以作為外部中斷
    發(fā)表于 11-29 16:06 ?9次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>實驗-EXTI

    STM32外部中斷邊沿觸發(fā)存在延時問題

    STM32外部中斷時延問題概括:通過軟件調試,示波器觀察的方式,來分析外部中斷存在時延的原因。在調試模擬SPI接收的時候,想用
    發(fā)表于 12-27 18:27 ?20次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>邊沿觸發(fā)存在延時問題

    STM32 外部中斷實驗參考程序

    STM32 外部中斷實驗程序,供STM32初學者參考。
    發(fā)表于 12-30 10:46 ?41次下載

    STM32如何配置外部中斷?STM32外部中斷配置步驟

    STM32如何配置外部中斷STM32外部中斷配置步驟? 作為一款現(xiàn)代化的微控制器,
    的頭像 發(fā)表于 10-26 17:47 ?3025次閱讀

    STM32外部中斷大問題

    出現(xiàn)這種情況,明明沒有觸發(fā)外部中斷,可是中斷服務函數(shù)還是不斷的++。問題一:電氣噪聲和抖動電氣噪聲和抖動是常見的問題,可能會導致STM32外部
    的頭像 發(fā)表于 11-08 08:00 ?1540次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>大問題