当前位置:Gxlcms > mysql > STM32学习笔记整理之(2)外部中断

STM32学习笔记整理之(2)外部中断

时间:2021-07-01 10:21:17 帮助过:87人阅读

学习STM32也快一年了,现在工作的内容跟用的是STM32平台的,趁着年前工作量比较小,总结一下STM32的基础知识,不出意外的话将会连续发布完整的笔记整理,学习的时候主要是跟着野火教程学的,然后在整理出适合自己的笔记。 2.1NVIC 配置 1 、中断分组 在配置

学习STM32也快一年了,现在工作的内容跟用的是STM32平台的,趁着年前工作量比较小,总结一下STM32的基础知识,不出意外的话将会连续发布完整的笔记整理,学习的时候主要是跟着野火教程学的,然后在整理出适合自己的笔记。

2.1 NVIC配置

1、中断分组

在配置优先级的时候,NVIC 只可以配置 16 种中断向量的优先级,抢占优先级和响应优先级的数量由一个 4 位的数字来决定,把这个 4 位数字的位数分配成抢占优先级部分和响应优先级部分。

5 组分配方式:

0组:所有4位用来配置响应优先级。

1组:最高1位配抢占优先级,低3位配响应优先级。2^1=2 种抢占优先级(01)2^3=8 种响应优先级,

2组:2位配抢占优先级,2位配响应优先级。4种抢占优先级,4种响应优先级。

3组:高3位配抢占优先级,1位配响应优先级。8 种抢占优先级,2种响应优先级。

4组:所有4位配抢占优先级,16 种中断向量都是抢占属性,没有响应属性。

2、中断优先级

1STM32中断向量有抢占属性和响应属性,编号越小,级别越高。

2、抢占,是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断

3、响应,当两个中断向量的抢占优先级相同时,如两个中断同时到达,则先处理响应优先级高的中断

3、中断通道

中断服务函数的名字必须要与启动文件startup_stm32f10x_hd.s 中的中断向量表定义一致(以下是相对应的表)

中断通道 中断服务函数 中断线路 中断引脚

EXTI0_IRQn EXTI0_IRQHandler ; EXTI Line 0 PA0~PG0

EXTI1_IRQn EXTI1_IRQHandler; EXTI Line 1 PA1~PG1

EXTI2_IRQn EXTI2_IRQHandler ; EXTI Line 2 PA2~PG2

EXTI3_IRQn EXTI3_IRQHandler ; EXTI Line 3 PA3~PG3

EXTI4_IRQn EXTI4_IRQHandler ; EXTI Line 4 PA4~PG4

EXTI9_5_IRQn EXTI9_5_IRQHandler ; EXTI Line 9..5

EXTI15_10_IRQn EXTI15_10_IRQHandler ; EXTI Line 15..10

4、代码

static void NVIC_A11exti_inti(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //选择中断分组1

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //选择中断通道0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢占式中断优先级设置
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //响应式中断优先级设置
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure);
}

2.1 外部中断配置

1、使能 EXTIx 线的时钟和第二功能 AFIO 时钟

2、配置 EXTIx 线的中断优先级(NVIC

3、配置GPIO引脚

4、配置为 EXTI模式和中断线路


void EXTI_PA0_inti(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作的结构体
EXTI_InitTypeDef EXTI_InitStructure;//定义EXTI宏操作的结构体
EXTI_ClearITPendingBit(EXTI_Line0);//清空中断标志

/*config the exitline clock and AFIO clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟


/*config the NVIC*/
NVIC_A11exti_inti();//配置中断


/*EXTI line gpio config*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选定引脚号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//配置输出

/*EXYI line mode config*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);//选择中断引脚
EXTI_InitStructure.EXTI_Line = EXTI_Line0;//选择中断线路0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断请求,非事件请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿中断

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中断使能
EXTI_Init(&EXTI_InitStructure);
}


2.1 服务函数

void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
//uart_sendStr(USART1,"q ");
EXTI_ClearITPendingBit(EXTI_Line0);
}
}

人气教程排行