STM32外部中断测试

环境:

主机:WIN7

开发环境:MDK4.23

MCU:STM32F103CBT6

 

说明:微笑

STM32有20个外部中断线,其中EXTI0-EXTI15给I/O端口使用

EXTI线16连接到PVD输出 
EXTI线17连接到RTC闹钟事件 
EXTI线18连接到USB唤醒事件
EXTI线19连接到以太网唤醒事件(只适用于互联型产品)

 

源代码:

初始化:

[cpp]
  1. //打开NTRX外部中断   
  2. void open_ntrx_irq(void)  
  3. {  
  4.     //定义中断结构体   
  5.     NVIC_InitTypeDef NVIC_InitStructure ;  
  6.     //定义外部中断结构体   
  7.     EXTI_InitTypeDef EXTI_InitStructure;  
  8.     //定义IO初始化结构体   
  9.     GPIO_InitTypeDef GPIO_InitStructure;  
  10.       
  11.     //初始化NTRX中断脚PB1时钟   
  12.     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);  
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                         
  14.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;           //设置为输入   
  15.     GPIO_Init(GPIOB, &GPIO_InitStructure);                          //GPIOB初始化   
  16.     //配置中断源为PB1   
  17.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);  
  18.     // 配置EXTI_Line1下降沿触发   
  19.     EXTI_ClearITPendingBit(EXTI_Line1);  
  20.     EXTI_InitStructure.EXTI_Line = EXTI_Line1;  
  21.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  
  22.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
  23.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;  
  24.     EXTI_Init(&EXTI_InitStructure);  
  25.     //打开NTRX中断   
  26.     NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;                //通道设置为外部中断线0   
  27.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f;    //中断占先等级0   
  28.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;           //中断响应优先级0   
  29.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 //打开中断   
  30.     NVIC_Init(&NVIC_InitStructure);                                 //初始化   
  31.       
  32.     //EXTI_Line1中断允许   
  33.     EXTI_GenerateSWInterrupt(EXTI_Line1);  
  34. }  
//打开NTRX外部中断
void open_ntrx_irq(void)
{
	//定义中断结构体
	NVIC_InitTypeDef NVIC_InitStructure ;
	//定义外部中断结构体
	EXTI_InitTypeDef EXTI_InitStructure;
	//定义IO初始化结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//初始化NTRX中断脚PB1时钟
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;						
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     		//设置为输入
	GPIO_Init(GPIOB, &GPIO_InitStructure);                          //GPIOB初始化
	//配置中断源为PB1
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1);
	// 配置EXTI_Line1下降沿触发
	EXTI_ClearITPendingBit(EXTI_Line1);
	EXTI_InitStructure.EXTI_Line = EXTI_Line1;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	//打开NTRX中断
	NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;				//通道设置为外部中断线0
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f; 	//中断占先等级0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0f;           //中断响应优先级0
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           		//打开中断
	NVIC_Init(&NVIC_InitStructure);                                 //初始化
	
	//EXTI_Line1中断允许
	EXTI_GenerateSWInterrupt(EXTI_Line1);
}


中断函数:

[cpp]
       //NTRX中断   
  1. void EXTI1_IRQHandler(void)  
  2. {  
  3.     if(EXTI_GetITStatus(EXTI_Line1) != RESET)  
  4.     {  
  5.         //清中断   
  6.         EXTI_ClearITPendingBit(EXTI_Line1);  
  7.   
  8.         //中断标志置位   
  9.         Flag_IRQ.ntrx = 1;  
  10.     }  
  11. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值