STM32外部中断

发布者:rho27最新更新时间:2024-01-31 来源: elecfans关键字:STM32  外部中断 手机看文章 扫描二维码
随时随地手机看文章

68个可屏蔽中断通道,包括EXTI,TIM,ADC,USART,SPI,I²C,RTC等多个外设(F1系列最多的数量,以型号为主);


使用NVIC统一管理中断,每个中断通道都拥有16个可编程优先等级,可以对优先级进行分组,进一步设置抢占优先级和响应优先级。


图片

图片

图片

AFIO内部图

图片

EXTI内部图

图片

中断和事件的区别

图片

NVIC的中断优先级由优先级寄存器的4位(0-15)决定,这四位可以进行切分,分为高N位的抢占优先级,

和4-n位的响应优先级;

抢占优先级高的可以中断嵌套,响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的话,

按照中断号排队。

操作的是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是属于内核内的外设    


                                                      


/*配置GPIO   */  


GPIO_InitTypeDef GPIO_InitStructur;


GPIO_InitStructur.GPIO_Mode=GPIO_Mode_IPU;      //设置成上拉输入


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);  //设置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;  //配置成上升沿触发


EXTI_Init(&EXTI_Initstructure);




/*配置NVIC   配置中断分组  */


NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);    //配置中断抢占优先级和响应优先级分组




NVIC_InitTypeDef NVIC_InitStruct;


NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;


NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;


NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1; //配置抢占优先级


NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;        //配置响应优先级    


NVIC_Init(&NVIC_InitStruct);

}


/*编写中断函数,中断函数的名字都是固定的,中断函数都是无参数无返回值的 */


/*编中断函数的函数名可以在启动文件startup_stm32f10x_md.s中可以找到 */


/*中断函数的名字都是以_IRQHandler结尾 */


void EXTI15_10_IRQHandler(void)


{


if(EXTI_GetITStatus(EXTI_Line15)==SET)


{


    /*编写中断程序  */


    OUT1_ON();


    EXTI_ClearITPendingBit(EXTI_Line15);  //清除中断标志位


}

}


interrupt.h


#ifndef __Interrupt_H


#define __Interrupt_H


void Interrupt_Init (void);


#endif

图片

图片

图片

图片


关键字:STM32  外部中断 引用地址:STM32外部中断

上一篇:STM32速成笔记(7)—ADC
下一篇:STM32速成笔记(1)概述

推荐阅读最新更新时间:2024-11-12 08:34

STM32 UART2程序
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef N
[单片机]
stm32调试时候出现 Error: Flash Download failed - "
也就是在MDK中的Flash的编程算法没有配置或没有配置正确 添加完之后就可以了
[单片机]
<font color='red'>stm32</font>调试时候出现 Error: Flash Download failed  -  "
STM32笔记之十:工作工作,PWM输出
a) 目的:基础PWM输出,以及中断配合应用。输出选用PB1,配置为TIM3_CH4,是目标板的LED6控制脚。 b) 对于简单的PWM输出应用,暂时无需考虑TIM1的高级功能之区别。 c) 初始化函数定义: void TIM_Configuration(void); //定义TIM初始化函数 d) 初始化函数调用: TIM_Configuration(); //TIM初始化函数调用 e) 初始化函数,不同于前面模块,TIM的初始化分为两部分 基本初始化和通道初始化: void TIM_Configuration(void)//TIM初始化函数
[单片机]
简述stm32各时钟系统的一些区别
  时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。   下面是从网上找的一个STM32时钟框图,比《STM32中文参考手册》里面的是中途看起来清晰一些:   重要的时钟:   PLLCLK,SYSCLK,HCKL,PCLK1,PCLK2 之间的关系要弄清楚;   1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差   2、HSE:高速外部时钟信号 精度高 来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟   3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用   在ST
[单片机]
STM32的四种输出模式
1、普通推挽输出(GPIO_Mode_Out_PP): 使用场合:一般用在0V和3.3V的场合。线路经过两个P_MOS 和N_MOS 管,负责上拉和下拉电流。 使用方法:直接使用 输出电平:推挽输出的低电平是0V,高电平是3.3V。 2、普通开漏输出(GPIO_Mode_Out_OD): 使用场合:一般用在电平不匹配的场合,如需要输出5V的高电平。 使用方法:就需要再外部接一个上拉电阻,电源为5V,把GPIO设置为开漏模式, 当输出高组态时,由上拉电阻和电源向外输出5V的电压。 输出电平:在开漏输出模式时,如果输出为0,低电平,则使N_MOS 导通,使输 出接地。若控制输出为1(无法直接输出高电平),则
[单片机]
STM32单片机的堆栈深入解析
学习STM32单片机的时候,总是能遇到“堆栈”这个概念。分享本文,希望对你理解堆栈有帮助。 对于了解一点汇编编程的人,就可以知道,堆栈是内存中一段连续的存储区域,用来保存一些临时数据。堆栈操作由PUSH、POP两条指令来完成。而程序内存可以分为几个区: 栈区(stack) 堆区(Heap) 全局区(static) 文字常亮区程序代码区 程序编译之后,全局变量,静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。 栈是从高到低分配,堆是从低到高分配。 普通单片机与STM32单片机中堆栈的区别 普通单片机启动时,不需要用b
[单片机]
<font color='red'>STM32</font>单片机的堆栈深入解析
STM32正交编码器Demo
编码器分类: 按工作原理:光电式、磁电式和触点电刷式 按码盘的刻孔方式:增量式和绝对式两类 由于博主接触面还不是很广,一共就用过两个种类的编码器,都是属于光电的 差分编码器:一般由8根线连接 信号线分别为 A+ A- B+ B- Z+ Z- 以及VCC和GND 这里有一种不需要Z信号的,6线差分A+ A- B+ B- VCC 和GND 正交编码器:一般是5根线连接,信号线分别为A B Z VCC和GND 编码器线数: 就是旋转一圈你的A(B)会输出多少个脉冲 ,这里的A B就是上面的输出脉冲信号线,它们转一圈发出的脉冲数一样的,不过存在90°相位差 通常都是360线的 线数越高代表编码器能够反应的位置精度越高 相位差为90°
[单片机]
<font color='red'>STM32</font>正交编码器Demo
MDK中使用STM32官方固件库
首先STM32官方固件库在Keil中的位置是: .h文件在\Keil\ARM\INC\ST\STM32F10x .c文件在\Keil\ARM\RV31\LIB\ST\STM32F10x 要使用官方固件库,首先要在MDK的工程建立以后将需要用到的相应的.c文件复制到工程下,例如在工程目录下新建一个FWLib的文件夹,然后复制到这里。STM32官方固件库的结构如下: 在stm32f10x_conf.h中类似如下的定义: #define _SPI2 #define _SPI3 在stm32f10x_map.h中 #ifdef _SPI2 #define SPI2
[单片机]
MDK中使用<font color='red'>STM32</font>官方固件库
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved