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

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

[cpp] view plain copy
print ?
  1. //******************************************************************************                            
  2. //name:             GUA_Key.h               
  3. //introduce:        按键驱动的头文件        
  4. //author:           甜甜的大香瓜                     
  5. //email:            [email protected]         
  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. //类型宏    
  14. #ifndef GUA_U8            
  15. typedef unsigned char GUA_U8;            
  16. #endif        
  17.     
  18. #ifndef GUA_8            
  19. typedef signed char GUA_8;            
  20. #endif          
  21.           
  22. #ifndef GUA_U16            
  23. typedef unsigned short GUA_U16;            
  24. #endif     
  25.     
  26. #ifndef GUA_16            
  27. typedef signed short GUA_16;            
  28. #endif             
  29.           
  30. #ifndef GUA_U32            
  31. typedef unsigned long GUA_U32;            
  32. #endif     
  33.     
  34. #ifndef GUA_32            
  35. typedef signed long GUA_32;           
  36. #endif    
  37.     
  38. #ifndef GUA_U64        
  39. typedef unsigned long long GUA_U64;      
  40. #endif    
  41.     
  42. #ifndef GUA_64        
  43. typedef signed long long GUA_64;      
  44. #endif    
  45.   
  46. //按键引脚宏  
  47. #define GUA_KEY_PORT                    GPIOB  
  48. #define GUA_KEY_PIN                     GPIO_Pin_2  
  49. #define GUA_KEY_MODE                    GPIO_Mode_In_PU_IT  
  50.   
  51. //触发方式  
  52. #define GUA_KEY_EXTI_PORT               EXTI_Port_B  
  53. #define GUA_KEY_EXTI_SENSITIVITYT       EXTI_Trigger_Falling  
  54.   
  55. /*********************外部函数声明************************/     
  56. void GUA_Key_Init(void);  
  57.   
  58. #endif  
//******************************************************************************                          
//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



4)添加驱动的路径

[cpp] view plain copy
print ?
  1. PROJDIR\..\USER   
$PROJ_DIR$\..\USER 

2、添加库的驱动

1)添加库的驱动文件



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

2)修改中断服务函数

[cpp] view plain copy
print ?
  1. //******************************************************************************                
  2. //name:             EXTI2_IRQHandler               
  3. //introduce:        外部中断2的中断服务函数            
  4. //parameter:        none      
  5. //return:           none             
  6. //author:           甜甜的大香瓜                     
  7. //email:            [email protected]         
  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.   //清除中断标志位  
  21.   EXTI_ClearITPendingBit(EXTI_IT_Pin2);  
  22. }  
//******************************************************************************              
//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中)

[cpp] view plain copy
print ?
  1. #include “GUA_Key.h”  
#include "GUA_Key.h"

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

[cpp] view plain copy
print ?
  1. //按键初始化  
  2. GUA_Key_Init();  
  //按键初始化
  GUA_Key_Init();

七、注意事项
暂无。

八、实验结果

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

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







你可能感兴趣的:(STM8,函数,STM8L101F3)