stm32L152芯片使用RTC制作万年历
大家好,小弟在这里有个疑问,看了正点原子FI的RTC实时时钟试验后,想自己写一个STM32L152的实时时钟(万年历),但不知道如何配置,网上的资源大都是用Cube来写的,但小弟我想不用Cube来写。求大神们指点一下。希望能得到大神的指点,我QQ是1253414972:'( 直接读出RTC内的秒数,然后就一样了 stm32L152可以直接设置日期、时间、星期。设置以后会自动进行更新。 zhao.zhao 发表于 2017-7-6 08:56
直接读出RTC内的秒数,然后就一样了
在STM32L152中 好像没有秒中断函数的吧,看了好久都没找到,只有图片里面的这些函数。还有清除中断位函数中的秒中断和溢出中断函数也没找到 安 发表于 2017-7-6 09:31
stm32L152可以直接设置日期、时间、星期。设置以后会自动进行更新。
版主。在L152板子上配置的时候时钟分频的配置函数跟F1的板子好像不一样,但没找到具体是什么函数 使用HAL库,也不用动什么脑筋,很好使 都差不多,L152系列的例程里面都有了。如下代码:
RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
uint32_t t;
bool scc = FALSE;
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Reset RTC Domain */
RCC_RTCResetCmd(ENABLE);
RCC_RTCResetCmd(DISABLE);
/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
t = Fun_GetTicks();
/* Wait till LSE is ready */
while(Fun_GetTicks()-t<2000)
{
if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == SET)
{
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
scc = TRUE;
printf("LSE OK\n");
break;
}
}
if(scc == FALSE)
{
/* Enable the LSI OSC */
RCC_LSICmd(ENABLE);
t = Fun_GetTicks();
/* Wait till LSI is ready */
while(Fun_GetTicks()-t<2000)
{
if(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == SET)
{
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
scc = TRUE;
printf("LSI OK\n");
break;
}
}
}
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Configure the RTC data register and RTC prescaler */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv= 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
/* Set the time to 00h 00mn 00s AM */
RTC_TimeStruct.RTC_H12 = RTC_H12_AM;
RTC_TimeStruct.RTC_Hours = hh;
RTC_TimeStruct.RTC_Minutes = mm;
RTC_TimeStruct.RTC_Seconds = ss;
RTC_SetTime(RTC_Format_BIN, &RTC_TimeStruct);
/* Set the date */
RTC_DateStruct.RTC_WeekDay = RTC_Weekday_Monday;
RTC_DateStruct.RTC_Year = year;
RTC_DateStruct.RTC_Month = m;
RTC_DateStruct.RTC_Date = day;
RTC_SetDate(RTC_Format_BIN, &RTC_DateStruct);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
zhao.zhao 发表于 2017-7-6 13:25
使用HAL库,也不用动什么脑筋,很好使
恩恩。是的。直接用stm32cube来配置的话很容易就弄好了。:lol但主要是想不用cube然后自己弄一个写一个万年历的。谢谢提醒啦 安 发表于 2017-7-6 13:46
都差不多,L152系列的例程里面都有了。如下代码:
版主,我想问下时钟分频那里为什么是0X7F0XFF。查了一下是同步的跟异步的,到时候用的是32.768K的外部晶振吧,原子是直接用的这个函数RTC_SetPrescaler()。那为什么要设置同步跟异步的那两个数呢。 L系列开发板没有秒中断函数,我查了一下用时间戳中断函数好像也行的,那我该怎么配置呢