stm32学习笔记-NVIC

https://blog.csdn.net/qq_38351824/article/details/94038740
这部分讲的很好。

misc.h文件其实就是stm32f10x_NVIC.h,NVIC的主要操作都在其中,还包括systick的选择源操作。
core_cm3文件里面是内核外设,当然包括NVIC,l里面包含NVIC的寄存器操作。

  • NVIC叙述
  • NVIC寄存器
  • NVIC操作
  • NVIC代码示例

NVIC叙述

在这里插入图片描述NVIC是位于内核的中断控制器,是所有中断在内核处理的中枢,想要使用中断必须先配置它。
高达81个中断,实际上是67stm外设中断(60个settable,由库函数interrupt number可知)+16cortex内核中断(7个settable)。
0-15优先级等级。
可用电压和脉冲作为中断信号.。(未尝试)

NVIC寄存器

在这里插入图片描述ISERx\ICERx\ISPRx\ICPRx\IABRx
在这里插入图片描述每32个中断使用使能、失能、挂起、清除挂起、激活寄存器各一个。
无论使能与否,每个中断都可被挂起。
这几个其实没啥卵用。。之后的misc库函数封装得很完善了。
NVIC的寄存器操作也可以在core_m3.h文件中NVIC function中找到,但是一般不使用。
重要的是:
IPRx寄存器
在这里插入图片描述cortex给了81个中断预留IP[X],st显然没有全用。
cortex每个中断分配8bit的中断优先级编程区域,一个IPRx管四个中断。
实际上st只用了8bit里面的4bit,还用了抢占、响应两个优先级。

NVIC操作

在这里插入图片描述
NVIC属于cortex,无时钟使能。
之前说过这几个寄存器其实没啥卵用,库函数的操作如下:

  • 设置优先级组型。
  • 初始化NVIC,包括其中断渠道、抢占优先级、响应优先级、使能与否。

如此简单就完成了NVIC的中断设置。

NVIC代码示例

NVICConfig.h

#include "NVICConfig.h"


void NVIC_Config(  uint8_t NVIC_IRQChannel  ,  uint32_t NVIC_PriorityGroup  ,\
  uint8_t NVIC_IRQChannelPreemptionPriority  ,  uint8_t NVIC_IRQChannelSubPriority  , FunctionalState NVIC_IRQChannelCmd     )
{
	NVIC_InitTypeDef* NVIC_InitStruct;
	NVIC_InitStruct->NVIC_IRQChannel  =  NVIC_IRQChannel;
	NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority  =  NVIC_IRQChannelPreemptionPriority;
	NVIC_InitStruct->NVIC_IRQChannelSubPriority  =  NVIC_IRQChannelSubPriority;
	NVIC_InitStruct->NVIC_IRQChannelCmd  =  NVIC_IRQChannelCmd;
	
	
	NVIC_PriorityGroupConfig(  NVIC_PriorityGroup  );
	NVIC_Init(  NVIC_InitStruct  );
}

NVICConfig.c

#ifndef __NVIC_CONFIG_H_
#define __NVIC_CONFIG_H_

#include "stm32f10x.h"

void NVIC_Config(  uint8_t NVIC_IRQChannel  ,  uint32_t NVIC_PriorityGroup  ,\
  uint8_t NVIC_IRQChannelPreemptionPriority  ,  uint8_t NVIC_IRQChannelSubPriority  , FunctionalState NVIC_IRQChannelCmd     );

#endif

main.c

int main()
{
	NVIC_Config(  EXTI0_IRQn  ,  NVIC_PriorityGroup_0  ,\
	  0  ,  1  ,  ENABLE  );
}
//配置EXTIO 组0优先级 抢占0 响应1 使能

欢迎交流指正~~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值