你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

RTC频繁唤醒 设置 会影响RTC的准确度嘛?

[复制链接]
wangjinglu 提问时间:2022-7-1 16:44 / 未解决
使用了RTC ALARM A闹钟唤醒STM32F030c8t6和WAKEUP引脚外部唤醒 ,当外部唤醒以后进行校准时间,发现一小时能差8分钟。下面是我的RTC配置 和系统时间配置
  1. oid RCC_Configuration(void)
  2. {
  3.         /* RCC system reset(for debug purpose) */
  4.     RCC_DeInit();
  5.         RCC_LSICmd(ENABLE);
  6.     while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI就绪
  7.     RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置AHB Prescaler为1(根据cubemx的时钟图看的)-->得到HCLK 8 M
  8.     RCC_PCLKConfig(RCC_HCLK_Div1);//配置APB1 Prescaler 为1 得到 PCLK1 = 8M-->同时APB1 外设时钟和和APB1上的定时器->8Mhz
  9.    
  10. //    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8);//HSI RC(8MHZ) /2 * 8->PLLCLK = 32 Mhz       
  11. //    RCC_PLLCmd(ENABLE);
  12. //    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//将 PLLCLK作为系统时钟
  13.     RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//将内部时钟作为系统时钟 ->8mhz
  14.      /* 使能APB1时钟 */
  15.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能 PWR时钟
  16. }
复制代码
  1. void RTC_Configuration(void)
  2. {
  3.         /* Enable the PWR clock */
  4.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  5.         /* Allow access to RTC */
  6.         PWR_BackupAccessCmd(ENABLE);
  7.        
  8.         #if defined (RTC_CLOCK_SOURCE_LSI)  /* LSI used as RTC source clock*/
  9.         /* The RTC Clock may varies due to LSI frequency dispersion. */   
  10.         /* Enable the LSI OSC */
  11.         RCC_LSICmd(ENABLE);

  12.         /* Wait till LSI is ready */  
  13.         while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
  14.         {
  15.         }
  16.         /* Check if the StandBy flag is set */
  17.         if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
  18.         {                 
  19.                 /* Clear StandBy flag */
  20.                 PWR_ClearFlag(PWR_FLAG_SB);  

  21.                 /* Check if the StandBy flag is cleared */
  22.                 if (PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
  23.                 {
  24.                         while(1);
  25.                 }

  26.                 RTC_WaitForSynchro();

  27.                 /* No need to configure the RTC as the RTC config(clock source, enable,
  28.                 prescaler,...) are kept after wake-up from STANDBY */
  29.         }
  30.         /* Select the RTC Clock Source */
  31.         RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

  32.         SynchPrediv = 0x18F;
  33.         AsynchPrediv = 0x63;

  34.         #elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */
  35.         /* Enable the LSE OSC */
  36.         RCC_LSEConfig(RCC_LSE_ON);

  37.         /* Wait till LSE is ready */  
  38.         while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  39.         {
  40.         }

  41.         /* Select the RTC Clock Source */
  42.         RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

  43.         SynchPrediv = 0xFF;
  44.         AsynchPrediv = 0x7F;

  45.         #else
  46.         #error Please select the RTC Clock source inside the main.c file
  47.         #endif /* RTC_CLOCK_SOURCE_LSI */

  48.         /* Enable the RTC Clock */
  49.         RCC_RTCCLKCmd(ENABLE);

  50.         /* Wait for RTC APB registers synchronisation */
  51.         RTC_WaitForSynchro();

  52. }
复制代码


收藏 评论1 发布时间:2022-7-1 16:44

举报

1个回答
butterflyspring 回答时间:2022-7-4 10:58:09
RTC启动后,只要备份域不复位,那么时钟一直供给RTC,计时是由硬件完成,与中断无关。所以频繁中断不会影响计时。 关键是你的时钟源,时钟源精度影响计数器精度。 如果选择了LSI这个低精度时钟,偏差大是很正常的。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版