历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2019年12月17日 | STM8L之按键中断

2019-12-17 来源:eefocus

简介


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

推荐阅读

史海拾趣

Excelight Communications Inc公司的发展小趣事

Excelight Communications Inc公司成立于XX世纪初,当时正值通信技术飞速发展的时代。创始人李明(化名)是一位电子工程专家,他对光通信技术有着浓厚的兴趣。在创办公司之前,李明曾在一家大型通信企业工作,积累了丰富的技术和管理经验。他发现市场上对于高速、高效的光通信产品有着巨大的需求,于是决定创立Excelight,专注于研发和生产光通信模块和设备。

创业初期,Excelight面临着资金、技术和市场等多方面的挑战。李明带领团队日夜兼程,不断攻克技术难关,同时积极寻找合作伙伴和投资人。经过几年的努力,Excelight逐渐在市场上崭露头角,其光通信产品因性能优越、价格合理而受到了客户的广泛好评。

Fascomp公司的发展小趣事

随着公司规模的扩大,Fascomp开始关注更广阔的市场。公司针对智能手机市场推出了一款低功耗、高性能的处理器,迅速在市场上获得了成功。同时,公司还不断推出新的产品线,如平板电脑专用芯片、物联网设备等,以满足不同客户的需求。这些创新举措使Fascomp在激烈的市场竞争中脱颖而出。

得倍(DBIC)公司的发展小趣事

倍(DBIC)公司自创立之初,就致力于在电子行业中进行技术创新。公司投入大量资源进行研发,成功推出了一系列具有革命性的产品,如高效能芯片和智能传感器。这些产品不仅提高了生产效率,还满足了市场对智能化、高效能电子产品的需求。随着技术的不断进步,倍(DBIC)公司逐渐在行业中树立了技术领先的形象,吸引了众多合作伙伴和客户。

兵字(BingZi)公司的发展小趣事

随着公司规模的不断扩大和产品线的日益丰富,兵字公司开始注重品牌建设和市场拓展。公司注册了“BingZi兵字”商标,并通过一系列的市场推广活动,提升了品牌的知名度和美誉度。同时,兵字公司还积极开拓国内外市场,与多家知名企业建立了长期稳定的合作关系,实现了业务的快速增长。

GSI Technology公司的发展小趣事

进入21世纪后,GSI Technology继续加大研发投入,不仅巩固了其在SRAM领域的领先地位,还成功扩展了产品线,包括同步突发SRAM、无总线周转SRAM等。同时,公司还推出了SigmaRAM、SigmaQuad、SigmaQuad II等系列产品,这些产品以其卓越的性能、高可靠性和低功耗特性,赢得了市场的广泛认可。此外,GSI还致力于提供超长产品支持生命周期和完整的售前售后服务,进一步增强了客户粘性。

常州能动(ENDRIVE)公司的发展小趣事

常州能动(ENDRIVE)公司自创立之初,就将技术创新作为公司发展的核心驱动力。在公司发展的早期阶段,研发团队成功开发出一款高效能、低能耗的电源管理芯片,这一创新产品在市场上引起了广泛关注。通过不断的技术迭代和优化,这款芯片的性能逐渐提升,成本逐渐降低,成为了公司的明星产品,为公司的快速发展奠定了坚实基础。

问答坊 | AI 解惑

不需零线的三相交流源相序检测保护器集成电路TH221A

介绍了不需零线的三相交流电源相序检测保护集成电路TH221A的内部结构,引脚功能,设计特点和参数限制.给出了由两只TH221A组成的三相二重逆变桥输出的缺相和错相保护电路. …

查看全部问答>

RISC单片机的特点

作者:邓宏杰先生 在MCU开发方面,以架构而言,可分为两大主流;RISC(Reduced Instruction Set Computer)与CISC(Complex Instruction Set Computer), RISC代表MCU的所有指令都是利用一些简单的指令组成的,简单的指令代表 MCU 的线路可以尽量做到最佳 ...…

查看全部问答>

关于薄膜键盘接口

我们订做了一个薄膜键盘,有N多线出来,怎么把这些线转换为PS/2接口?需要加什么东西么?…

查看全部问答>

c# 汉字 内码

c#下: array[0] = (byte)t1; string ch = System.Text.Encoding.Default.GetString(array); //字节解码成汉字... wince下 没有GetString()方法; 请问一下,wince下怎么将内码转换成汉字??…

查看全部问答>

崩溃了,这没有串口的笔记本编程咋整啊?

笔记本没串口,要向板子写程序,买了根USB转串口的线。 烧51程序时,直接接在板子的9针串口没问题。但一块板子是用PS/2的,于是多接一根,USB-232  232-PS/2,烧写就失败了。 还有,用超级终端和一块ARM板通信时,返回的都是乱码,到 ...…

查看全部问答>

单片机初学者必读

   单片机是一门实践性非常强的学科,没有实践一切都是“空中楼阁”,花点钱买块开发板是非常必要的。(“开发板就好比农民种地的种子,只要能合理利用,它便会生根发芽,最后定能收获丰盛的果实。想要种好地,不要不舍得去买好种子”。 ...…

查看全部问答>

请问在大连目前这些嵌入式系统学习哪个比较好找工作?

   我是做APS.Net的,用的是C#,但是我对嵌入式系统的开发产生了浓厚的兴趣,想转投这个行业,看了看有C、C++、WinCE、嵌入式Linux、VxWorks等,请问这些哪个比较容易上手?在大连搞嵌入式开发的公司里面用哪个的比较多一些?…

查看全部问答>

WINCE下SHFileOperation支持多文件复制吗?

如题,要做个类似资源管理器的程序 实现一些文件操作 当多选文件进行复制时,SHFileOperation还支持吗 有做过的指点下. 顺便问下  复制时好像阻塞在那,不能进行其他操作 怎么回事呢…

查看全部问答>

有谁研究过歌乐CD机I2C通信协议,请求交流~~~~~~~~~~~~~~~~

有谁研究过歌乐CD机I2C通信协议,请求交流~~~~~~~~~~~~QQ :31498421…

查看全部问答>

烧写2812 FLASH 遇到问题

我现在烧写2812 CE 的FLASH时,MC/MP置1,SCITXDA=1, 烧写FLASH 时,但烧写界面的右半面灰掉,无法选中进行烧些,左面的加密,部分界面却可以进行操作 ,只有UNLOCK键灰掉无法使用,但按UNLOCK键,总提示UNLOCK 失败,请问是什么原因?是否需要在插 ...…

查看全部问答>