完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,小弟在这里有个疑问,看了正点原子FI的RTC实时时钟试验后,想自己写一个STM32L152的实时时钟(万年历),但不知道如何配置,网上的资源大都是用Cube来写的,但小弟我想不用Cube来写。求大神们指点一下。
|
|
相关推荐
19个回答
|
|
希望能得到大神的指点,我QQ是1253414972
|
|
|
|
直接读出RTC内的秒数,然后就一样了
|
|
|
|
stm32L152可以直接设置日期、时间、星期。设置以后会自动进行更新。
|
|
|
|
在STM32L152中 好像没有秒中断函数的吧,看了好久都没找到,只有图片里面的这些函数。还有清除中断位函数中的秒中断和溢出中断函数也没找到 |
|
|
|
版主。在L152板子上配置的时候时钟分频的配置函数跟F1的板子好像不一样,但没找到具体是什么函数 |
|
|
|
使用HAL库,也不用动什么脑筋,很好使
|
|
|
|
都差不多,L152系列的例程里面都有了。如下代码:
|
|
|
|
恩恩。是的。直接用stm32cube来配置的话很容易就弄好了。但主要是想不用cube然后自己弄一个写一个万年历的。谢谢提醒啦 |
|
|
|
版主,我想问下时钟分频那里为什么是0X7F 0XFF。查了一下是同步的跟异步的,到时候用的是32.768K的外部晶振吧,原子是直接用的这个函数RTC_SetPrescaler()。那为什么要设置同步跟异步的那两个数呢。 L系列开发板没有秒中断函数,我查了一下用时间戳中断函数好像也行的,那我该怎么配置呢 |
|
|
|
手册中写了,The maximum resolution allowed (30.52 μs with a 32768 Hz clock) is obtained with PREDIV_S set to 0x7FFF.
用秒中断做什么?要根据实际情况来进行设置。 |
|
|
|
TOPCB 发表于 2019-4-19 13:58 就像图中的打×和感叹号的语句一样,编译的时候是不通过的。我是直接把原子的代码复制过来,然后改一些地方。但现在这些地方找不到对应的函数 |
|
|
|
好像懂了,里面的这个两个数是跟这句话有关的吧。RTC_PRER register: Write first the synchronous value and then write the asynchronous。 然后LSE = 32.768 kHz,PREDIV_A[6:0] 127=0x7F。 PREDIV_S[12:0】 255=0xFF.这么设置的话正好外部晶振的频率是32768HZ。 |
|
|
|
楼主,你看的是103的例程吧。L152是不一样的。
|
|
|
|
恩恩。版主。我是想按照F103的例程写一个L152的万年历。现在就是在配置上还有写中断服务函数上卡壳了,不知道用什么来代替F103的秒中断和RTC-Setcounter()函数。因为在L152里面没找到秒中断标志位和溢出中断的标志位。代码如下: void RTC_IRQHandler(void) { if (RTC_GetITStatus(RTC_IT_SEC) != RESET) { RTC_Get();//¸üÐÂʱ¼ä } if(RTC_GetITStatus(RTC_IT_ALRA)!= RESET) { RTC_ClearITPendingBit(RTC_IT_ALRA); } RTC_ClearITPendingBit(RTC_IT_SEC|RTC_IT_OW); } 然后看了资料有人这么写的。 //配置自动定时功能 /* 中断配置 *******************************************************/ EXTI_ClearITPendingBit(EXTI_Line20); EXTI_InitStructure.EXTI_Line = EXTI_Line20; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /*使能 RTC Wakeup Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* RTC 唤醒中端配置: Clock Source: RTCDiv_16, Wakeup Time Base: 4s */ RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16); RTC_SetWakeUpCounter(0x1FFF);//0x1FFF = 8191; 4s = (8191+1)*(1/(32768/16)) /* 使能 the Wakeup Interrupt */ RTC_ITConfig(RTC_IT_WUT, ENABLE); } 使能了RTC的定时中断,那么就要编写中断服务子程序,如下: void RTC_WKUP_IRQHandler(void) { if(RTC_GetITStatus(RTC_IT_WUT) != RESET) { RTC_ClearITPendingBit(RTC_IT_WUT); EXTI_ClearITPendingBit(EXTI_Line20); } } 但我不懂下面的那种写法中为什么还要给唤醒时钟进行分频,这样用能不能实现跟F103一样的效果。 版主 你写的代码是用cube写的吗? |
|
|
|
STM32L152的rtc是真正的rtc,只要配置完成,就可以直接读取数据了
|
|
|
|
想问下大佬该怎么配置呢?能给个模板么 |
|
|
|
版主,不要再写其他的函数了么?比如说像F103例程里面的u8 RTC_Set(u16 syear,u8 smon,u8 sday,u8 hour,u8 min,u8 sec),u8 RTC_Get(void),u8 RTC_Get_Week(u16 year,u8 month,u8 day)的这些函数。能帮忙写一下么?不用Cube写 |
|
|
|
jsgssg 发表于 2019-4-19 15:39 L1中直接读取寄存器,库函数里面也有函数,直接可以读取年月日时分秒星期 |
|
|
|
我给出的配置里面已经写了如何设置年月日、时分秒、星期了。需要的时候直接读取时间和日期即可,不需要进行将秒转换为日期了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2005 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1858 浏览 3 评论
4442 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2007 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2513 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 01:53 , Processed in 0.931177 second(s), Total 109, Slave 93 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号