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 
//		
//		
//	}
//	
//}


三、手把手教学视频(硬件仿真)

STM32两个外部中断嵌套2024-10-24 09-42


https://www.bilibili.com/video/BV1Nt1PYgESY/?vd_source=2f51b53d36c7b878a5128c37eb2800a4

四、要求完成四个外部中断嵌套测试

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值