【STM8L】STM8L之按键中断
本篇博文最后修改时间: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
香瓜BLE之Android群:541462902
暂无
五、基础知识
暂无
六、实验步骤
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);
- }
//******************************************************************************
//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
//******************************************************************************
//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)添加驱动的路径
- PROJDIRPROJ_DIR\..\USER
$PROJ_DIR$\..\USER
2、添加库的驱动
1)添加库的驱动文件
- #include “GUA_Key.h”
#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);
- }
//******************************************************************************
//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”
#include "GUA_Key.h"
2)初始化(main.c的main函数中)
- //按键初始化
- GUA_Key_Init();
//按键初始化GUA_Key_Init();
设置断点在外部中断2的中断服务函数中,仿真并全速运行,按下按键后会进入中断。
注:但一直按着按键会一直进入中断,暂时不明白为何如此。
【STM8L】STM8L之按键中断相关推荐
- hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...
自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...
- SOPC第四课 按键中断
按键 LED控制 开发板 小梅哥AC620 软件 quartus 13.1 2个按键,当按键0按下时,LED灯开始闪烁:当按键1按下时,LED灯停止闪烁. 使用一个PIO 这个PIO设置为6位(4个L ...
- c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...
FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47 来源: 作者: 所属栏目:其他服务端 这里将告诉您FreeRT ...
- Z-Stack通过按键中断实现长按功能
一.功能介绍 项目需要实现长按功能,实现按键有2种方式,一种是通过中断.一种KEY_CHANGE事件轮询的方式.由于中断更加的灵敏,这里选择中断的方式.意外的发现,如果开启了中断,那么按键就不会触发K ...
- 字符设备驱动(四)按键中断
目录 字符设备驱动(四)按键中断 硬件IO 程序设计 中断配置 中断关闭 中断函数 共享中断号 测试 完整的程序 title: 字符设备驱动(四)按键中断 tags: linux date: 2018 ...
- 从ARM裸机看驱动之按键中断方式控制LED(二)
硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...
- 从ARM裸机看驱动之按键中断方式控制LED(一)
硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...
- 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭
实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...
- 应广单片机PFS123按键中断控制数码管显示例程
目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...
- STM32——中断、EXTI、按键中断实验
STM32中断--总结及实操 一.中断是什么? 1.1 中断的含义 1.2 中断的作用(了解即可) 1.3 中断的流程 二.中断资源 2.1 NVIC中断控制器 2.2 NVIC寄存器 三.优先级的概 ...
最新文章
- Cracking the coding interview--Q1.2
- 华为云免费体验 怎么使用_华为云Classroom免费向全国高校开放,云端学习更高效...
- 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向
- 如何让制定的计划实施起来
- docker安装php怎么修改配置,怎么给docker配置内存大小?
- 【转】VS问题集合,不用也要收藏防止以后使用找不到
- python画太极八卦图_太极八卦图的正确画法
- OpenShift 4 - 通过Service的nodePort访问应用
- 使用fastJson把对象转字符串首字母大小写问题的解决
- 大话IT第14期:iOS、Android、Mango 你的选择?
- 有时候,拒绝是为了更好的未来
- 面试如何进行自我介绍
- css3实现div hover阴影效果
- linux vi模式下基本命令和快捷键
- Teamvier提示商业用途限制使用的解决方案
- Python 为何能坐稳 AI 时代头牌语言
- 这个商业模式、盈利模式、谈判技巧值得借鉴!
- 企业vi设计中服装服饰类设计原则
- 移植Linux 3.4.2内核到JZ2440开发板(超精讲)
- IDEA创建JavaFX项目并打包成jar包和exe可执行文件