hc32l110低功耗定时器定时功能简单配置

LPTimer 支持 2 种工作模式,每个定时器 / 计数器都有独立的控制启动信号,以及外部输入时钟,门控信号。
定时功能用于产生间隔定时。在定时功能中,定时器一个时钟累加一次,计数到最大值会溢出并且产生中断。
当设置对应定时器 TR 1 后定时器开始运行。计数器从设定的值开始计数,计数到最大 0XFFFF 后产生溢出中断。 这个要注意了,和其他芯片可能不太一样。
由于 LPTimer 是异步定时器,定时器中断从 Timer 时钟域同步到 pclk 预, 重载模式定时器值设置大于 0Xfffb 时,中断会丢失 ,建议使用中断功能是重载寄存器的值小于 0XFFFC 。不使用中断没有这个限制。
定时功能用于产生间隔定时。在定时功能中,定时器一个时钟累加一次,计数到最大值会溢出并且产生中断。
低功耗定时器配置我们需要注意TCK_SEL是选用哪个时钟,XTL外部低速时钟,RCL内部低速时钟,一般选RCL,嗯。
CT寄存器选定时器功能,MD寄存器选模式2,TR用来控制定时器运行和停止。
  void bsp_lpt(void)
{

  stc_lpt_config_t stcConfig;
    en_result_t      enResult = Error;
    uint16_t         u16ArrData = 0xfBCA;//这个是初始值,就算从这个值计时到0xffff
  
 
    stc_lpm_config_t stcLpmCfg;
  
    Gpio_InitIOExt(0, 3, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
    
    
    stcConfig.enGateP  = LptPositive; //高电平有效
    stcConfig.enGate   = LptGateDisable;//无门控
    stcConfig.enTckSel = LptIRC32K;//时钟选择
    stcConfig.enTog    = LptTogDisable;
    stcConfig.enCT     = LptTimer;//定时器功能
    stcConfig.enMD     = LptMode2;//模式2
    
    stcConfig.pfnLpTimCb = LptInt;//中断函数配置
    
    if (Ok != Lpt_Init(&stcConfig))
    {
        enResult = Error;
    }
    
    //Lpm Cfg低功耗配置
    stcLpmCfg.enSEVONPEND   = SevPndDisable;
    stcLpmCfg.enSLEEPDEEP   = SlpDpEnable;
    stcLpmCfg.enSLEEPONEXIT = SlpExtDisable;
    Lpm_Config(&stcLpmCfg);
    
    //Lpt 中断使能
    Lpt_ClearIntFlag();
    Lpt_EnableIrq();
    EnableNvic(LPTIM_IRQn, 3, TRUE);
    
    
    //设置重载值,计数初值,启动计数
    Lpt_ARRSet(u16ArrData);
    Lpt_Run();
    
}


void LptInt(void)
{
    if (TRUE == Lpt_GetIntFlag())
    {
        Lpt_ClearIntFlag();
      
      M0P_GPIO->P0OUT_f.P03=!M0P_GPIO->P0OUT_f.P03;
      
}

我这个低功耗定时器是32ms左右进入一次中断,这样配置好,led就不灵不灵的闪了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值