今天这篇博文主要讲解如何在 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
评论