WCH沁恒单片机
直播中

刘燕

7年用户 1357经验值
私信 关注
[问答]

CH582低功耗模试GPIO唤醒问题如何处理?

版本信息:

CH58x_BLE_LIB_V1.30                                                                                                         
MESH_LIB_V1.5      
配置信息:

// relay功能
#define CONFIG_BLE_MESH_RELAY                  0
// 代理功能
#define CONFIG_BLE_MESH_PROXY                  0
// GATT层配网功能
#define CONFIG_BLE_MESH_PB_GATT                0
// FLASH存储功能
#define CONFIG_BLE_MESH_SETtiNGS               1
// 朋友节点功能
#define CONFIG_BLE_MESH_FRIEND                 0
// 低功耗节点功能
#define CONFIG_BLE_MESH_LOW_POWER              1
// config模型客户端功能
#define CONFIG_BLE_MESH_CFG_CLI                0
// health模型客户端功能
#define CONFIG_BLE_MESH_HLTH_CLI               0


开启了GPIO唤醒功能:

中断处理:



问题:
    GPIO产生中断可能正常进入,但打印不正常,打印的是乱码,并且tmos的事件不处理。但再按一个键,打印就正确了。做一个5S的定时器,定时器一到,这个TMOS事件就会处理。即第一次错,第二次正确,第三次错,第四次正确。
下图中的打印信息,红色线是第一次中断产生的,红色线以下是第二次打印的,第二次正确了。

  
  测得打印输出的波特率偏低,在中断内加延时后,打印的数据正确了。但TMOS事件还是不会处理。
  

回帖(2)

谷菁

2022-9-21 09:54:09
从你描述的这个现象,应该是调用的协议栈的睡眠,第一次按键唤醒后又进入了idle模式,按键第二次才会唤醒,另外tmos任务是禁止在中断中调用的,可以在中断中置一个标志,在主循环中查询标志来调用任务。
举报

郭金

2022-9-21 09:54:21
我们的协议栈使用的是rtc唤醒的方式,在等待晶体起振的时候,使用idle模式能够进一步降低功耗,如果使用gpio中断的方式唤醒,可以调用相应时间的延时来等待晶体起振,大概在1.5ms左右,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分