当前位置:网站首页>STM32 --- NVIC interrupt

STM32 --- NVIC interrupt

2022-07-05 08:15:00 chen_ bx

brief introduction

CM3 The kernel support 256 A break , Which includes 16 Kernel interrupts and 240 External interrupts , And have 256 The programmable interrupt settings of the .STM32 Not used CM3 Everything about the kernel , It's just a part of it .STM32 Yes 84 A break , Include 16 Kernel interrupts and 68 Maskable interrupts , have 16 Level programmable interrupt priority .
STM32F103 Above the series , It's just 60 Maskable interrupts ( stay 107 The series has 68 individual )

 Insert picture description here
 Insert picture description here


preemption & Response priority difference :

High priority preemption priority can interrupt the ongoing low preemption priority interrupt .
Preempt interrupts of the same priority , A high response priority cannot interrupt a low response priority interrupt .
Preempt interrupts of the same priority , When two interrupts occur at the same time , Which response has the highest priority , Which comes first .
If the preemption priority and response priority of two interrupts are the same , It depends on which interrupt occurs first ;

Interrupt parameter initialization function

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

The structure is as follows

typedef struct
{
    
  uint8_t NVIC_IRQChannel; // Set interrupt channel 
  uint8_t NVIC_IRQChannelPreemptionPriority;// Set response priority 
  uint8_t NVIC_IRQChannelSubPriority; // Set preemption priority 
  FunctionalState NVIC_IRQChannelCmd; // Can make / Can make 
} NVIC_InitTypeDef;

Initialize instance

NVIC_InitTypeDef   NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;// A serial port 1 interrupt 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//  Preemption priority is 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//  Sub priority bit 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ Channel enable 
NVIC_Init(&NVIC_InitStructure);	// Initialize... According to the parameters specified above NVIC register 

Interrupt priority setting steps

① After the system is running, set the interrupt priority group first . Call function :

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

During the execution of the whole system , Set interrupt packet only once .
② For each interrupt , Set the corresponding preemption priority and response priority :

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

③ If you need to suspend / Jie hang , View the current activation status of the interrupt , Call related functions respectively .

原网站

版权声明
本文为[chen_ bx]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140545026512.html