本篇博文最后修改时间: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. 机器学习(5)降维 -- 特征选择(低方差过滤与相关系数)与主成分分析(PCA降维)
  2. 归并排序 java实现_归并排序的java实现
  3. 关系型数据库 和 非关系型数据对比 以及 MySQL与Oracle对比
  4. 庆祝Dojo中文博客成为CSDN博客专家!
  5. 羊车门问题python_羊车门问题(示例代码)
  6. 效率最高的Excel数据导入续---SSIS Package包制作图解全过程
  7. sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行
  8. can是什么时候处于显性_can总线通信原理 显性
  9. iOS 关于布局问题的一些认识
  10. VSCode 上竟然也能约会,谈对象了???
  11. UIBlock 按钮图片设置
  12. 郭克华老师java视频教程下载地址
  13. 《深入浅出Python》2 共享你的代码
  14. 使用Python PyQt5实现一个简单的图像识别软件
  15. Adobe Dreamweaver CC完美补丁amtlib.dll 解决进程CPU占用高问题
  16. 一种低成本动态扩展 Java API 的解决方案 - Ricequant米筐量化
  17. OpenGL 驱动 与 扩展的关系
  18. 16、react 中的高阶函数和柯里化
  19. VMware如何克隆一个虚拟机
  20. 知道创宇研发技能列表v3.0

热门文章

  1. 关于质性分析软件NVivo更新的问题
  2. dos2unix整个目录
  3. ffmpeg和JavaCV
  4. 千套多行业多样式单页多页中英文简历模板(自荐信,简历封面,求职),共630M
  5. selenium 下载
  6. K3 Cloud 常用数据表整理
  7. R语言时间序列分析常用步骤
  8. 腾讯云服务器如何开启虚拟化,腾讯云服务器虚拟化驱动是什么
  9. BIM信息化综合管理运营平台、BIM模型、数据首页、工单管理、建设建筑、工单信息、设备管理、工地、设备台账、运维标准、巡检管理、巡检计划、巡检任务、维保管理、能耗管理、3d模型、文档管理、工作日报
  10. 高速PCB设计注意事项