本文来源电子发烧友社区,作者:杜潇泊, 帖子地址:https://bbs.elecfans.com/jishu_2009065_1_1.html
开发板OLED板下面有两个按键,上手开发板第一件事肯定是调试输入输出手段。串口几乎不需要调试什么,上手就能用。这个按键就成了第一个下手的目标。
开发板OLED板下面有两个按键,上手开发板第一件事肯定是调试输入输出手段。串口几乎不需要调试什么,上手就能用。这个按键就成了第一个下手的目标。
起初没把这俩按键当回事,以为只是直接接在GPIO上的,顶多设置一下触发点平就行了。拿到原理图才发现,这俩按键居然是这样接的。

也就是说必须使用ADC才能确认按下的是哪一个键。开发板官方给出了OLED板的demo,其中也包含了对屏幕下面两个按键的使用。但是查看代码发现,是使用死循环不断进行ADC转换来捕捉按键操作的。这样做会导致系统功耗上升,并且会持续占用CPU。
其实我们可以更加优雅的使用这俩按键,使用按键终端触发按键事件,再由按键线程完成按键事件的处理。这样做在平时不按按键时,系统CPU处于IDLE状态、ADC也处于停止状态。功耗、CPU都能降下来。甚至你可以配置进入低功耗模式。
代码不多
// 全局信号量,记录按键事件
osSemaphoreId_t g_keySem;
void KeyPressed(char *arg) {
(void)arg;
//释放一个信号量,注意这里是中断上下文,最好别调用太多东西
osSemaphoreRelease(g_keySem);
}
void handlePressKeyTask(void* arg) {
(void)arg;
while(true) {
// 这里去消费按键事件
osStatus_t status = osSemaphoreAcquire(g_keySem,65535);
if(status != 0) {
continue;
}
while(true) {
unsigned short data = 0;
float voltage = (float)data * 1.8 * 4 / 4096;
if(voltage < 0.8f) {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Key1 Pressed!", Font_7x10, White);
ssd1306_UpdateScreen();
} else if(voltage < 2.0f) {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Key2 Pressed!", Font_7x10, White);
ssd1306_UpdateScreen();
} else {
ssd1306_Fill(Black);
ssd1306_SetCursor(0, 0);
ssd1306_DrawString("Released!", Font_7x10, White);
ssd1306_UpdateScreen();
break;
}
}
}
}
void initKey() {
// 端口设置为GPIO
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
// 设置为输入
GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
// 设置在下降沿中断。(其实我想设置下降沿和上升沿中断的,然而接口居然不允许)
osSemaphoreAttr_t semAttr = {
.name = "KeyPressSemi",
.attr_bits = 0,
.cb_mem = NULL,
.cb_size = 0
};
g_keySem = osSemaphoreNew(8, 0, &semAttr);
GpioRegisterIsrFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, KeyPressed, NULL);
// 这里启动一个task处理按键事件
osThreadAttr_t attr;
attr.name = "KeyHandleTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 2048;
attr.priority = osPriorityNormal;
if (osThreadNew(handlePressKeyTask, NULL, &attr) == NULL) {
printf("[%s]Falied to create KeyHandleTask!n", __func__);
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
wi-fi
+关注
关注
15文章
2379浏览量
128891 -
HarmonyOS
+关注
关注
80文章
2146浏览量
35571 -
HiSpark
+关注
关注
1文章
156浏览量
7686
发布评论请先 登录
相关推荐
热点推荐
Microchip WILCS02 Wi-Fi®模块开发板技术解析与应用指南
Microchip Technology WILCS02 Wi-Fi^®^ 链路控制器SD板是一款安全数字 (SD) 卡接口板,支持2.4GHz IEEE^®^ 802.11 b/g/n标准。该
浅谈Wi-Fi 6E与Wi-Fi 7的关键器件——BAW滤波器新技术
作者: Qorvo 亚太区无线连接事业部高级行销经理林健富 2020年1月,Wi-Fi联盟正式宣布开放6GHz频段(5925MHz-7125MHz),并将其命名为Wi-Fi 6E。2020年4月
发表于 09-19 18:29
•1320次阅读
如何在 NuMaker-IoT-M467 板上使用 Arduino IDE 控制 Wi-Fi 模块?
在NuMaker开发板上,有一个ESP-12F Wi-Fi模块;但是,Arduino IDE 中的 NuMaker UNO 包不提供该模块的相关控制。如果您希望在 Arduino IDE 中控制此模块,您应该如何进行?
发表于 09-04 08:28
LitePoint Wi-Fi测试软件减轻客户设计负担
自Wi-Fi 7于一年多前获得Wi-Fi联盟认证以来,作为最新一代通信技术,Wi-Fi正逐步成为用户实现无所不在无线连接的新选择。随着每一代Wi-Fi信号复杂性的提升,建议将硬件测试纳
如何选择合适的芯科科技Wi-Fi开发板
您正在寻找适用于超低功耗物联网应用项目的Wi-Fi 开发板吗?本文将介绍Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗蓝牙5.4解决方案的Wi-Fi
Wi-Fi 8:开启极高可靠性 (UHR) 连接的新纪元——1
英国作家狄更斯在《双城记》的开头写道:“这是最好的时代,也是最坏的时代。”
这句话若套用在现今Wi-Fi 的市场现状,何尝不是惊人的相似?
怎么说呢?Wi-Fi 从被发明至今已经经过了20多年的迭代
发表于 06-13 11:09
Wi-Fi HaLow如何突破传统Wi-Fi性能瓶颈?
视频推荐在万物互联的时代,传统Wi-Fi在覆盖范围、功耗、连接数上渐显不足。而Wi-FiHaLow的诞生,正在用黑科技打破传统Wi-Fi的性能瓶颈!今天,我们一起来探究Wi-FiHaL
基于 Wi-Fi 的定位服务
以下捕获使用 location_wifi_get 函数请求 Wi-Fi 定位服务。该事件的总功耗为 125.85mC,日志显示精确度为 30.0m。
Got location:
method
发表于 04-17 15:16
nRF Cloud Wi-Fi 定位服务
、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通过利用 nRF Cloud 的优化定位算法,基于 Nordic SoC 和 模组的产品可在定位用例
发表于 04-17 15:07
Wi-Fi 定位服务
Wi-Fi 是一种著名的无线网络技术,用于设备的局域网和互联网接入。Wi-Fi 通过 Wi-Fi 网络为家庭、办公室和学校等环境提供便捷的无线互联网接入服务。
Wi-Fi 定位是一种
发表于 04-17 15:01
华为海思正式进入Wi-Fi FEM赛道?
大家都知道了,2018年11 月离开锐迪科(RDA),前往福建晋江创立三伍微,专注于Wi-Fi射频前端芯片,从路由器Wi-Fi FEM,到手机Wi-Fi FEM,再到IoT FEM全覆
发表于 12-11 17:42
摩尔斯微电子发布Wi-Fi HaLow评估套件,加速物联网开发
近日,全球领先的Wi-Fi HaLow解决方案提供商摩尔斯微电子正式推出一款开创性的评估套件——MM6108-EKH05。这款完全整合的开发平台,旨在推动各行业物联网解决方案的快速发展
从Wi-Fi 4到Wi-Fi 7:网速飙升40倍的无线革命
1 Wi-Fi技术的快速发展 每一代新的Wi-Fi协议发布,都会带来更高的无线速率。 从Wi-Fi 4到Wi-Fi 7:无线网络技术显著提升,实现了网速的巨大飞跃。

【HarmonyOS HiSpark Wi-Fi IoT 套件试用连载】更加优雅的使用OLED板的按键
评论