最近入手了几块9.9元的Neptune开发板,可以运行OpenHarmony,在官方移植的OpenHarmony1.0版本中给了这么一个lowpower的例程:
#include <stdio.h>
#include <unistd.h>
#include "cmsis_os2.h"
#include "lowpower.h"
#include "ohos_init.h"
#define LP_TASK_STACK_SIZE 512
#define LP_TASK_PRIO 25
// USE PA0 High level to wakeup
static void* LowpowerTask(const char* arg)
{
(void)arg;
static int i = 0;
printf("enter LowpowerTask\n");
while (1) {
if (i == 0) {
i++;
LpcSetType(LIGHT_SLEEP);
} else
{
LpcSetType(DEEP_SLEEP);
}
osDelay(500);
}
}
static void LowpowerExampleEntry(void)
{
osThreadAttr_t attr;
LpcInit();
attr.name = "LowpowerTask";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = LP_TASK_STACK_SIZE;
attr.priority = LP_TASK_PRIO;
if (osThreadNew((osThreadFunc_t)LowpowerTask, NULL, &attr) == NULL) {
printf("[LowpowerExample] Falied to create LowpowerTask!\n");
}
}
SYS_RUN(LowpowerExampleEntry); // if test add it
这边有一句注释“// USE PA0 High level to wakeup”告诉我们给PA0这个引脚高电平来唤醒,但是我从板子背面的丝印找不到PA0这个引脚,遂查阅官方给出的原理图:
可以看到,PA0这个引脚是没有引出的,于是我尝试对板子上的这个引脚加高电平,屁用没有。反复测试多次,最后得出结论:这个引脚啥都没接。
遂查阅w800的芯片手册
我们可以看到,pin3就是wakeup引脚,也就是说这个芯片是有wakeup引脚的,但是为什么从PA0唤不醒呢,到这里差不多可以判断,wakeup引脚没有引出到板子上的PA0引脚。
于是把屏蔽盖拆开一探究竟
破案了,wakeup引脚是悬空的,根本没引出来。
于是尝试给这个引脚加高电平唤醒。
这时候还发现它了旁边的pin4是reset_n引脚,在工作状态下是保持高电平,也就是说只要把pin3和pin4短接一下就可以了。拿了根杜邦线试了一下,成功唤醒。
那么,到这里还有一个困扰我的问题:为什么PA0是空的,wakeup也是空的,却不把两个脚接到一起呢?还请懂行的朋友替我解惑一下
--------完--------