18162813795 发表于 2021-5-17 11:05

华大单片低功耗定时器时钟进入中断程序卡死!!

   目前正在给设备做低功耗,进入DEEPSLEEP后使用低功耗定时器唤醒,参考官网下载的例程。现在是程序进入低功耗可以唤醒,唤醒后可以看到电流上来了,但是程序好像卡死了。 我调试了一下是卡在中断那里。 请大佬指点下!!!
   刚才不进入deepsleep模式试了下定时器。就开启LPTIME,发现2s中断后也是卡在进入中断函数那里,这个低功耗定时器应该可以和正常的定时器一样吧,不进入deepsleep应该也是可以使用的,原来用的ST系列F103比较多,没怎么接触过低功耗定时器.
   

18162813795 发表于 2021-5-17 11:11

使用官方例程中的时钟初始化函数
void App_SysClkInit(void)
{
    stc_sysctrl_clk_cfg_tstcClkCfg;

    //CLK INIT
    stcClkCfg.enClkSrc= SysctrlClkRCH;
    stcClkCfg.enHClkDiv = SysctrlHclkDiv1;
    stcClkCfg.enPClkDiv = SysctrlPclkDiv1;
    Sysctrl_ClkInit(&stcClkCfg);

    //使能RCL
    Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
}


低功耗定时器初始化函数,也是例程中的,使用内部低速的时钟RCL的话,arr寄存器设置为0的话,0到65535定时在2S
static void App_LPTimer0Init(void)
{
    stc_lptim_cfg_t    stcLptCfg;
    DDL_ZERO_STRUCT(stcLptCfg);

    ///< 使能LPTIM0 外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim, TRUE);

    stcLptCfg.enGate   = LptimGateLow;
    stcLptCfg.enGatep= LptimGatePLow;
    stcLptCfg.enTcksel = LptimRcl;
    stcLptCfg.enTogen= LptimTogEnLow;
    stcLptCfg.enCt   = LptimTimerFun;         //计数器功能
    stcLptCfg.enMd   = LptimMode2;            //工作模式为模式1:无自动重装载16位计数器/定时器
    stcLptCfg.u16Arr   = 0;                     //预装载寄存器值
    Lptim_Init(M0P_LPTIMER, &stcLptCfg);

    Lptim_ClrItStatus(M0P_LPTIMER);      //清除中断标志位
    Lptim_ConfIt(M0P_LPTIMER, TRUE);       //允许LPTIMER中断
    EnableNvic(LPTIM_IRQn, IrqLevel0, TRUE);
}


中断处理函数,就是打印一句话
void LpTim0_IRQHandler(void)
{
    if (TRUE == Lptim_GetItStatus(M0P_LPTIMER))
    {                  
               Lptim_ClrItStatus(M0P_LPTIMER);//清除LPTIMER0的中断标志位       
               LogPrint("inter interrupt\r\n");                       
    }
}



18162813795 发表于 2021-5-17 11:16

调试发现卡死在这个地方

martinhu 发表于 2021-5-17 13:39

如果不是进deepsleep,lpt的中断正常吗?printf打印正常吗?
页: [1]
查看完整版本: 华大单片低功耗定时器时钟进入中断程序卡死!!