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

STM32学习之路-外部中断(2)

时间:2014-05-22 06:43:16      阅读:395      评论:0      收藏:0      [点我收藏+]

标签:stm32   exti   

OK,继续上篇的内容. 配置好外部中断源以后, 就得使能外部中断线了.

为了方便看再借下这个图:

bubuko.com,布布扣

对外部中断的使能其实就是配置上面这些寄存器.即使能哪EXIT线,选择上面模式,是中断还是事件,选择下降沿还是上升沿.

具体怎么写寄存器这就不研究了, = = 太麻烦了.. 直接用STM32的库就行了,来看看它的代码吧

这是EXTI结构体的初始化函数,

void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
{
  EXTI_InitStruct->EXTI_Line = EXTI_LINENONE;
  EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
  EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;  //下降沿触发
  EXTI_InitStruct->EXTI_LineCmd = DISABLE;
}
#define EXTI_LINENONE    ((uint32_t)0x00000)  /* No interrupt selected */

从这里我们就可以知道我们要给它的结构体弄哪些东西了,例子:

EXTI_InitStructure.EXTI_Line = EXTI_Line2; 						
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			  
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;		    
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

看看EXTI_Init()

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
{
  uint32_t tmp = 0;

  /* Check the parameters */
  assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
  assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
  assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));  
  assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));

  tmp = (uint32_t)EXTI_BASE;
     
  if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
  {
    /* Clear EXTI line configuration */
    EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
    EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
    
    tmp += EXTI_InitStruct->EXTI_Mode;

    *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;

    /* Clear Rising Falling edge configuration */
    EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
    EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
    
    /* Select the trigger for the selected external interrupts */
    if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
    {
      /* Rising Falling edge */
      EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
      EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
    }
    else
    {
      tmp = (uint32_t)EXTI_BASE;
      tmp += EXTI_InitStruct->EXTI_Trigger;

      *(__IO uint32_t *) tmp |= EXTI_InitStruct->EXTI_Line;
    }
  }
  else
  {
    tmp += EXTI_InitStruct->EXTI_Mode;

    /* Disable the selected external lines */
    *(__IO uint32_t *) tmp &= ~EXTI_InitStruct->EXTI_Line;
  }
}
OK....

STM32学习之路-外部中断(2),布布扣,bubuko.com

STM32学习之路-外部中断(2)

标签:stm32   exti   

原文地址:http://blog.csdn.net/demetered/article/details/26259801

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