历史上的今天
返回首页

历史上的今天

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

正在发生

2019年12月03日 | STM8S 长按键识别

2019-12-03 来源:eefocus

最近学习开发STM8S003 MCU,,刚入手这颗MCU,对很多功能不太了解,只能一边开发学习,记录一下学习过程。


目前,需要实现KEY1按键长按3s进行关机,Linux下直接获取按键的开始时间戳和结束时间戳,可以直接确定按键的触发时间,目前MCU采用的是按键中断的方式,在中断触发后直接进入进入中断函数进行处理,根据定时器的特性,现在是采用方法如下: 

将Tim1进行16分频,即频率为1Mhz,然后设置ARR(预装载计数器)为60000,即每次产生溢出时间为60ms, RCR(重复计数寄存器)为50,即 50 * 60 = 3000ms = 3s 后产生一个更新事件,而在按键中断函数中,在按键释放后,判断是否由此更新事件表示,如果有,则判断为按键触发大于3s,即可实现关机功能。


在实际测试过程中,通过打印的方式进行测试,发现并不是准确的3s产生一个更新事件,有时候2s多,有时候3s多,一直没有找到原因,难道是因为内部的时钟不准?感觉这个可能性比较小,现在还在查找原因,如果有了解原因的,麻烦告知一下^_^


代码如下: 

按键配置


#define KEY1_PORT GPIOC


#define KEY1_PIN   GPIO_PIN_3 //KEY1 PC3


#define KEY1  GPIO_ReadInputPin(KEY1_PORT, KEY1_PIN)


GPIO_Init(KEY1_PORT, (GPIO_Pin_TypeDef)KEY1_PIN,GPIO_MODE_IN_PU_IT); //KEY1


TIM1配置


    TIM1_DeInit();

    TIM1_TimeBaseInit(15,TIM1_COUNTERMODE_UP,60000,30);

    TIM1_ARRPreloadConfig(ENABLE);//使能自动重装

    TIM1_Cmd(ENABLE);//开定时器


中断函数


INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

    //key1

    if(RESET == KEY1)

    {

        Delay(50); //按键消抖

        if(RESET == KEY1)                        //确认按下

        {   

                //do something for key1


                key_start_detect();


                while(RESET == KEY1)  //释放检测

                {

                    if (key_stop_detect()) //MODE_SHUT

                    {

                        stop();                                        

                    }  

                }


        }

    }  

}


void key_start_detect()

{

    TIM1_Cmd(DISABLE);

    TIM1_ClearFlag(TIM1_FLAG_UPDATE);

    TIM1_SetCounter(0);  //开始检测,计数清零

    TIM1_Cmd(ENABLE);

}


uint8_t key_stop_detect()

{

    //判断是否有更新事件标志

    if (TIM1_GetFlagStatus(TIM1_FLAG_UPDATE) != RESET)

    {

        TIM1_ClearFlag(TIM1_FLAG_UPDATE);

        return 1;

    }


    return 0;

}


推荐阅读

史海拾趣

Cal Test Electronics公司的发展小趣事

在市场竞争日益激烈的情况下,Cal Test Electronics不断拓展产品线,以满足不同客户的需求。公司研发团队致力于开发具有创新性和竞争力的新产品,同时在现有产品的基础上进行升级和优化。这些努力使得公司的产品线日益丰富,涵盖了七大连接类别中的3000多种产品。这些产品不仅在国内市场上受到欢迎,还逐渐走向国际市场。

北京人民电器厂公司的发展小趣事

北京人民电器厂有限公司,作为北方地区最大的低压电器制造企业,于1995年成功研发出全球首台高分断微型直流断路器。这一创新成果不仅填补了国内空白,更在国际上展现了中国在低压电器领域的研发实力。该断路器的诞生,标志着北京人民电器在直流断路器技术领域迈出了坚实的一步,为后续的产品研发和市场拓展奠定了坚实的基础。

Crowd_Supply__Inc.公司的发展小趣事

在国内市场取得一定成绩后,Crowd Supply Inc.开始将目光投向更广阔的国际市场。公司通过与国外合作伙伴建立战略合作关系、参加国际电子展会等方式,积极拓展海外市场。同时,公司还针对不同国家和地区的市场需求,定制化开发符合当地需求的产品和服务。这些举措不仅为公司带来了新的增长点,也进一步提升了公司在国际电子行业的知名度和影响力。

请注意,以上故事是基于一般性的电子行业公司发展历程和模式进行构想的,并非针对Crowd Supply Inc.的实际情况。如果您需要关于Crowd Supply Inc.的具体故事,建议您查阅相关新闻报道、公司官网或行业分析报告等权威渠道获取更准确的信息。

Aavid Thermalloy公司的发展小趣事

在国内市场取得一定成绩后,Crowd Supply Inc.开始将目光投向更广阔的国际市场。公司通过与国外合作伙伴建立战略合作关系、参加国际电子展会等方式,积极拓展海外市场。同时,公司还针对不同国家和地区的市场需求,定制化开发符合当地需求的产品和服务。这些举措不仅为公司带来了新的增长点,也进一步提升了公司在国际电子行业的知名度和影响力。

请注意,以上故事是基于一般性的电子行业公司发展历程和模式进行构想的,并非针对Crowd Supply Inc.的实际情况。如果您需要关于Crowd Supply Inc.的具体故事,建议您查阅相关新闻报道、公司官网或行业分析报告等权威渠道获取更准确的信息。

CUI Devices公司的发展小趣事

作为CUI Devices的重要组成部分,其电机品牌在近年来取得了显著的进步。公司的产品线涵盖了电位器、旋转编码器、步进电机、步进伺服电机和伺服电机等多个领域。通过不断的技术创新和市场拓展,CUI Devices的电机产品已经在全球范围内赢得了广泛的声誉和市场份额。

DMC Tools公司的发展小趣事

DMC Tools公司深知质量是企业的生命线。因此,公司建立了严格的质量管控体系,从原材料采购到生产加工、再到产品检验,每一个环节都严格把关。这种对质量的执着追求使得DMC Tools公司的产品赢得了客户的广泛信任。许多知名电子企业都选择DMC Tools公司作为他们的长期合作伙伴,这也为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

话题:用3842做的电源电路真正完美的保护方案

用UC3842做的开关电源的典型电路见图1。过载和短路保护,一般是通过在开关管的源极串一个电阻(R4),把电流信号送到3842的第3脚来实现保护。当电源过载时,3842保护动作,使占空比减小,输出电压降低,3842的供电电压Vaux也跟着降低,当低到3842不 ...…

查看全部问答>

请问一下,现在哪种单片机的加密性能好一点?

请问一下,现在哪种单片机或者arm的加密性能好一点呢?最好不能轻易让别人破解的。大家来探讨一下,谢谢。…

查看全部问答>

求一段linux下c语音的源码,可以读出pci设备的各种属性

求一段linux下c语音的源码,可以读出pci设备的各种属性,急需!!…

查看全部问答>

求助!串口发送文件问题?

我在写bootloader,在串口这遇到点麻烦,各位大牛给点意见 我将bootloader分为两个阶段,现在第一阶段差不多完成了,就差实现从串口烧录第二阶段到flash的功能 思路是这样的,在kermit下send boot_sencond.bin,我想问下,在发送完后,boot_sencon ...…

查看全部问答>

请问嵌入式有没有什莫组织?供技术交流。开展活动得?

请问嵌入式有没有什莫组织?供技术交流。开展活动得?…

查看全部问答>

设计过光端机的或做过光纤传输系统的高手请进

想请教一下关于光端机的细节问题!QQ:552112190…

查看全部问答>

请问我的问题算什么开发啊?初学,请指教

我的问题是:我有个硬件可以读取一些数据,硬件上有个按钮,按这按钮后读取后的数据通过硬件上的SIM卡,将数据发送到数据接收端(比如用短信猫接收信息). 现在我需要完成开发涉及的操作是:读取后的数据通过硬件上的SIM卡,将数据发送到数据接收端. 请问 ...…

查看全部问答>

【急问】拉丁文(西班牙语)是否支持7bit编码方式?

请问:拉丁文(西班牙语)是否支持7bit编码方式? 在给客户做一个短信终端,客户要求已7bit编码方式实现拉丁文的短信内容 多谢!…

查看全部问答>

ISE10.1中V4器件太少,是啥原因?

我的ISE是10.1版本的,器件中Virtex4中只有XC4VLX15、XC4VLX25、XC4VSX25、XC4VFX12这几个器件,缺少很多其它的,不知道是怎么回事,请大家帮下忙,应该怎么弄才会出现其它的?我要用到Virtex4中XC4VFX20…

查看全部问答>

发一本公司用的机电一体化教材

首先祝大家新年快乐!希望在新的一年大家都能够一帆风顺,心想事成! 然后弱弱地发一本某公司的内部资料。。。之前发在了百度,后来才发现上面有公司名字,不知道这会不会引起不必要的纠纷啊?  …

查看全部问答>