RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的外部中斷

汽車(chē)電子技術(shù) ? 來(lái)源:玩轉(zhuǎn)單片機(jī) ? 作者:Julian ? 2023-02-10 14:53 ? 次閱讀

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

poYBAGPl6cmAVGtJAAHWx2SaZnM342.png

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

pYYBAGPl6b2AD0glAAEEwAL79pA733.png

2、EXTI 配置

#include "stm32f10x.h"

uint8_t main_temp = 0;    //標(biāo)志位

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

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

/*
 * 簡(jiǎn)單說(shuō)明: 外部中斷初始化
 */
void My_EXTI_Init(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  EXTI_InitTypeDef  EXTI_InitStructure;
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//開(kāi)啟 AFIO 時(shí)鐘
  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//選擇GPIO管腳用作外部中斷線路
  
  
  //EXTI0 NVIC 配置
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;        //EXTI0中斷通道
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;  //搶占優(yōu)先級(jí)
  NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;        //子優(yōu)先級(jí)
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;          //IRQ通道使能
  NVIC_Init(&NVIC_InitStructure);  //根據(jù)指定的參數(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
  
}

/*
 * 簡(jiǎn)單說(shuō)明: 外部中斷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);  //清除中斷標(biāo)志位
}

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--

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

    關(guān)注

    1

    文章

    81

    瀏覽量

    20681
  • STM32F103
    +關(guān)注

    關(guān)注

    33

    文章

    477

    瀏覽量

    63599
  • EXTI
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    3686
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    STM32外部中斷的設(shè)置

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

    STM32外部中斷的怎么配置

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

    詳細(xì)解析STM32外部中斷

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

    STM32外部中斷簡(jiǎn)介

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

    stm32外部中斷簡(jiǎn)介

    stm32外部中斷實(shí)驗(yàn)
    發(fā)表于 08-17 08:20

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

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

    STM32外部中斷怎么設(shè)置?

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

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

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

    STM32_外部中斷程序

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

    STM32外部中斷實(shí)驗(yàn)-EXTI

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

    STM32外部中斷邊沿觸發(fā)存在延時(shí)問(wèn)題

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

    STM32 外部中斷實(shí)驗(yàn)參考程序

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

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

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

    STM32外部中斷大問(wèn)題

    出現(xiàn)這種情況,明明沒(méi)有觸發(fā)外部中斷,可是中斷服務(wù)函數(shù)還是不斷的++。問(wèn)題一:電氣噪聲和抖動(dòng)電氣噪聲和抖動(dòng)是常見(jiàn)的問(wèn)題,可能會(huì)導(dǎo)致STM32外部
    的頭像 發(fā)表于 11-08 08:00 ?2252次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>大問(wèn)題
    RM新时代网站-首页