有基础快速学习hal库--NVIC

本文介绍了从标准库过渡到STM32F103的HAL库时,如何快速学习和配置中断处理,包括NVIC的工作原理、中断优先级设置、中断使能以及EXTI初始化示例。

大部分小伙伴应该和我一样是从标准库学起的stm32,在过度到hal库时常常因为网上时常过长或者讲不清楚的教程而止步,(还有真心觉得标准库挺好用的//捂脸)

我打算之后在学习的同时更新一些不那么全面,只抓重点用于让熟悉标准库的同学快速上手的hal库笔记

STM32F103

内核中断

外部中断

中断优先级

10

60

16

相关寄存器

位数

寄存器个数

中断使能寄存器ISER

32

8

中断除能寄存器ICER

32

8

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

32

1

中断优先级寄存器IPR

8

240

NVIC工作过程

外部中断---进入nvic

aircr控制几位抢占几位响应

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

响应优先级越高越先

数值越小优先级越高

ipr控制中断优先级

然后依据优先级大小发送给cpu

Aircr

Ipr(几位抢占几位响应)

111

0:4

110

1:3

101

2:2

100

3:1

011

4:0

NVIC的使用

1,设置中断分组(aircr)

HAL_NVIC_SetPriorityuGrouping

2,设置中断优先级(iprx)

HAL_NVICSetPriority

3,使能中断(iser)

HAL_NVICEnableIRQ

Tips

例程代码:

void EXTI_Init(void)

{

    GPIO_InitTypeDef GPIO_Initure;

   

    __HAL_RCC_GPIOA_CLK_ENABLE();               //开启GPIOA时钟

    __HAL_RCC_GPIOE_CLK_ENABLE();               //开启GPIOE时钟

   

    GPIO_Initure.Pin=GPIO_PIN_0;                //PA0

    GPIO_Initure.Mode=GPIO_MODE_IT_RISING;      //上升沿触发

    GPIO_Initure.Pull=GPIO_PULLDOWN;

    HAL_GPIO_Init(GPIOA,&GPIO_Initure);

   

    GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;         //PE2,3,4

    GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;     //下降沿触发

    GPIO_Initure.Pull=GPIO_PULLUP;

    HAL_GPIO_Init(GPIOE,&GPIO_Initure);

   

    //中断线0-PA0

    HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);       //抢占优先级为2,子优先级为0

    HAL_NVIC_EnableIRQ(EXTI0_IRQn);             //使能中断线0

   

    //中断线2-PE2

    HAL_NVIC_SetPriority(EXTI2_IRQn,2,1);       //抢占优先级为2,子优先级为1

    HAL_NVIC_EnableIRQ(EXTI2_IRQn);             //使能中断线2

   

    //中断线3-PE3

    HAL_NVIC_SetPriority(EXTI3_IRQn,2,2);       //抢占优先级为2,子优先级为2

    HAL_NVIC_EnableIRQ(EXTI3_IRQn);             //使能中断线2

   

    //中断线4-PE4

    HAL_NVIC_SetPriority(EXTI4_IRQn,2,3);           //抢占优先级为2,子优先级为3

    HAL_NVIC_EnableIRQ(EXTI4_IRQn);                 //使能中断线

}

   使用格式:

   HAL_NVIC_SetPriority(EXTI0_IRQn,2,0);      

   HAL_NVIC_EnableIRQ(EXTI0_IRQn);            

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值