STM32的RTC能产生毫秒级的中断吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的RTC能产生毫秒级的中断吗相关的知识,希望对你有一定的参考价值。

参考技术A RTC支持三种中断,分别是秒中断,闹钟中断和溢出中断。
从这三种方式可以看出,正常情况下,RTC的中断是秒级的。
如果使用设置分频的方式让秒中断变成毫秒级中断的话,RTC就不能当作时真正的秒时钟来用了。
如果需要毫秒级中断,推荐使用systick.
所有使用Cortex-M3内核的CPU都有一个systick计数器。
在不使用操作系统的工程中,一般都用systick作为毫秒级中断发生器。
在使用ucos或其它简单操作系统的工程中,systick都作为操作系统的系统时钟滴答,周期是1毫秒一个中断。
另外您也可以使用STM32的几个TIM。
TIM1是最复杂的,在只需要简单功能情况下,建议使用TIM2或其它TIM。

STM32Cube STM32L053配置RTC WAKEUP中断唤醒

芯片手册中提到的从停止模式唤醒说明

芯片手册中提到的从待机模式唤醒说明

配置

LL_RTC_InitTypeDef RTC_InitStruct = 0;

LL_RCC_EnableRTC();

NVIC_SetPriority(RTC_IRQn,0);
NVIC_EnableIRQ(RTC_IRQn);

RTC_InitStruct.HourFormat = LL_RTC_HOURFORMAT_24HOUR;
RTC_InitStruct.AsynchPrescaler = 127;
RTC_InitStruct.SynchPrescaler = 255;
LL_RTC_Init(RTC, &RTC_InitStruct);

LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
LL_RTC_WAKEUP_SetAutoReload(RTC, 60);

中断唤醒清除中断

void RTC_IRQHandler(void)

  /* USER CODE BEGIN RTC_IRQn 0 */
	INTRTC = 1;
  while(LL_RTC_IsActiveFlag_WUT(RTC))
  
    LL_RTC_ClearFlag_WUT(RTC);
    LL_RCC_MSI_Enable();
    LL_RCC_LSI_Enable();
  
  LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);	
  /* USER CODE END RTC_IRQn 0 */

  /* USER CODE BEGIN RTC_IRQn 1 */

  /* USER CODE END RTC_IRQn 1 */

休眠函数

void stop(void)

    /* 开启PWR时钟 */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
  /* 设置中断线 */
	LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_20);
  LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_20);
  LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_20);
	
	/* 设置RTC唤醒时间 */
  LL_RTC_DisableWriteProtection(RTC);
  LL_RTC_WAKEUP_Disable(RTC);
  while(!LL_RTC_IsActiveFlag_WUTW(RTC));
  LL_RTC_WAKEUP_SetAutoReload(RTC, 20);
  LL_RTC_WAKEUP_SetClock(RTC, LL_RTC_WAKEUPCLOCK_CKSPRE);
  LL_RTC_EnableIT_WUT(RTC);
  LL_RTC_WAKEUP_Enable(RTC);
  LL_RTC_EnableWriteProtection(RTC);
//power_off();
	LL_PWR_EnableUltraLowPower();
  LL_PWR_SetRegulModeLP(LL_PWR_REGU_LPMODES_LOW_POWER);
	LL_PWR_SetPowerMode(LL_PWR_MODE_STOP);
  LL_LPM_EnableDeepSleep();
	__WFI();
//power_on();

以上是关于STM32的RTC能产生毫秒级的中断吗的主要内容,如果未能解决你的问题,请参考以下文章

STM32的RTC中断标志只能手动清除

使用STM32CubeMX生成RTC工程[闹钟中断2]

STM32Cube STM32L053闹钟唤醒LL库和HAL库

STM32L151 RTC闹钟中断

STM32L051低功耗STOP模式串口中断唤醒

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例