stm32学习3,配置外部中断函数

 借用江协科技的外部中断图:

通过这幅图我们很容易知道:配置外部中断函数,使用stm32先要打开时钟(GPIO,AFIO,EXIT,NVIC),再配置GPIO,再配置AFIO,再配置EXIT,再配置NVIC。最后写实现外部中断函数

#include "stm32f10x.h"                

void CountSensor_Init()
{ 
	//配置时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打开GPIOB的时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO的时钟 //EXIT和NVIC自带时钟
	
	//配置GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;      //上拉模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14 ;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
	
	//配置AFIO
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
	//选择用作EXTI线的GPIO引脚。
	
	//配置EXIT
	EXTI_InitTypeDef EXTI_InitStruct;
	EXTI_InitStruct.EXTI_Line = EXTI_Line14;          //根据GPIO
	EXTI_InitStruct.EXTI_LineCmd = ENABLE ;         
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;  //外部中断模式
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
	EXTI_Init(&EXTI_InitStruct);
	
	//配置NVIC
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//配置优先级分组,只能有一组
    NVIC_InitTypeDef NVIC_InitStruct;
	NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;//指定通道来开启,10-15并在一个组里     
	NVIC_InitStruct.NVIC_IRQChannelCmd= ENABLE ;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =  1 ;//配置抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1 ;        //配置响应优先级
	NVIC_Init(&NVIC_InitStruct);
}
  
//外部中断函数
 void EXTI15_10_IRQHandler(void)
 {
	 //如果发生外部中断,状态标志位自动置1(set)执行外部中断函数
  if(EXTI_GetITStatus(EXTI_Line14) == SET) 
	{
	

      EXTI_ClearITPendingBit(EXTI_Line14);//清除状态标志位,跳出(结束当前)中断函数
	}	
		
 }

中断函数中不能有太长时间的代码,比如delay()函数等比较消耗单片机时间的代码。会影响主函数的运行 

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值