中科蓝讯 PWRKEY(PB5)引脚功能总结

    哈喽,大家好。

    今天总结一下我遇到的 PWKKEY(PB5)引脚的功能,在我的上一篇博文《中科蓝讯 SDK 开发 PWRKEY 功能》中从应用的度介绍了 PWKKEY(PB5)的按键功能,本博文会对 PWKKEY(PB5)的按键功能做补充,并介绍一下其他 PWKKEY(PB5)引脚的其他应用,以下内容统称为 PWRKEY。希望在遇到类似的情况时可以帮助到大家。

1、PWRKEY 长按 N 秒事件生成

     1)注意,使用本示例做长按 N 秒事件的按键不可以串联电阻,如下图,S2 可以做长按 N 秒事件,S3、S4 不可以;

    

     2)参考 RTC Control Register 的第 19 位 RTCWKP 可知,该位可以用于判断 RTC WK pin state,也就是 PWRKEY 的高低电平状态。当 PWRKEY 检测到低电平时,该位的值为 0;当 PWRKEY 检测到高电平时,该位的值为 1。

    3)代码实现

    ① 定义一个用于计时的全局变量

    

生成 N 秒事件的函数最终是放在 5ms 中断处理函数 void usr_tmr5ms_thread(void) 中的,因此长按事件的计时变量可以定义成与 tmr5ms_cnt 相同的类型。

    ② 定义 N 秒队列信息宏

    

    注意,EVT_2S 值的范围是 0x700 ~ 0x7ff。

    ③ 生成N 秒时间的函数(此处以 2s 做示例)

    

    AT(.com_text.bsp.key) 这句话是必不可少的,因为函数 void pwrkey_pressed_2s_evt(void) 最终需要在 5ms 中断处理函数里调用。 IS_PWRKEY_PRESS() 条件若为真,则代表 PWRKEY 读取到低电平,按键按下。pwrkey_5ms_count 值为 400时,则 5ms*400 = 2000ms,代表按键按下时间为 2s,大家可以通过改变 if 判断中 pwrkey_5ms_count 的值来改变按键长按的时间。msg_enqueue(EVT_2S) 用于生成 2s 事件。

    ④ 生成 2s 事件函数的调用位置

    



    ⑤ 队列消息处理函数处理 2s 事件

    

2、PWRKEY 硬开关

    PWRKEY 硬开关指的是 PWRKEY 不串联电阻,接自锁开关(原理图相当于 1 中的 s2 换成自锁开关),以读取到的电平来控制开关机(利用的也是 1 中 RTC Control Register 的原理)。SDK 中的实现方法如下:

    ① 只要用到 PWRKEY 做按键功能都要使能以下宏:

    


    ② 关闭 setting 工具中 PWREKY 功能:

    

    注意,这个 PWRKEY 功能和 ① 中宏不是同一个功能,这个 PWRKEY 功能是和 PWRKEY 硬开关是并列的两个功能,只有使能 ① 中的宏(相当于总开关),才能使能这两个功能。又因为这两个功能是并列的,为排除干扰,在使用 PWRKEY 硬开关的时候,应把 PWRKEY 功能关闭。

    ③ 打开 PWRKEY 硬开关宏,使能 PWRKEY 模拟硬开关

    

    ④ PWRKEY 硬开关处理函数

    

    软开机模拟硬开关,松开PWRKEY就关机。

3、PWRKEY 作为输出引脚

   使用函数 void powerkey_out_set(bool high) 可以把 PWRKEY 引脚配置为输出引脚;使用这个函数之前先声明一下,可以直接调用这个函数来让 pwrkey 来输出高低电平,输出高时电压为 2V 左右。

    

    PWRKEY 引脚的功能就介绍到这里,希望可以帮到大家,若有发现 PWRKEY 引脚的其他应用,欢迎分享讨论。如有错误欢迎大家批评指正。如果大家还有什么其他的问题或者功能想要询问,亦可以在评论区中提出,可以共同探讨,一起进步。

参考文档:

1、中科蓝讯蓝皮书

2、BT892X DataSheet.pdf

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论