自学内容网 自学内容网

STM32中断嵌套


前言

提示:这里可以添加本文要记录的大概内容:

项目需要:


提示:以下是本篇文章正文内容,下面案例可供参考

一、中断嵌套是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、代码

1.初始化代码

代码如下(示例):

void exit_qt_init()
{

//PC5

//PA15 

GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);


GPIO_InitStruct.GPIO_Pin= GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);


EXTI_InitStruct.EXTI_Line=EXTI_Line5;
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_Line15;
EXTI_InitStruct.EXTI_LineCmd=  ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);



 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
 
 
 NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0; 
 NVIC_Init(&NVIC_InitStruct);


NVIC_InitStruct.NVIC_IRQChannel= EXTI15_10_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0; 
 NVIC_Init(&NVIC_InitStruct);


}

2.中断代码

代码如下(示例):


void EXTI9_5_IRQHandler(void)
{

u8  ITStatus;
    ITStatus= EXTI_GetITStatus(EXTI_Line5);
 if(ITStatus==1)
 {

//点灯

  //led  亮
 GPIO_SetBits( GPIOA, GPIO_Pin_1); 
 EXTI_ClearITPendingBit(EXTI_Line5);
 }

}

void EXTI15_10_IRQHandler(void)
{

u8  ITStatus;
    ITStatus= EXTI_GetITStatus(EXTI_Line15);
 if(ITStatus==1)
 {

//点灯

  //led  亮
 GPIO_SetBits( GPIOA, GPIO_Pin_1); 
 EXTI_ClearITPendingBit(EXTI_Line15);
 }



}


3.完整代码

#include<stm32f10x.h>


#include <key.h>



void led_init()
{

//LED 指示用
  GPIO_InitTypeDef GPIO_InitStruct; 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);

}

void exit_init()
{

//PC5

GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);

EXTI_InitStruct.EXTI_Line=EXTI_Line5;
EXTI_InitStruct.EXTI_LineCmd=  ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;

EXTI_Init(&EXTI_InitStruct);


 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
 NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0;
 
 NVIC_Init(&NVIC_InitStruct);





}


void exit_qt_init()
{

//PC5

//PA15 

GPIO_InitTypeDef GPIO_InitStruct;
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);


GPIO_InitStruct.GPIO_Pin= GPIO_Pin_15;
GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);


GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);


EXTI_InitStruct.EXTI_Line=EXTI_Line5;
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_Line15;
EXTI_InitStruct.EXTI_LineCmd=  ENABLE;
EXTI_InitStruct.EXTI_Mode= EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);



 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
 
 
 NVIC_InitStruct.NVIC_IRQChannel= EXTI9_5_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 0;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0; 
 NVIC_Init(&NVIC_InitStruct);


NVIC_InitStruct.NVIC_IRQChannel= EXTI15_10_IRQn;
 NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE;
 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority= 1;
 NVIC_InitStruct.NVIC_IRQChannelSubPriority= 0; 
 NVIC_Init(&NVIC_InitStruct);


}




int main()
{
u8 temp;

led_init();
//key_init();
exit_qt_init();

//exit_init();
//GPIO_InitTypeDef GPIO_InitStruct; 
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA, ENABLE);
////RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//GPIO_InitStruct.GPIO_Pin= GPIO_Pin_5;
//GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IPU;
//GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
//GPIO_Init(GPIOC, &GPIO_InitStruct);
//
LED 指示用

//
//GPIO_InitStruct.GPIO_Pin= GPIO_Pin_1;
//GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;
//GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
//GPIO_Init(GPIOA, &GPIO_InitStruct);


while(1)
{

//led  灭
GPIO_ResetBits( GPIOA, GPIO_Pin_1);

//temp=GPIO_ReadInputDataBit( GPIOC, GPIO_Pin_5);
//
//if(temp==0) {
//
//  //led  亮
//GPIO_SetBits( GPIOA, GPIO_Pin_1);
//
//}
//else{
//
////led  灭
//
//
//}

//temp=KEY_Scan(1);
//if(temp==0)
//{
//GPIO_SetBits( GPIOA, GPIO_Pin_1);
//}
//

}
}


void EXTI9_5_IRQHandler(void)
{

u8  ITStatus;
    ITStatus= EXTI_GetITStatus(EXTI_Line5);
 if(ITStatus==1)
 {

//点灯

  //led  亮
 GPIO_SetBits( GPIOA, GPIO_Pin_1); 
 EXTI_ClearITPendingBit(EXTI_Line5);
 }

}

void EXTI15_10_IRQHandler(void)
{

u8  ITStatus;
    ITStatus= EXTI_GetITStatus(EXTI_Line15);
 if(ITStatus==1)
 {

//点灯

  //led  亮
 GPIO_SetBits( GPIOA, GPIO_Pin_1); 
 EXTI_ClearITPendingBit(EXTI_Line15);
 }



}









































//#include <stm32f10x.h>

//#define BIT(n)     (1<<n)

//int main()
//{
//     //PC1  配置为推挽输出
//*((unsigned int*)(0x40021000+0x18)) |=  0X00000010;
//
RCC->APB2ENR |=  0X00000010;
//RCC->APB2ENR |=  0X00000020;
//
GPIOC->CRL &= 1111 1111 1111 1111 1111 1111 1111 0000 1111   0X FFFF FF0F
//GPIOC->CRL &=  0XFFFFFF0F;
GPIOC->CRL &= 0000 0000 0000 0000 0000 0000 0011 0000   0X 0000 0030
//GPIOC->CRL |= 0X00000030;
//
//GPIOD->CRL &=  0XFF0FFFFF;
//GPIOD->CRL |=  0X00300000;
//
//
//
//while(1)
//{
//
GPIOC->ODR  |= 0X00000002;  //给高电平的
GPIOC->ODR  &=~ 0X00000002;  //给低电平的
GPIOC->ODR  &= 0XFFFFFFFD;  //给低电平的
//
//
GPIOC->ODR  |= 1<<1;  //给高电平的   PC1 
        GPIOC->ODR  &= ~(1<<1);  //给高电平的   PC1 

//
//GPIOC->ODR  |=  BIT(1);  //给高电平的   PC1 
//        GPIOC->ODR  &= ~BIT(1);  //给高电平的   PC1 
//
//GPIOD->ODR  |=  BIT(5);  //给高电平的   PD1 
//        GPIOD->ODR  &= ~BIT(5);  //给高电平的   PD1 
//
//
//}
//
//}



总结

学习使人快乐!
音乐使人愉悦!
日积月累使人充实和自信!


原文地址:https://blog.csdn.net/ganhui13000/article/details/142970302

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!