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();
}
1、rtc使用 lsclk, 内32Khz lposc与外部32768 XTLF自动切换, 外部32768优先。如果32768不接 xin引脚最好接地。
2、使用最新的例程,论坛首页能右上能找到所有芯片的例程合集。sleep只是让芯片内核休眠,所有外设,包括引脚等等都需要适当配置,如果你再程序中用到了。 这样才能达到最低功耗。例程中pmu的例程。在开发板上可以达到很低功耗。
3、XTLF是外置的32768 。不是内置 顾博文 发表于 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? sigerio 发表于 2022-8-19 09:56
好的,感谢回复,另外还有一点问题,
1、本身例程里不做时钟配置时,默认用RCHF做系统主频,如果使用外部 ...
1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不会用rhf。不是关掉rchf时钟功耗就低了。要掉外设模块的模块使能才能真正关掉外设。时钟不影响功耗。唤醒后默认用rchf跑主频。 顾博文 发表于 2022-8-22 08:37
1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不 ...
好的,是我的表述有问题了,应该是关掉外设才会降低功耗,感谢回复 顾博文 发表于 2022-8-22 08:37
1、不会变,建议你先看下 cmu章节的时钟框图,对整个单片机的时钟有些了解。
2、rtc本来就是只用lsclk不 ...
那关掉外设模块这个操作,比如关掉OPA1,是直接Disable还是得需要先把OPA1的output,INN,INP这三个引脚配置为高阻态然后再disiable啊 sigerio 发表于 2022-8-23 09:22
那关掉外设模块这个操作,比如关掉OPA1,是直接Disable还是得需要先把OPA1的output,INN,INP这三个引脚 ...
看引脚是不是和外接有压差,如果引脚没有消耗功耗,就不需要配。反正是怎么省功耗怎么配。
页:
[1]