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外部中斷

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

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

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

圖片

圖片

圖片

AFIO內(nèi)部圖

圖片

EXTI內(nèi)部圖

圖片

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

圖片

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

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

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

按照中斷號(hào)排隊(duì)。

操作的是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)

{

//開(kāi)啟GPIOC的時(shí)鐘控制

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  

//開(kāi)啟AFIO的時(shí)鐘控制

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   

//EXTI的時(shí)鐘控制不需要開(kāi)啟     

//NVIC也不需要開(kāi)啟,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號(hào)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;               //是否開(kāi)啟中斷

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)先級(jí)和響應(yīng)優(yōu)先級(jí)分組



NVIC_InitTypeDef NVIC_InitStruct;

NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;

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

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

NVIC_Init(&NVIC_InitStruct);

}

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

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

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

void EXTI15_10_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line15)==SET)

{

    /*編寫(xiě)中斷程序  */

    OUT1_ON();

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

}

}

interrupt.h

#ifndef __Interrupt_H

#define __Interrupt_H

void Interrupt_Init (void);

#endif

圖片

圖片

圖片

圖片

聲明:本文內(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5356

    瀏覽量

    120573
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10905

    瀏覽量

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

    關(guān)注

    1

    文章

    132

    瀏覽量

    15837
  • 時(shí)鐘控制
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    6831
  • AFIO
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    2967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    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 ?3678次閱讀

    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 ?2355次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>外部</b><b class='flag-5'>中斷</b>大問(wèn)題