基于CH592蓝牙Peripheral例程改的,增加了一个Timer定时,在中断程序中做GPIO管脚的高低电平转换。为了功耗将HAL_SLEEP打开了,功耗是降下来了,GPIO管脚就一直是高电平,没有变化。感觉像是没有进入中断。不知道是什么问题呢
找到了一个其他地方的回复“芯片睡眠时主频是不工作的,定时器是依赖主频工作的,可以使用tmos任务来实现一些定时任务。”那ADC中断、GPIO中断会受到休眠的影响么?GPIO中断貌似需要加入“SetSysClock(CLK_SOURCE_PLL_60MHz); mDelaymS(1);” ADC中断需要什么特别处置么?或者说都通过tmos任务来更合适?
您好,sleep休眠期间,只有RTC唤醒(从内部唤醒)、GPIO唤醒(外部触发唤醒)两种途径唤醒。
RTC本身是基于32K时钟运行的;GPIO在用作唤醒时,也是异步的不依赖32M时序的。
TMOS事件中的代码是可以在RTC唤醒后执行的,此时主频已运行稳定。
GPIO中断的运行需要32M时序提供主频,前提是在唤醒后,32M晶振已经工作稳定。不用再手动添加“SetSysClock(CLK_SOURCE_PLL_60MHz); mDelaymS(1);”,BLE例程sleep.c中,唤醒后已经做了等待晶振稳定的处理。
ADC在每次唤醒后需要在TMOS事件中重新初始化,部分寄存器在休眠期间不保持。