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

STM32F103C8T6时钟RTC每次启动变慢1s

[复制链接]
yjq 提问时间:2015-9-20 09:52 /
本人使用STM32F103C8T6自身的RTC时钟制作了一个时钟定时器,运行正常,但是发现一个问题:每次上电启动10次,大约会变慢大约9~10s。我的程序模板使用STM32CubeMX自动生成,并使用了HAL库。RTC的初始化函数如下:
void MX_RTC_Init(void)
{
  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
  HAL_RTC_Init(&hrtc);
}

怀疑是HAL_RTC_Init(&hrtc)初始化的时候,重新设定RTC_PRL,暂停了时钟的counter计数?
于是我修改程序,在启动时检查BKP寄存器的数值,第一次启动运行HAL_RTC_Init(&hrtc),并标记BKP寄存器。第二次以后启动以后,运行
HAL_StatusTypeDef HAL_RTC_Init2(RTC_HandleTypeDef *hrtc)
{
  //uint32_t prescaler = 0;
  /* Check input parameters */
  if(hrtc == NULL)
  {
     return HAL_ERROR;
  }
  /* Check the parameters */
  assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
  assert_param(IS_RTC_CALIB_OUTPUT(hrtc->Init.OutPut));
  assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv));
  if(hrtc->State == HAL_RTC_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hrtc-> Lock = HAL_UNLOCKED;
    /* Initialize RTC MSP */
    HAL_RTC_MspInit(hrtc);
  }
    hrtc->State = HAL_RTC_STATE_READY;
    return HAL_OK;
}
HAL_RTC_Init2(&hrtc)是在原来HAL库里HAL_RTC_Init(&hrtc)的基础上,我自己修改创建的。其删除了设置RTC_PRL的内容。上电起动10次后,仍然变慢4~5s。
实在不知道还要如何改写,求助高手!


收藏 评论1 发布时间:2015-9-20 09:52

举报

1个回答
你好我好大家好! 回答时间:2015-9-20 12:55:55
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版