当前位置:主页 > 查看内容

STM8采用按键的外部中断实验

发布时间:2021-06-08 00:00| 位朋友查看

简介:最近在学习STM8这块单片机但是在网上STM8的资料实在是太少了而且很多东西都比较杂本人今天就STM8外部中断写一点自己的理解如果有误望大佬能指导一下小弟小弟感激不……

最近在学习STM8这块单片机,但是在网上STM8的资料实在是太少了,而且很多东西都比较杂,本人今天就STM8外部中断写一点自己的理解,如果有误,望大佬能指导一下小弟,小弟感激不尽。
我是用的ST官网的STVD开发的STM8,在开始讲解之前,我不得不吐槽一下这个软件,真的是太傻瓜了。好了,咱们言归正传,我是采用的B5这个端口去控制一个LED,D6这个端口作为外部中断输入口。
首先我们肯定要明白我们完成这个实验,需要哪几步来做。1.初始化IO口;2.设置中断模式;3.在中断服务函数中我们要怎么做;4.主函数中的一些函数调用。
这次实验呢我采用了这些头文件

**
#include “stm8s.h”//
#include “stm8s_clk.h”//
#include “stm8s_gpio.h”
#include "stm8s_exti.h"

**

一般我们为了代码的可读性比较高,会采取宏定义的操作。

#define LED_GPIO_PORT (GPIOB)
#define LED_GPIO_PINS (GPIO_PIN_5)//宏定义GPIOB5端口为LED控制
#define Interrupt_GPIO_PORT (GPIOD)
#define Interrupt_GPIO_PINS (GPIO_PIN_6)//宏定义GPIOD6端口****

接下来,我们进行第一步的操作:初始化IO口

GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS,
GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(Interrupt_GPIO_PORT,(GPIO_Pin_TypeDef)Interrupt_GPIO_PINS,GPIO_MODE_IN_PU_IT);

这个操作都是最基本的操作, 在这个头文件有包括**#include “stm8s_gpio.h”,其实就是一个结构体。
接着来,第二步操作
设置中断模式**,我呢把中断这个端口的初始化,还有模式的设置都打包成一个函数。这样做的目的,就是把每个部分成模块的调用,出问题就去一个地方改就行了。

void Buttom_Init(void)
{
GPIO_Init(Interrupt_GPIO_PORT,(GPIO_Pin_TypeDef)Interrupt_GPIO_PINS,GPIO_MODE_IN_PU_IT);
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,EXTI_SENSITIVITY_FALL_ONLY);
}

进入中断之后,我们就应该进行点灯操作,在这时候我们就要操作我们的中断服务函数在哪里了,在这个服务函数中去写自己要做的事。那我们就进行第三步工作在中断服务函数中写对于控制LED的IO口操作,中断服务函数在it.c这个源文件中,但是在进行该操作之前,我们要明白一个事,STM32是有中断标志位的,进入中断后去判断标志位,但是STM8没有中断标志位,我们要去读取我们中断IO的电平变换,利用GPIO_ReadInputPin()这个函数

INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_6)==0)
{
GPIO_WriteHigh(GPIOB, (GPIO_Pin_TypeDef) GPIO_PIN_5);
}

上面三步已经把我们分模块完成的事已经搞定了,那接下来我们就应该在主函数中调用这些模块。在这个地方也有一个坑,STM8设置中断模式的时候,必须要在总中断关闭的情况下去做,如果在之前打开总中断enableInterrupts();,一旦产生一个下降沿,程序就会马上死掉,所以得注意,到处都是细节呀。

void main(void)//
{
disableInterrupts();
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//设置主频
Buttom_Init();
GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS,
GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_WriteLow(LED_GPIO_PORT,(GPIO_Pin_TypeDef) LED_GPIO_PINS);
enableInterrupts();
}

好了,这些差不多就是我对于STM8的一些小小的理解了。

;原文链接:https://blog.csdn.net/qq_45518377/article/details/115563334
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐