查看: 3084|回复: 2

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

[复制链接]

7

主题

20

帖子

267

积分

高级工程师

Rank: 3Rank: 3

积分
267
发表于 2022-3-15 10:06:31 | 显示全部楼层 |阅读模式
使用LPOSC作为低功耗定时器的时钟源需要怎么配置?时钟源需要初始化之类的设置吗?有没有相关例子 ?

使用官方的例子(APB时钟)没有问题,换成LPOSC后,发现定时器不起作用


回复

使用道具 举报

7

主题

20

帖子

267

积分

高级工程师

Rank: 3Rank: 3

积分
267
 楼主| 发表于 2022-3-15 11:42:31 | 显示全部楼层
问题已经解决。但是又发现了新的问题?定时时间不准的问题,
  1. /********************************************************************
  2. * @file    main.c
  3. * @note    这是一个使用GPIO的例子的实现文件
  4. * @device  fm33lc0xx开发板
  5. * @date    2022-02-15
  6. * @author  JBL
  7. **********************************************************************/

  8. #include "fm33lc0xx_fl.h"
  9. #include "led.h"
  10. #include "pll.h"

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

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

  43.    
  44.     FL_LPTIM32_Init(LPTIM32,&LPTIM32_Struct); //初始化
  45.    
  46.     /*允许LPTIM32定时中断使能*/
  47.     FL_LPTIM32_ClearFlag_Update(LPTIM32);
  48.     FL_LPTIM32_EnableIT_Update(LPTIM32);
  49.    
  50.     /*NVIC设置*/
  51.     NVIC_ConfigStruct.preemptPriority = 0X00;
  52.     FL_NVIC_Init(&NVIC_ConfigStruct,LPTIM_IRQn);
  53.    
  54.     /*使能定时器,开始工作*/
  55.     FL_LPTIM32_Enable(LPTIM32);
  56.    

  57.     while(1)
  58.     {
  59.         FL_DelayMs(500);
  60.         LED4_TOG();
  61.     }
  62. }

  63. /*
  64. *   @brief  LPTIM32中断服务函数
  65. *   @note   低功耗定时器,到达重装载值后,翻转LED2
  66. **/
  67. void LPTIM_IRQHandler(void)
  68. {
  69.     if((FL_LPTIM32_IsEnabledIT_Update(LPTIM32)) && (FL_LPTIM32_IsActiveFlag_Update(LPTIM32)))
  70.     {
  71.         LED2_TOG();
  72.         FL_LPTIM32_ClearFlag_Update(LPTIM32);
  73.     }
  74.    
  75. }

复制代码
帮忙分析一下
回复

使用道具 举报

7

主题

20

帖子

267

积分

高级工程师

Rank: 3Rank: 3

积分
267
 楼主| 发表于 2022-3-15 14:38:42 | 显示全部楼层
已经解决,是时钟源配置错误的问题导致的

--------
封贴了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表