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

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

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

STM32外部中斷

冬至子 ? 來源:HyanLabviewCoder ? 作者:Happy Every Moment ? 2023-10-24 09:29 ? 次閱讀

68個可屏蔽中斷通道,包括EXTI,TIM,ADC,USART,SPI,I2C,RTC等多個外設(shè)(F1系列最多的數(shù)量,以型號為主);

使用NVIC統(tǒng)一管理中斷,每個中斷通道都擁有16個可編程優(yōu)先等級,可以對優(yōu)先級進行分組,進一步設(shè)置搶占優(yōu)先級和響應(yīng)優(yōu)先級。

圖片

圖片

圖片

AFIO內(nèi)部圖

圖片

EXTI內(nèi)部圖

圖片

中斷和事件的區(qū)別

圖片

NVIC的中斷優(yōu)先級由優(yōu)先級寄存器的4位(0-15)決定,這四位可以進行切分,分為高N位的搶占優(yōu)先級,

和4-n位的響應(yīng)優(yōu)先級;

搶占優(yōu)先級高的可以中斷嵌套,響應(yīng)優(yōu)先級高的可以優(yōu)先排隊,搶占優(yōu)先級和響應(yīng)優(yōu)先級均相同的話,

按照中斷號排隊。

操作的是NVIC->IPRx寄存器

圖片

圖片

中斷示例

main

#include "stm32f10x.h" // Device header

#include "Delay.h"

#include "OUT1.H"

#include "Interrupt.h"

int main(void)

{

OUT1_Init();

Interrupt_Init();

OUT1_OFF();

while(1)

{

    Delay_s(5);

    OUT1_OFF();

}

}

interrupt.c

#include "stm32f10x.h" // Device header

#include "OUT1.h"

void Interrupt_Init (void)

{

//開啟GPIOC的時鐘控制

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  

//開啟AFIO的時鐘控制

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   

//EXTI的時鐘控制不需要開啟     

//NVIC也不需要開啟,NVIC是屬于內(nèi)核內(nèi)的外設(shè)    

                                                      

/*配置GPIO   */  

GPIO_InitTypeDef GPIO_InitStructur;

GPIO_InitStructur.GPIO_Mode=GPIO_Mode_IPU;      //設(shè)置成上拉輸入

GPIO_InitStructur.GPIO_Pin=GPIO_Pin_15;         //選擇15號Pin腳

GPIO_InitStructur.GPIO_Speed=GPIO_Speed_50MHz;  //不重要

GPIO_Init(GPIOC,&GPIO_InitStructur);            //選擇C組的GPIO

/*配置AIFO    */

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource15);  //設(shè)置PC15為外部中斷線



/*配置EXIT    */

EXTI_InitTypeDef EXTI_Initstructure;

EXTI_Initstructure.EXTI_Line=EXTI_Line15;             //配置中斷線

EXTI_Initstructure.EXTI_LineCmd=ENABLE;               //是否開啟中斷

EXTI_Initstructure.EXTI_Mode=EXTI_Mode_Interrupt;     //配置成中斷

EXTI_Initstructure.EXTI_Trigger=EXTI_Trigger_Rising;  //配置成上升沿觸發(fā)

EXTI_Init(&EXTI_Initstructure);



/*配置NVIC   配置中斷分組  */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //配置中斷搶占優(yōu)先級和響應(yīng)優(yōu)先級分組



NVIC_InitTypeDef NVIC_InitStruct;

NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; //配置搶占優(yōu)先級

NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;        //配置響應(yīng)優(yōu)先級    

NVIC_Init(&NVIC_InitStruct);

}

/*編寫中斷函數(shù),中斷函數(shù)的名字都是固定的,中斷函數(shù)都是無參數(shù)無返回值的 */

/*編中斷函數(shù)的函數(shù)名可以在啟動文件startup_stm32f10x_md.s中可以找到 */

/*中斷函數(shù)的名字都是以_IRQHandler結(jié)尾 */

void EXTI15_10_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line15)==SET)

{

    /*編寫中斷程序  */

    OUT1_ON();

    EXTI_ClearITPendingBit(EXTI_Line15);  //清除中斷標(biāo)志位

}

}

interrupt.h

#ifndef __Interrupt_H

#define __Interrupt_H

void Interrupt_Init (void);

#endif

圖片

圖片

圖片

圖片

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

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119816
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354299
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    15790
  • 時鐘控制
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    6804
  • AFIO
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    2939
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    STM32外部中斷的怎么配置

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

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

    說明:本文旨在詳細(xì)解析STM32外部中斷,以實現(xiàn)按鍵觸發(fā)外部中斷。其中包含“編程流程”、“程序代碼”、“代碼解析”、“原理分析”、“小結(jié)”
    發(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外部中斷怎么設(shè)置?

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

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

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

    STM32_外部中斷程序

    STM32 外部中斷程序,很好的學(xué)習(xí)資料,快來下載吧
    發(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外部中斷時延問題概括:通過軟件調(diào)試,示波器觀察的方式,來分析外部中斷存在時延的原因。在調(diào)試模擬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初學(xué)者參考。
    發(fā)表于 12-30 10:46 ?41次下載

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

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

    STM32外部中斷大問題

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