码迷,mamicode.com
首页 > 其他好文 > 详细

基于STM32F0的GPIO外部中断

时间:2016-08-02 14:57:02      阅读:1410      评论:0      收藏:0      [点我收藏+]

标签:

背景:项目中需要使用hall传感器检测门锁状态,触发中断,发送门锁状态信息。(这儿中断服务中只是点了led灯说明了状况)

硬件情况:采用PB3管脚,因而使用中断线:EXTI_Line3和中断服务函数:EXTI2_3_IRQn。

具体过程:

1、设置中断时钟

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

2、配置GPIO

 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;   //输入
 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //拉高
 GPIO_Init(GPIOB, &GPIO_InitStructure);

3、GPIO与中断线的映射

 SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOB, EXTI_PinSource3);

4、配置EXTI

 EXTI_InitTypeDef EXTI_InitStructure

 EXTI_InitStructure.EXTI_Line = EXTI_Line3;  //中断线3
 EXTI_InitStructure.EXTI_LineCmd = ENABLE;
 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;  //边沿触发
 EXTI_Init(&EXTI_InitStructure);

5、配置NVIC

 NVIC_InitTypeDef NVIC_InitStructure;

 NVIC_InitStructure.NVIC_IRQChannel = EXTI2_3_IRQn;  //顶层头文件重定义好的
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
 NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;  //中断优先级
 NVIC_Init(&NVIC_InitStructure);

6、中断服务程序及标志位清除


void EXTI2_3_IRQHandler()  //启动文件中定义好的
{

  if (LOCK_SENSOR == 0)
  {

    GPIO_SetBits(GPIOF, GPIO_Pin_6);

    GPIO_ResetBits(GPIOF, GPIO_Pin_7);
  }

  if (LOCK_SENSOR == 1)
  {

    GPIO_SetBits(GPIOF, GPIO_Pin_7);

    GPIO_ResetBits(GPIOF, GPIO_Pin_6);
  }

  EXTI_ClearITPendingBit(EXTI_Line3);

}

 

STM32外部中断易出错总结(详见链接)

http://blog.csdn.net/yskcg/article/details/8201505

基于STM32F0的GPIO外部中断

标签:

原文地址:http://www.cnblogs.com/chenfeima/p/5729024.html

(3)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!