最近在学习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的一些小小的理解了。
本文转载自微信公众号「Linux开发那些事儿」,作者 LinuxThings 。转载本文请联...
前言 aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的...
2月26日消息 众所周知,Windows 10 的安全更新和其他重要累计更新通常是在同一天...
继 Australis 和 Photon 之后,Mozilla 现又酝酿为 Firefox 带来名为Proton的全...
console.log ,作为一个前端开发者,可能每天都会用它来分析调试,但这个简单函...
不少Windows 10用户之前都抱怨一个问题,那就是系统的屏幕出现了渲染问题,而微...
简介 “ 大家好我是帅哥欢迎来到帅哥的程序人生我会把经历分享出来助你了解圈内...
一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候...
互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB。我们针对互联...
开发过程中,我们经常会遇到代码回滚的情况。正常人都知道,git 回滚有两大宝: ...