STM32hal库学习(F1)-EXTI

NVIC

中断资源

10个内核中断,60个外部中断,16个中断优先级

中断向量表

定义在启动文件,发生中断,CPU会自动执行中断服务函数

NVIC相关寄存器

相关寄存器

位数

寄存器个数

备注

中断使能寄存器(ISER)

32

8

每个位控制一个中断

中断除能寄存器(ICER)

32

8

每个位控制一个中断

应用程序中断及复位控制寄存器(AIRCR)

32

1

位[10:8]控制优先级分组

中断优先级寄存器(IPR)

8

240

8个位对应一个中断优先级

而STM32只使用高4位

此外NVIC还有中断挂起,解挂,激活标志等非常用功能

NVIC工作原理

STM32hal库学习(F1)-EXTI_第1张图片

中断优先级介绍

抢占优先级:高抢占可以打断低抢占

响应优先级:响应高优先响应,但不能互相打断

自然优先级:中断向量表的顺序

优先级数值越小,表示优先级越高

优先级分组

优先级分组

AIRCR[10:8]

IPRx bit[7:4]分配

分配结果

0

111

 None  [7:4]

0位抢占优先级,4位响应优先级

1

110

       [7]  [6:4]

1位抢占优先级,3位响应优先级

2

101

   [7:6]  [5:4]

2位抢占优先级,2位响应优先级

3

100

   [7:5]  [4]  

3位抢占优先级,1位响应优先级

4

011

   [7:4]  None

4位抢占优先级,0位响应优先级

只需设置一次优先级,且优先级在

HAL_Init();

定义过了

NVIC配置步骤

HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2); //设置优先级分组2;AIRCR[10:8]

HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);//设置中断优先级,抢占2,响应0;IPRx bit[7:4]

HAL_NVIC_EnableIRQ(EXTI0_IRQn);//使能中断;ISERx

EXTI

F1拥有20条EXTI线

EXTI工作原理

STM32hal库学习(F1)-EXTI_第2张图片

可以分为四个步骤

边沿检测-》软件触发-》中断屏蔽/清除-》事件屏蔽


EXTI可配置事件输入CPU唤醒

唤醒功能不妨先理解未电脑的睡眠模式

STM32hal库学习(F1)-EXTI_第3张图片

AFIO

复用功能IO,主要用于引脚重复,把功能重新映射到另外的引脚

在定时器时再好好讲讲

中断配置布骤

STM32hal库学习(F1)-EXTI_第4张图片

STM32hal库学习(F1)-EXTI_第5张图片

代码演示

void EXTI_Init()
{
    GPIO_InitTypeDef GPIO_InitStructure;

    __HAL_RCC_GPIOA_CLK_ENABLE();//使能时钟

    GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;    //上升沿中断
    GPIO_InitStructure.Pin = GPIO_PIN_0;              //PA0
    GPIO_InitStructure.Pull = GPIO_PULLDOWN;          //默认下拉
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;  //高速
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);        //初始化

    //中断线0-PA0
    HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);           //设置优先级,中断分组在HAL_Init();
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);                   //使能中断
}

void EXTI0_IRQHandler()                               //中断服务函数
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);             //中断公共服务函数,会清理标志位,且会调                        
                                                      //用回调函数
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)        //回调函数,编写中断内容
{

}

该文章参考正点原子资料,请勿商用

有错误地方请大家指点

你可能感兴趣的:(STM32,stm32,学习,单片机)