interFF 发表于 2022-3-15 10:06:31

【低功耗定时器】LSOSC做时钟源配置LPTIM问题

使用LPOSC作为低功耗定时器的时钟源需要怎么配置?时钟源需要初始化之类的设置吗?有没有相关例子 ?
使用官方的例子(APB时钟)没有问题,换成LPOSC后,发现定时器不起作用


interFF 发表于 2022-3-15 11:42:31

问题已经解决。但是又发现了新的问题?定时时间不准的问题,/********************************************************************
* @file    main.c
* @note    这是一个使用GPIO的例子的实现文件
* @devicefm33lc0xx开发板
* @date    2022-02-15
* @authorJBL
**********************************************************************/

#include "fm33lc0xx_fl.h"
#include "led.h"
#include "pll.h"

/*
*   @brief程序入口
*   @note   note
**/
int main()
{
    /* Initial Low Speed Clock */
    FL_RCC_SetLSCLKClockSource(FL_RCC_LSCLK_CLK_SOURCE_LPOSC);
   
    /* Initial RCHF */
    //上电默认使用8MHz RCHF的不分频时钟作为系统主时钟
    // 设置系统主频为64MHz,使用RCHF-->PLL-->SYSCLK, 设置小于20MHz似乎不起作用
    PLL_SelRCHFToPLL(FL_RCC_RCHF_FREQUENCY_8MHZ, 64 - 1);
//    PLL_SelXTHFToPLL(64 - 1);
    SystemCoreClockUpdate();        //更新SystemCoreClock变量值

    //延时函数
    FL_Init();
   
    //led初始化
    LED_Init();
   
    FL_LPTIM32_InitTypeDef LPTIM32_Struct;
    FL_NVIC_ConfigTypeDef NVIC_ConfigStruct;
   
    /*时钟设置*/
    // 32Khz时钟源,128分频后频率 = 250Hz时钟,0.004S计数一次,若重载值1000,那么每隔4s触发一次中断
    LPTIM32_Struct.clockSource = FL_RCC_LSCLK_CLK_SOURCE_LPOSC;//选择时钟源,32KHz
    LPTIM32_Struct.prescalerClockSource = FL_LPTIM32_CLK_SOURCE_INTERNAL;//选择内部时钟
    LPTIM32_Struct.prescaler = FL_LPTIM32_PSC_DIV128;//选择时钟分频系数
    LPTIM32_Struct.autoReload = 1000000; //写入重装载值,0.004S计数一次,每隔40s触发一次中断,实际情况是每2S翻转一次
    LPTIM32_Struct.mode = FL_LPTIM32_OPERATION_MODE_NORMAL;//选择工作模式,普通定时器
    LPTIM32_Struct.onePulseMode = FL_LPTIM32_ONE_PULSE_MODE_CONTINUOUS;//选择连续脉冲形式

   
    FL_LPTIM32_Init(LPTIM32,&LPTIM32_Struct); //初始化
   
    /*允许LPTIM32定时中断使能*/
    FL_LPTIM32_ClearFlag_Update(LPTIM32);
    FL_LPTIM32_EnableIT_Update(LPTIM32);
   
    /*NVIC设置*/
    NVIC_ConfigStruct.preemptPriority = 0X00;
    FL_NVIC_Init(&NVIC_ConfigStruct,LPTIM_IRQn);
   
    /*使能定时器,开始工作*/
    FL_LPTIM32_Enable(LPTIM32);
   

    while(1)
    {
      FL_DelayMs(500);
      LED4_TOG();
    }
}

/*
*   @briefLPTIM32中断服务函数
*   @note   低功耗定时器,到达重装载值后,翻转LED2
**/
void LPTIM_IRQHandler(void)
{
    if((FL_LPTIM32_IsEnabledIT_Update(LPTIM32)) && (FL_LPTIM32_IsActiveFlag_Update(LPTIM32)))
    {
      LED2_TOG();
      FL_LPTIM32_ClearFlag_Update(LPTIM32);
    }
   
}

帮忙分析一下

interFF 发表于 2022-3-15 14:38:42

已经解决,是时钟源配置错误的问题导致的

--------
封贴了
页: [1]
查看完整版本: 【低功耗定时器】LSOSC做时钟源配置LPTIM问题