NxH3670 ADK 定时器的应用:呼吸灯、按键长短按的实现

  今天这篇博文主要讲解如何在 NxH3670 ADK Headset 中通过定时器实现呼吸灯以及按键的长短按判断。
  文中我们使用到的工程版本是 ADK 8.0。软件包可以在 NXP 的官网下载,网址链接:https://www.nxp.com.cn/search?keyword=nxH3670&start=0

一、 呼吸灯

1、在本篇博文中主要使用 PWM 和定时器来实现呼吸灯的效果,通过定时改变 PWM 的占空比就可以现实呼吸灯的效果,首先将想要实现呼吸灯功能的引脚初始化,配置为 PWM 功能。

     

2.、接下来在 ui_ADK.c 中UI_Init(void) 函数里添加写好的 PWM 初始化函数。

    

3、在 ADK Headset 工程中,提供了封装好的定时器函数,所以可以直接调用定时器函数来实现具体的功能,使用之前,在 ui_ADK.c 中,先定义一个新的定时器。

   

4、接下来我们在 UI_Init(void) 函数中对定时器进行初始化,并启动定时器,定时时间为15ms。

    

5、可以看到在初始化的时候填入的第二个参数,breathing_LEDTimerCb,这里的这个函数将会在定时器定时结束时调用,对应的在 ui_ADK.c 中添加这个函数的定义和内容,最终将会在 breathing_LED 这个函数中去改变 PWM 的占空比。需要注意的是要在 breathing_LEDTimerCb 函数中继续开启新一轮的定时器,使定时效果持续,如果需要关闭定时器则可以调用 FRAMEWORK_StopTimer(&breathing_LEDTimer);

   

6、继续在 ui_ADK.c 中 添加 breathing_LED 函数的内容,将在这个函数中更新 PWM 的占空比。

   


二、 按键长短按

1、按键长按和短按的判断,同样是可以通过定时器来实现,所以第一步需要在 app_evt_handlers.c 中,定义一个新的定时器。

   

2、接下来在 APP_InitAdvTimer(void) 函数中对定时器进行初始化,但是不需要在这里开启定时器。

   

3、同样的初始化函数中传入的第二个参数为定时器的回调函数,对应的在app_evt_handlers.c 中添加 Key_detectTimerCb 函数的定义和内容,在函数中会启动一个200ms 的定时器,最后在 Key_detectCb 中通过累计按键按下的时间来判断按下的情况。

   

4、Key_detectCb 函数的内容如下,这里通过变量 perssTime 来累计按下的时间。

   

5、最后就只需要在 APP_UiEventHandler(ui_event_t event, void *ctxt) 函数中触发对应的事件时启动按键判断的定时器,这里只需要 50ms 用于检测按键单击。

   

  以上就是今天实现的两个功能,大家还可以发散自己的思维实现更多的应用,如果在操作的过程中有什么问题欢迎留言讨论,谢谢大家。




参考资料:

[1] UM11150 user manual            — NxH3670 SDK board; 2019, NXP Semiconductors

[2] NXH3670UK                              — NxH3670  data sheet; 2019, NXP Semiconductors

[3] KL27P64M48SF2                       — KL27 data sheet; 2019, NXP Semiconductors

 

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

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

评论