sigerio 发表于 2022-8-18 18:29:17

LC025N内部RTC问题

本帖最后由 sigerio 于 2022-8-18 19:03 编辑

打算采用RTC来唤醒进入sleep的单片机,有如下几个问题1、根据官方的lc例程,没有做RTC时钟配置,那么默认采用的时XTLF还是其他的时钟源?如果进入低功耗需要重新配置时钟的话该如何操作?
void RTCInit(void)
{
    FL_RTC_InitTypeDef    defaultInitStruct;

    //初始化时间为23/8/15/1:00:00
    defaultInitStruct.year = 0x23;
    defaultInitStruct.month = 0x08;
    defaultInitStruct.day = 0x15;
    defaultInitStruct.hour = 0x01;
    defaultInitStruct.minute = 0x00;
    defaultInitStruct.second = 0x00;

    FL_RTC_Init(RTC,&defaultInitStruct );
    FL_RTC_EnableIT_Second(RTC);
    FL_RTC_EnableIT_Minute(RTC);
    FL_RTC_EnableIT_Hour(RTC);
    FL_RTC_EnableIT_Day(RTC);
}


2、官方例程和论坛上找到的sleep唤醒有点区别,例程中的PMU低功耗唤醒“MF_PMU_Init()”和直接不做PMU初始化,直接SLEEP();存在什么差异,是否影响功耗?进入sleep时,如果不做时钟配置,硬件是不是会自动切换到RCMF?
3、芯片内置XTLF,我在使用魔方做配置时,魔方给初始化了两个外部引脚,这是为什么?
void MF_RCC_XTLF_IO_Init(void)
{
    FL_GPIO_InitTypeDef    GPIO_InitStruct;


    /* PD9 RCC_XT32KO */
    GPIO_InitStruct.pin = FL_GPIO_PIN_9;
    GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_DISABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;
    FL_GPIO_Init(GPIOD, &GPIO_InitStruct);


    /* PD10 RCC_XT32KI */
    GPIO_InitStruct.pin = FL_GPIO_PIN_10;
    GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_DISABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;
    FL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}




/**
* @briefClock Initialization.
* @retval None
*/
void MF_Clock_Init(void)
{
    /* Initial XTLF */
    MF_RCC_XTLF_IO_Init();
    FL_RCC_XTLF_SetWorkCurrent(FL_RCC_XTLF_WORK_CURRENT_450NA);    /* 设置工作电流为最大以便快速起振 */
    FL_RCC_XTLF_Enable();


    /* Initial Low Speed Clock */
    FL_RCC_SetLSCLKClockSource(FL_RCC_LSCLK_CLK_SOURCE_XTLF);
    FL_RCC_EnableLSCLKAutoSwitch();


    /* Initial RCHF */
    FL_RCC_RCHF_SetFrequency(FL_RCC_RCHF_FREQUENCY_8MHZ);
    FL_RCC_RCHF_Enable();


    /* Initial System Clock */
    FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);    /* 设置FLASH读等待为 0 个周期 */
    FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_LSCLK);    /* 设置系统主时钟为 LSCLK */
    FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
    FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
    FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);


    SystemCoreClockUpdate();
}

顾博文 发表于 2022-8-19 08:35:59

1、rtc使用 lsclk, 内32Khz lposc与外部32768 XTLF自动切换, 外部32768优先。如果32768不接 xin引脚最好接地。
2、使用最新的例程,论坛首页能右上能找到所有芯片的例程合集。sleep只是让芯片内核休眠,所有外设,包括引脚等等都需要适当配置,如果你再程序中用到了。 这样才能达到最低功耗。例程中pmu的例程。在开发板上可以达到很低功耗。
3、XTLF是外置的32768 。不是内置

sigerio 发表于 2022-8-19 09:56:42

顾博文 发表于 2022-8-19 08:35
1、rtc使用 lsclk, 内32Khz lposc与外部32768 XTLF自动切换, 外部32768优先。如果32768不接 xin引脚最好 ...

好的,感谢回复,另外还有一点问题,
1、本身例程里不做时钟配置时,默认用RCHF做系统主频,如果使用外部32768做RTC的时钟源,这样的话系统主频会不会变化?
2、如何保证XTLF只作为RTC时钟源存在,其他外设通过RCHF获取时钟,这样进入sleep的话,能否保证XTLF工作,其他外设全部关闭时,只保留RTC秒中断来唤醒单片机,唤醒后自动恢复成RCHF?

顾博文 发表于 2022-8-22 08:37:23

sigerio 发表于 2022-8-19 09:56
好的,感谢回复,另外还有一点问题,
1、本身例程里不做时钟配置时,默认用RCHF做系统主频,如果使用外部 ...

1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不会用rhf。不是关掉rchf时钟功耗就低了。要掉外设模块的模块使能才能真正关掉外设。时钟不影响功耗。唤醒后默认用rchf跑主频。

sigerio 发表于 2022-8-22 16:56:34

顾博文 发表于 2022-8-22 08:37
1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不 ...

好的,是我的表述有问题了,应该是关掉外设才会降低功耗,感谢回复

sigerio 发表于 2022-8-23 09:22:28

顾博文 发表于 2022-8-22 08:37
1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不 ...

那关掉外设模块这个操作,比如关掉OPA1,是直接Disable还是得需要先把OPA1的output,INN,INP这三个引脚配置为高阻态然后再disiable啊

顾博文 发表于 2022-8-25 14:40:41

sigerio 发表于 2022-8-23 09:22
那关掉外设模块这个操作,比如关掉OPA1,是直接Disable还是得需要先把OPA1的output,INN,INP这三个引脚 ...

看引脚是不是和外接有压差,如果引脚没有消耗功耗,就不需要配。反正是怎么省功耗怎么配。
页: [1]
查看完整版本: LC025N内部RTC问题