精华内容
下载资源
问答
  • NVIC

    2019-09-29 19:51:16
    1中断:每一个中断都会对应一个服务程序  2NVIC 他的做用是负责中断优先级管理  3IP bit[7:4]每一个中断都有一个IP寄存器,用于设置... 4中断分组1.void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGrou...

    1中断:每一个中断都会对应一个服务程序

      2NVIC 他的做用是负责中断优先级管理

      3IP bit[7:4]每一个中断都有一个IP寄存器,用于设置中断相关的属性

        AIRCR[10:8]只一个AIRCR寄存器负责所有的中断的优先级的分组

      4中断分组 1.void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

        NVIC_PriorityGroup_0~4

      5中断初始化 

        void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
        uint8_t NVIC_IRQChannel; 中断号
        stm32f4xx.h typedef enum IRQn 中断号的定义

      6  抢占优先级 uint8_t NVIC_IRQChannelPreemptionPriority; 0~15

      7 响应优先级 NVIC_IRQChannelSubPriority; 0~15

      8中断使能开关 FunctionalState NVIC_IRQChannelCmd; ENABLE DISABLE

      9 中断响应方式 电平触发

              边沿触发

              跳变触发 上升沿 下降沿 双边沿

     

      10选择中断线: EXTI 0~15 可选择对应的GPIO端口

        void SYSCFG_EXTILineConfig(uint8_t EXTI_PortSourceGPIOx, uint8_t EXTI_PinSourcex)

        每一个EXTIn 只能是每组GPIO第

    每一个EXTIn 只能是每组GPIO第n个端口
    EXTI_PortSourceGPIOx EXTI_PortSourceGPIOA~G 选择对应的组

    11 配置触发方式
    void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
    uint32_t EXTI_Line; 外部中断线
    EXTI_Line0~22

    EXTIMode_TypeDef EXTI_Mode;
    EXTI_Mode_Interrupt 中断
    EXTI_Mode_Event 事件

    EXTITrigger_TypeDef EXTI_Trigger 触发方式
    EXTI_Trigger_Rising 上升沿
    EXTI_Trigger_Falling 下降沿
    EXTI_Trigger_Rising_Falling 双边沿

    EXTI_LineCmd 使能开关
    ENABLE DISABLE

    代码示例:

    1 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

     

    2

    NVIC_InitTypeDef NVIC_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);

    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_Init(&EXTI_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&NVIC_InitStruct);

     

    2 看门狗

    1打开写保护 void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);
    2设置分频系数 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);
    3设置RLR寄存器值 void IWDG_SetReload(uint16_t Reload);
    4喂狗 void IWDG_ReloadCounter(void);
    5使能看门狗 void IWDG_Enable(void);
    6手动喂狗 IWDG_ReloadCounter();

    void iwdg_init()
    {
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(IWDG_Prescaler_64);
    //64/32000 * 1000
    IWDG_SetReload(1000);
    IWDG_ReloadCounter(); //
    IWDG_Enable();
    }

     

    //中断服务程序,名字固定,并且类型void (void)
    void EXTI0_IRQHandler(void)
    {
    //1.判断该中断产生源
    delay_ms(10);//消除抖动
    if(0 == WK_UP) { //判断中断确实由WK_UP按键产生
    //2.中断处理部分
    //BEEP = !BEEP;
    IWDG_ReloadCounter();
    }
    //3.清除中断标志
    EXTI_ClearITPendingBit(EXTI_Line0);
    }


    void EXTI4_IRQHandler(void)
    {
    delay_ms(10);
    if(0 == KEY0) { 
    //2.中断处理部分
    PFout(9) = !PFout(9);
    }
    //3.清除中断标志
    EXTI_ClearITPendingBit(EXTI_Line4);
    }

    void EXTI3_IRQHandler(void)
    {
    delay_ms(10);
    if(0 == KEY1) { 
    //2.中断处理部分
    PFout(10) = 0;
    } else if(1 == KEY1) {
    PFout(10) = 1;
    }
    //3.清除中断标志
    EXTI_ClearITPendingBit(EXTI_Line3);
    }


    void my_exti_init()
    {
    NVIC_InitTypeDef NVIC_InitStruct;
    EXTI_InitTypeDef EXTI_InitStruct;

    key_init();
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource4);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);

    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);

    EXTI_InitStruct.EXTI_Line = EXTI_Line4;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);

    EXTI_InitStruct.EXTI_Line = EXTI_Line3;
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
    EXTI_Init(&EXTI_InitStruct);


    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&NVIC_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel = EXTI4_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&NVIC_InitStruct);

    NVIC_InitStruct.NVIC_IRQChannel = EXTI3_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    NVIC_Init(&NVIC_InitStruct);
    }

    转载于:https://www.cnblogs.com/baoshulin/p/6194522.html

    展开全文
  • NVIC中断应用

    2020-06-10 22:26:17
    NVIC

    1.NVIC优先级

    1.NVIC分组不参与优先级
    2.中断同时发生,抢占优先级高的就会抢占 抢占优先级低的先执行
    3.抢占优先级相同,中断同时发生,子优先级高的先执行中断
    4.抢占优先级与子优先级相同时,比较硬件中断编号,编号越小,优先级越高。
    下面是NVIC优先级分组,0-4组,每组16个中断优先级
    在这里插入图片描述

    2.NVIC程序配置

    1.NVIC分组
    2.配置外部中断源
    3.配置抢占优先级
    4.配置子优先级
    5.使能中断
    NVIC中断源:
    在这里插入图片描述
    NVIC软件配置

    static void NVIC_Configuration(void)
    {
      NVIC_InitTypeDef NVIC_InitStructure;
      
      /* ÅäÖÃNVICΪÓÅÏȼ¶×é1 */
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
      
      /* ÅäÖÃÖжÏÔ´£º°´¼ü1 */
      NVIC_InitStructure.NVIC_IRQChannel =  EXTI0_IRQn;
      /* ÅäÖÃÇÀÕ¼ÓÅÏȼ¶ */
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
      /* ÅäÖÃ×ÓÓÅÏȼ¶ */
      NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
      /* ʹÄÜÖжÏͨµÀ */
      NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      NVIC_Init(&NVIC_InitStructure);
    }
    

    以上纯属个人观点,若有不正之处,请不吝赐教!

    展开全文
  • NVIC库函数

    千次阅读 2018-08-04 11:02:12
    1.void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) 功能:根据NVIC_InitStruct结构体变量中的参数初始化NVIC外设 注释:结构体中的NVIC_IRQChannel成员赋值要到stm32f10x.h中的IRQn_Type(STM32F10x中断数定义...

    1.void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

    功能:根据NVIC_InitStruct结构体变量中的参数初始化NVIC外设

    注释:结构体中的NVIC_IRQChannel成员赋值要到stm32f10x.h中的IRQn_Type(STM32F10x中断数定义)去复制

    例如:NVIC_Init(&NVIC_InitStructure);

     

    2.void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

    功能:配置优先级分组(主优先级和次优先级)

    注释:组0:主优先级0位,次优先级4位(0 , 0~15)            组1:主优先级1位,次优先级3位(0~1 , 0~7)

                组2:主优先级2位,次优先级2位(0~3 , 0~3)          组3:主优先级3位,次优先级1位(0~7 , 0~1)

                组4:主优先级4位,次优先级0位(0~15 , 0)

    例如:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

     

    3.void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset)

    功能:设置向量表的位置和偏移量

    注释:位置可以为RAM或者FLASH中;偏移量对RAM高于0x100且必须是0x200的倍数;偏移量对FLASH高于0x08000100

    例如:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00010000);

     

    4.void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState)

    功能:配置系统进入低功耗模式的条件

    注释:NVIC_LP_SEVONPEND(根据待处理请求唤醒,任意中断即可)        

                NVIC_LP_SLEEPDEEP(深度睡眠使能)

                NVIC_LP_SLEEPONEXIT(退出ISR(Interrupt Service Routine中断服务程序)后睡眠)

    例如:NVIC_SystemLPConfig(NVIC_LP_SEVONPEND);

     

    5.void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)

    功能:配置SysTick时钟源

    注释:时钟源来自AHB总线时钟(HCLK)的分频

    例如:SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

     

    6.core_cm3.h内的函数之后更新

    展开全文
  • NVIC中断

    2020-11-19 20:58:09
    本周学习NVIC中断,总结起来主要是三个方面:中断优先级分组,中断优先级设置和总结 概述 STM32F40xx/STM32F41xx总共有92个中断。 STM32F42xx/STM32F43xx则总共有96个中断。 我所用的是STM32F407ZGT6,共92个中断,...

    本周学习NVIC中断,总结起来主要是三个方面:中断优先级分组,中断优先级设置和总结

    概述

    STM32F40xx/STM32F41xx总共有92个中断。
    STM32F42xx/STM32F43xx则总共有96个中断。
    我所用的是STM32F407ZGT6,共92个中断,92个中断里面,包括10个内核中断和82个可屏蔽中断,具有16级可编程的中断优先级,而常用的就是这82个可屏蔽中断。
    内核中断
    内核中断82个可屏蔽中断
    在这里插入图片描述

    NVIC中断优先级分组

    首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。
    在这里插入图片描述AIRCR是寄存器有3位, 4-0组,依次为011,100,101,110,111. IP共4位用于抢占优先级和响应优先级的分配。
    抢占优先级 & 响应优先级区别:
    高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
    抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
    抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
    如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;

    举例:假定设置中断优先级组为2,然后设置
    中断3(RTC中断)的抢占优先级为2,响应优先级为1。 中断6(外部中断0)的抢占优先级为3,响应优先级为0。中断7(外部中断1)的抢占优先级为2,响应优先级为0。

    那么这3个中断的优先级顺序为:中断7>中断3>中断6
    需加注意的是系统代码执行过程中,只设置一次中断优先级分组,以后不会再改变
    具体函数:void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

    中断优先级设置

    中断设置相关寄存器
    __IO uint8_t IP[240]; //中断优先级控制的寄存器组
    __IO uint32_t ISER[8]; //中断使能寄存器组
    __IO uint32_t ICER[8]; //中断失能寄存器组
    __IO uint32_t ISPR[8]; //中断挂起寄存器组
    __IO uint32_t ICPR[8]; //中断解挂寄存器组
    __IO uint32_t IABR[8]; //中断激活标志位寄存器组
    MDK中NVIC寄存器结构体
    typedef struct
    {
    __IO uint32_t ISER[8];
    uint32_t RESERVED0[24];
    __IO uint32_t ICER[8];
    uint32_t RSERVED1[24];
    __IO uint32_t ISPR[8];
    uint32_t RESERVED2[24];
    __IO uint32_t ICPR[8];
    uint32_t RESERVED3[24];
    __IO uint32_t IABR[8];
    uint32_t RESERVED4[56];
    __IO uint8_t IP[240];
    uint32_t RESERVED5[644];
    __O uint32_t STIR;
    } NVIC_Type;
    中断优先级控制的寄存器组:IP[240] 全称是:Interrupt Priority Registers
    240个8位寄存器,每个中断使用一个寄存器来确定优先级。STM32F40x系列一共82个可屏蔽中断,使用IP[81]~IP[0]。
    每个IP寄存器的高4位用来设置抢占和响应优先级(根据分组),低4位没有用到。

    总结

    中断优先级设置步骤

    1. 系统运行后先设置中断优先级分组。调用函数: void NVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup);

    2. 整个系统执行过程中,只设置一次中断分组。 针对每个中断,设置对应的抢占优先级和响应优先级:
      void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

    3. 如果需要挂起/解挂,查看中断当前激活状态,分别调用相关函数即可。

    展开全文
  • NVIC中断管理.pdf

    2021-09-14 13:10:05
    NVIC中断管理.pdf
  • NVIC的使用

    2021-05-05 21:19:00
    NVIC相关内容 中断编程的四个部分—— 1.使能中断请求; 2.配置中断优先级分组(一个项目中只需要配置一次) 3.配置NVIC寄存器,初始化NVIC_InitTypeDef; 4.编写中断服务函数。 中断过程的三个部分—— 1.配置NVIC_...
  • K60芯片NVIC

    2013-11-03 13:24:26
    K60芯片NVIC模块中断相关寄存器配置以及应用举例
  • NVIC中断管理

    2019-11-20 23:29:31
    使用中断之前,第一步要了解的是其优先级管理,下面总结一下STM32 NVIC的中断优先级管理。(正点原子系列) 以smt32f103系列为例,其具有16个内核中断和60个可屏蔽中断。 下面介绍其库函数的开发: MDK内与NVIC相关...
  • NVIC设置

    千次阅读 2018-08-10 11:17:19
    NVIC终端优先级分组(Nest Vector Interrupt Control 嵌套式向量中断控制器) CM4内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。STM32F4只是使用了其中的一部分。 ...
  • STM32 中断与嵌套NVIC 快速入门
  • stm32 NVIC卡在NVIC_Init的解决

    千次阅读 2017-05-25 22:58:20
    今天在写RTC的时候,运行一直没有出结果,经调试发现问题出现在配置NVICNVIC_Init()这个方法里,经查找是没有就这句代码的原因: NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x20000000); //设置中断向量在RAM  ...
  • 中断之NVIC

    千次阅读 2019-08-25 15:26:44
    简单的介绍一下NVIC,有点枯燥乏味
  • NVIC抢占和响应优先级设置
  • stm32中的nvic

    2015-12-04 19:01:44
    stm32中的nvic介绍,供初学者理解使用
  • NVIC与外部中断

    2021-04-16 19:11:09
    RCC,NVIC,GPIO,USART,EXIT配置 GPIOA.0 为按键 GPIO用作EXTI外部中断时,需要打开AFIO #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0000000); #else NVIC_SetVectorTable(NVIC_VectTab_FLASH,...
  • STM32 NVIC

    2019-12-11 14:00:04
    最近开始研究NVIC,以前一直是用现成的,或者是修修补补,不求甚解,低效的学习方法告诉我,还是要理解技术的内在含义,否则遇到问题很麻烦,要调试很久,balabala说了一堆,进入正题 NVIC含义:嵌套中断向量控制器...
  • STM32-NVIC

    2013-02-02 11:44:09
    讲解了STM32的NVIC应用 很容易理解 值得学习
  • nvic的配置

    2019-03-04 15:59:26
    1.设置优先级分组,使用hal库函数(一个字节的高四位为stm32储存优先等级组(cotex内核的话是有8位来存储的,只不过stm32只用了高4位),)HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2) 设置优先等级组为2 ...
  • CM4 NVIC优先级的问题

    2017-01-12 07:21:52
    VCORTEX_NVIC_STRUCT_PTR nvic = (VCORTEX_NVIC_STRUCT_PTR)&(((CORTEX_SCS_STRUCT_PTR)CORTEX_PRI_PERIPH_IN_BASE)->NVIC); _mqx_uint ext_irq_no = irq - 16; // check priority value, must be below ...
  • stm32 NVIC中断优先级

    2019-06-10 15:54:34
    stm32 NVIC中断优先级   在使用IIC、串口等功能时一定会涉及NVIC中断的设置,NVIC(Nested Vectored Interrupt Controller)即内嵌向量中断控制器,该设置主要用来判定当两个中断同时发生,或者在一个中断进行的...
  • NVIC 中断优先级管理详解

    万次阅读 多人点赞 2018-08-12 01:14:46
    1.NVIC(内嵌向量中断控制器) NVIC:Nested Vectored Interrupt Controller,STM32系列有84个中断,相对于的开发板STM32F103系统
  • STM32中的NVIC详解

    万次阅读 多人点赞 2019-05-06 21:45:25
    NVIC的全称是Nested vectoredinterrupt controller,即嵌套向量中断控制器。 对于M3和M4内核的MCU,每个中断的优先级都是用寄存器中的8位来设置的。8位的话就可以设置2^8 =256级中断,实际中用不了这么多,所以芯片...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,749
精华内容 9,499
关键字:

nVIC