大家好,我是单片机爱好者-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、数据手册等所有相关资料。