本人使用
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 ini
tialize 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。
实在不知道还要如何改写,求助高手!