本篇博文最后修改时间: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

香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、实验前提
1、在进行本文步骤前,请先阅读以下博文:
暂无

2、在进行本文步骤前,请先实现以下博文:

暂无

五、基础知识

暂无

六、实验步骤

1、工程中添加自己写的按键驱动

1)写一个驱动GUA_Key.c (存放在工程的USER文件夹中)

[cpp] view plaincopyprint?
  1. //******************************************************************************
  2. //name:             GUA_Key.c
  3. //introduce:        按键驱动
  4. //author:           甜甜的大香瓜
  5. //email:            897503845@qq.com
  6. //QQ group          香瓜单片机之STM8/STM32(164311667)
  7. //changetime:       2017.02.26
  8. //******************************************************************************
  9. #include “stm8l10x.h”
  10. #include “GUA_Key.h”
  11. //******************************************************************************
  12. //name:             GUA_Key_Init
  13. //introduce:        按键初始化
  14. //parameter:        none
  15. //return:           none
  16. //author:           甜甜的大香瓜
  17. //email:            897503845@qq.com
  18. //QQ group          香瓜单片机之STM8/STM32(164311667)
  19. //changetime:       2017.02.26
  20. //******************************************************************************
  21. void GUA_Key_Init(void)
  22. {
  23. //按键IO初始化
  24. GPIO_Init(GUA_KEY_PORT, GUA_KEY_PIN, GUA_KEY_MODE);
  25. //触发方式
  26. EXTI_SetPortSensitivity(GUA_KEY_EXTI_PORT, GUA_KEY_EXTI_SENSITIVITYT);
  27. }

//******************************************************************************
//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文件夹中)

[cpp] view plaincopyprint?
  1. //******************************************************************************
  2. //name:             GUA_Key.h
  3. //introduce:        按键驱动的头文件
  4. //author:           甜甜的大香瓜
  5. //email:            897503845@qq.com
  6. //QQ group          香瓜单片机之STM8/STM32(164311667)
  7. //changetime:       2017.02.26
  8. //******************************************************************************
  9. #ifndef _GUA_KEY_H_
  10. #define _GUA_KEY_H_
  11. /*********************宏定义************************/
  12. //类型宏
  13. #ifndef GUA_U8
  14. typedef unsigned char GUA_U8;
  15. #endif
  16. #ifndef GUA_8
  17. typedef signed char GUA_8;
  18. #endif
  19. #ifndef GUA_U16
  20. typedef unsigned short GUA_U16;
  21. #endif
  22. #ifndef GUA_16
  23. typedef signed short GUA_16;
  24. #endif
  25. #ifndef GUA_U32
  26. typedef unsigned long GUA_U32;
  27. #endif
  28. #ifndef GUA_32
  29. typedef signed long GUA_32;
  30. #endif
  31. #ifndef GUA_U64
  32. typedef unsigned long long GUA_U64;
  33. #endif
  34. #ifndef GUA_64
  35. typedef signed long long GUA_64;
  36. #endif
  37. //按键引脚宏
  38. #define GUA_KEY_PORT                    GPIOB
  39. #define GUA_KEY_PIN                     GPIO_Pin_2
  40. #define GUA_KEY_MODE                    GPIO_Mode_In_PU_IT
  41. //触发方式
  42. #define GUA_KEY_EXTI_PORT               EXTI_Port_B
  43. #define GUA_KEY_EXTI_SENSITIVITYT       EXTI_Trigger_Falling
  44. /*********************外部函数声明************************/
  45. void GUA_Key_Init(void);
  46. #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)添加驱动的路径

[cpp] view plaincopyprint?
  1. PROJDIRPROJ_DIR\..\USER
$PROJ_DIR$\..\USER 

2、添加库的驱动

1)添加库的驱动文件

3、写中断服务函数(stm8l10x_it.c中)
1)添加头文件
[cpp] view plaincopyprint?
  1. #include “GUA_Key.h”
#include "GUA_Key.h"

2)修改中断服务函数

[cpp] view plaincopyprint?
  1. //******************************************************************************
  2. //name:             EXTI2_IRQHandler
  3. //introduce:        外部中断2的中断服务函数
  4. //parameter:        none
  5. //return:           none
  6. //author:           甜甜的大香瓜
  7. //email:            897503845@qq.com
  8. //QQ group          香瓜单片机之STM8/STM32(164311667)
  9. //changetime:       2016.11.28
  10. //******************************************************************************
  11. INTERRUPT_HANDLER(EXTI2_IRQHandler, 10)
  12. {
  13. //判断是否被拉低
  14. if(GPIO_ReadInputDataBit(GUA_KEY_PORT, GUA_KEY_PIN) == RESET)
  15. {
  16. //置位功能码
  17. //gGUA_Function = FUNC_GUA_KEY_SHORT_EVENT;
  18. }
  19. //清除中断标志位
  20. EXTI_ClearITPendingBit(EXTI_IT_Pin2);
  21. }
//******************************************************************************
//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中)

[cpp] view plaincopyprint?
  1. #include “GUA_Key.h”
#include "GUA_Key.h"

2)初始化(main.c的main函数中)

[cpp] view plaincopyprint?
  1. //按键初始化
  2. GUA_Key_Init();
  //按键初始化GUA_Key_Init();
七、注意事项
暂无。
八、实验结果

设置断点在外部中断2的中断服务函数中,仿真并全速运行,按下按键后会进入中断。

注:但一直按着按键会一直进入中断,暂时不明白为何如此。

【STM8L】STM8L之按键中断相关推荐

  1. hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...

    自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...

  2. SOPC第四课 按键中断

    按键 LED控制 开发板 小梅哥AC620 软件 quartus 13.1 2个按键,当按键0按下时,LED灯开始闪烁:当按键1按下时,LED灯停止闪烁. 使用一个PIO 这个PIO设置为6位(4个L ...

  3. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  4. Z-Stack通过按键中断实现长按功能

    一.功能介绍 项目需要实现长按功能,实现按键有2种方式,一种是通过中断.一种KEY_CHANGE事件轮询的方式.由于中断更加的灵敏,这里选择中断的方式.意外的发现,如果开启了中断,那么按键就不会触发K ...

  5. 字符设备驱动(四)按键中断

    目录 字符设备驱动(四)按键中断 硬件IO 程序设计 中断配置 中断关闭 中断函数 共享中断号 测试 完整的程序 title: 字符设备驱动(四)按键中断 tags: linux date: 2018 ...

  6. 从ARM裸机看驱动之按键中断方式控制LED(二)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...

  7. 从ARM裸机看驱动之按键中断方式控制LED(一)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...

  8. 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭

    实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...

  9. 应广单片机PFS123按键中断控制数码管显示例程

    目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...

  10. STM32——中断、EXTI、按键中断实验

    STM32中断--总结及实操 一.中断是什么? 1.1 中断的含义 1.2 中断的作用(了解即可) 1.3 中断的流程 二.中断资源 2.1 NVIC中断控制器 2.2 NVIC寄存器 三.优先级的概 ...

最新文章

  1. Cracking the coding interview--Q1.2
  2. 华为云免费体验 怎么使用_华为云Classroom免费向全国高校开放,云端学习更高效...
  3. 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向
  4. 如何让制定的计划实施起来
  5. docker安装php怎么修改配置,怎么给docker配置内存大小?
  6. 【转】VS问题集合,不用也要收藏防止以后使用找不到
  7. python画太极八卦图_太极八卦图的正确画法
  8. OpenShift 4 - 通过Service的nodePort访问应用
  9. 使用fastJson把对象转字符串首字母大小写问题的解决
  10. 大话IT第14期:iOS、Android、Mango 你的选择?
  11. 有时候,拒绝是为了更好的未来
  12. 面试如何进行自我介绍
  13. css3实现div hover阴影效果
  14. linux vi模式下基本命令和快捷键
  15. Teamvier提示商业用途限制使用的解决方案
  16. Python 为何能坐稳 AI 时代头牌语言
  17. 这个商业模式、盈利模式、谈判技巧值得借鉴!
  18. 企业vi设计中服装服饰类设计原则
  19. 移植Linux 3.4.2内核到JZ2440开发板(超精讲)
  20. IDEA创建JavaFX项目并打包成jar包和exe可执行文件

热门文章

  1. Web程序设计大作业
  2. 【Axure交互教程】拖动滑块确定评分区间效果
  3. 机电工程专业技术-测量技术
  4. smartsvn基本操作
  5. webpower中国区受邀出席2014梅花网中国传播业大展
  6. php修改头像接口,php如何修改头像?
  7. 考研经验-东南大学软件学院软件工程(这些基础课和专业课的各种坑和复习技巧你应该知道)
  8. wps下一步快捷键_wps后退前进快捷键是什么?
  9. python实现bt下载器_10行 Python代码使用磁力链接批量下载种子
  10. 漫画 | 前端发展史的江湖恩怨情仇