|
本帖最后由 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);
}
/**
* @brief Clock 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();
}
|
|