STM8S那些破事

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010448932/article/details/85486898

1、中断的使用   EXTI_SetExtIntSensitivity

外部中断控制寄存器 1 (EXTI_CR1)

 

void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)
{

    /* Check function parameters */
    assert_param(IS_EXTI_PORT_OK(Port));
    assert_param(IS_EXTI_SENSITIVITY_OK(SensitivityValue));

    /* Set external interrupt sensitivity */
    switch (Port)
    {
    case EXTI_PORT_GPIOA:
        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PAIS);
        EXTI->CR1 |= (uint8_t)(SensitivityValue);
        break;
    case EXTI_PORT_GPIOB:
        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PBIS);
        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 2);
        break;
    case EXTI_PORT_GPIOC:
        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PCIS); //0x30
        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 4);
        break;
    case EXTI_PORT_GPIOD:
        EXTI->CR1 &= (uint8_t)(~EXTI_CR1_PDIS);
        EXTI->CR1 |= (uint8_t)((uint8_t)(SensitivityValue) << 6);
        break;
    case EXTI_PORT_GPIOE:
        EXTI->CR2 &= (uint8_t)(~EXTI_CR2_PEIS);
        EXTI->CR2 |= (uint8_t)(SensitivityValue);
        break;
    default:
        break;
    }
}

#define IS_EXTI_SENSITIVITY_OK(SensitivityValue) \
  (((SensitivityValue) == EXTI_SENSITIVITY_FALL_LOW) || \
   ((SensitivityValue) == EXTI_SENSITIVITY_RISE_ONLY) || \
   ((SensitivityValue) == EXTI_SENSITIVITY_FALL_ONLY) || \
   ((SensitivityValue) == EXTI_SENSITIVITY_RISE_FALL))

 

 

 

使用举例:

利用外部中断做按键检测

key 初始化

void Buttom_Init(void)
{
    GPIO_Init(GPIOB,Buttom2|Buttom1,GPIO_MODE_IN_PU_IT);
    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY);
}
中断向量指定的是Port_D  (注意每个port只有一个中断相应,触发后会跳入同一个中断函数)

中断响应 (stm8s_interruput.c)

__interrupt void EXTI_PORTB_IRQHandler(void)
{
  if((PB_IDR & 0x08)==0)  //PB4 FAIL
  {
    delay_ms(10);
    if((PB_IDR & 0x08)==0)
    {
      UART1_SendString("PB4_Down\n",\
                              sizeof("PB4_Down\n"));
      //**需要中断处理的函数放这**//
    }
  }
}
    

展开阅读全文

没有更多推荐了,返回首页