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

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

2.1 NVIC配置

1、中断分组

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

有 组分配方式:

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

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

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

3组:高3位配抢占优先级,1位配响应优先级。种抢占优先级,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);
}  
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值