【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

联系方式:[email protected]

香瓜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文件夹中)

//******************************************************************************                          
//name:             GUA_Key.c             
//introduce:        按键驱动      
//author:           甜甜的大香瓜                   
//email:            [email protected]       
//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:            [email protected]       
//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:            [email protected]       
//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

【STM8L】STM8L之按键中断_第1张图片


4)添加驱动的路径

$PROJ_DIR$\..\USER 

2、添加库的驱动

1)添加库的驱动文件

【STM8L】STM8L之按键中断_第2张图片


3、写中断服务函数(stm8l10x_it.c中)
1)添加头文件
#include "GUA_Key.h"

2)修改中断服务函数

//******************************************************************************              
//name:             EXTI2_IRQHandler             
//introduce:        外部中断2的中断服务函数          
//parameter:        none    
//return:           none           
//author:           甜甜的大香瓜                   
//email:            [email protected]       
//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的中断服务函数中,仿真并全速运行,按下按键后会进入中断

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







你可能感兴趣的:(STM8L)