STM8S_库函数_按键中断控制LED

大家好,我是单片机爱好者-MCU起航。这里说下使用库函数方式控制STM8S103F3P6的GPIO,通过外部中断的方式检测按键是否被按下,然后控制LED开关。

首先看原理图,这里使用我设计的地心一号的开发板做演示:

这一节的内容和上一节其实很像,唯一不一样的地方在于按键的检测方式:从上一节的扫描检测变成了外部中断检测。代码如下:

#include "stm8s.h"

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
void Delay(uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {   
    nCount--;
  }
}
void main(void)
{
  /* Initialize I/Os in Output Mode */
  GPIO_Init(GPIOB, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
  GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_PU_IT);
  EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);
  enableInterrupts();
  while (1)
  {
  }
  
}

直接看主函数,PB4初始化和上一节一样,PC3的初始化发生了一些变化。

GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_IN_PU_IT);

现在使用的是输入、带上拉电阻、有中断的模式。既然要使用中断,那就要对中断就行一些配置,如下:

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);

函数“EXTI_SetExtIntSensitivity”可以设置外部管脚的中断相关细节。这里开启了GPIOC的下降沿中断。除了下降沿中断,还有几种模式:

  EXTI_SENSITIVITY_FALL_LOW  = (uint8_t)0x00, /*!< Interrupt on Falling edge and Low level */
  EXTI_SENSITIVITY_RISE_ONLY = (uint8_t)0x01, /*!< Interrupt on Rising edge only */
  EXTI_SENSITIVITY_FALL_ONLY = (uint8_t)0x02, /*!< Interrupt on Falling edge only */
  EXTI_SENSITIVITY_RISE_FALL = (uint8_t)0x03  /*!< Interrupt on Rising and Falling edges */

然后通过函数“enableInterrupts()”开启全局总中断。

最后,进入while(1)死循环。循环是空的,因为LED相关的操作,放进了中断函数里,代码如下:

INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  //按键下降沿判断
  BitStatus bit_status;
  char i = 0;
  bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_3);
  if (bit_status == RESET)  //SET or RESET
  {
    i = 100;
    while(i--);
    bit_status = GPIO_ReadInputPin(GPIOC, GPIO_PIN_3);
    if (bit_status == RESET) 
    {
      GPIO_WriteReverse(GPIOB, GPIO_PIN_4);
    }
  }
}

中断函数里的代码和上一节基本是差不多的,都是判断PC3的管脚高低电平、消抖、翻转PB4。

很简单,打完收工!

要获取该程序完整的工程文件,可以关注公众号:单片机爱好者,然后回复关键词:STM8S。可以获取完整的下载链接,里面包含工程文件、视频、PPT、数据手册等所有相关资料。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据