历史上的今天
今天是: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;
}
上一篇:stm8 内部EEPROM
史海拾趣
|
用UC3842做的开关电源的典型电路见图1。过载和短路保护,一般是通过在开关管的源极串一个电阻(R4),把电流信号送到3842的第3脚来实现保护。当电源过载时,3842保护动作,使占空比减小,输出电压降低,3842的供电电压Vaux也跟着降低,当低到3842不 ...… 查看全部问答> |
|
我在写bootloader,在串口这遇到点麻烦,各位大牛给点意见 我将bootloader分为两个阶段,现在第一阶段差不多完成了,就差实现从串口烧录第二阶段到flash的功能 思路是这样的,在kermit下send boot_sencond.bin,我想问下,在发送完后,boot_sencon ...… 查看全部问答> |
|
我的问题是:我有个硬件可以读取一些数据,硬件上有个按钮,按这按钮后读取后的数据通过硬件上的SIM卡,将数据发送到数据接收端(比如用短信猫接收信息). 现在我需要完成开发涉及的操作是:读取后的数据通过硬件上的SIM卡,将数据发送到数据接收端. 请问 ...… 查看全部问答> |
|
请问:拉丁文(西班牙语)是否支持7bit编码方式? 在给客户做一个短信终端,客户要求已7bit编码方式实现拉丁文的短信内容 多谢!… 查看全部问答> |
|
我的ISE是10.1版本的,器件中Virtex4中只有XC4VLX15、XC4VLX25、XC4VSX25、XC4VFX12这几个器件,缺少很多其它的,不知道是怎么回事,请大家帮下忙,应该怎么弄才会出现其它的?我要用到Virtex4中XC4VFX20… 查看全部问答> |
|
首先祝大家新年快乐!希望在新的一年大家都能够一帆风顺,心想事成! 然后弱弱地发一本某公司的内部资料。。。之前发在了百度,后来才发现上面有公司名字,不知道这会不会引起不必要的纠纷啊? … 查看全部问答> |




