本篇博文最后修改时间:2017年02月26日,03:17。
一、简介
本文介绍STM8L系列如何使用按键中断,对PB2采用中断下降沿的方式进入中断。
二、实验平台
编译软件:IAR for STM8 1.42.2
硬件平台:stm8l101f3p6开发板
仿真器:ST-LINK
库函数版本:STM8L_STMTouch_Lib_V1.1.0
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、
实验前提
1、在进行本文步骤前,请先
阅读
以下博文:
暂无
2、在进行本文步骤前,请先
实现以下博文:
暂无
五、基础知识
六、实验步骤
1、工程中添加自己写的按键驱动
1)写一个驱动GUA_Key.c (存放在工程的USER文件夹中)
//******************************************************************************
//name: GUA_Key.c
//introduce: 按键驱动
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2017.02.26
//******************************************************************************
#include "stm8l10x.h"
#include "GUA_Key.h"
//******************************************************************************
//name: GUA_Key_Init
//introduce: 按键初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2017.02.26
//******************************************************************************
void GUA_Key_Init(void)
{
//按键IO初始化
GPIO_Init(GUA_KEY_PORT, GUA_KEY_PIN, GUA_KEY_MODE);
//触发方式
EXTI_SetPortSensitivity(GUA_KEY_EXTI_PORT, GUA_KEY_EXTI_SENSITIVITYT);
}
2)写一个 驱动头文件 GUA_Key .h (存放在工程的USER文件夹中)
//******************************************************************************
//name: GUA_Key.h
//introduce: 按键驱动的头文件
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2017.02.26
//******************************************************************************
#ifndef _GUA_KEY_H_
#define _GUA_KEY_H_
/*********************宏定义************************/
//类型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif
#ifndef GUA_8
typedef signed char GUA_8;
#endif
#ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif
#ifndef GUA_16
typedef signed short GUA_16;
#endif
#ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif
#ifndef GUA_32
typedef signed long GUA_32;
#endif
#ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif
#ifndef GUA_64
typedef signed long long GUA_64;
#endif
//按键引脚宏
#define GUA_KEY_PORT GPIOB
#define GUA_KEY_PIN GPIO_Pin_2
#define GUA_KEY_MODE GPIO_Mode_In_PU_IT
//触发方式
#define GUA_KEY_EXTI_PORT EXTI_Port_B
#define GUA_KEY_EXTI_SENSITIVITYT EXTI_Trigger_Falling
/*********************外部函数声明************************/
void GUA_Key_Init(void);
#endif
3)工程中添加 GUA_Key .c
4)添加驱动的路径
$PROJ_DIR$\..\USER
2、添加库的驱动
1)添加库的驱动文件
3、写中断服务函数(stm8l10x_it.c中)
1)添加头文件
#include "GUA_Key.h"
2)修改中断服务函数
//******************************************************************************
//name: EXTI2_IRQHandler
//introduce: 外部中断2的中断服务函数
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜单片机之STM8/STM32(164311667)
//changetime: 2016.11.28
//******************************************************************************
INTERRUPT_HANDLER(EXTI2_IRQHandler, 10)
{
//判断是否被拉低
if(GPIO_ReadInputDataBit(GUA_KEY_PORT, GUA_KEY_PIN) == RESET)
{
//置位功能码
//gGUA_Function = FUNC_GUA_KEY_SHORT_EVENT;
}
//清除中断标志位
EXTI_ClearITPendingBit(EXTI_IT_Pin2);
}
4、应用层中调用
1)添加头文件(main.c中)
#include "GUA_Key.h"
2)初始化(main.c的main函数中)
//按键初始化
GUA_Key_Init();
七、注意事项
暂无。
八、实验结果
设置断点在外部中断2的中断服务函数中,仿真并全速运行,按下按键后会进入中断。
注:但一直按着按键会一直进入中断,暂时不明白为何如此。