×
嵌入式 > 技术百科 > 详情

STM8L之按键中断

发布时间:2021-04-19 发布时间:
|

简介


本文介绍STM8L系列如何使用按键中断,对PB2采用中断下降沿的方式进入中断。


实验平台


编译软件:IAR for STM8 1.42.2


硬件平台:stm8l101f3p6开发板


仿真器:ST-LINK


库函数版本:STM8L_STMTouch_Lib_V1.1.0


实验步骤


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的中断服务函数中,仿真并全速运行,按下按键后会进入中断。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ZigBee技术语音图像无线监控系统的设计与实现