OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2680|回复: 0

stm32f429RTC掉电时钟不跑

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2019-10-14
在线时间
24 小时
发表于 2019-11-9 17:53:53 | 显示全部楼层 |阅读模式
学习stm32f429的RTC功能的时候,跟着原子哥的视频学习,但是发现做时钟日历的时候,我的rtc掉电并不跑,后来自己研究好久终于发现问题的原因,但是遗憾的事还有几个小的问题没有解决,希望看到此贴的朋友大家一起分享下经验,谢谢。
此程序使用hal库开发。rtc是后备寄存器区,对于那些相关寄存器的配置我就不多废话了,下面直接说我发现的问题

我们配置RTC的时候需要配置RTC的时钟,但是我印象中有一讲视频讲过配置时钟的时候需要先将时钟关闭,再配置时钟才能起作用,具体我也记不清楚 了,找了好久也没找到,
所以我把RTC的初始化函数丢在系统时钟配置之前,这样时钟还没开我也就先把rtc的时钟给配置好了,也就变相的关了是时钟再配置,最后便成功了,大家不妨可以验证下,下面是我的主函数
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "./KEY/key.h"
  5. #include "./LED/led.h"
  6. #include "./RTC/rtc.h"

  7. int main(void) RTC.zip (1003.25 KB, 下载次数: 4)


  8. {
  9.         char data_format[100];                        //用于存放字符串格式数据
  10.   HAL_Init();                     //初始化HAL库
  11.         MY_RTC_Init();                                                                        //RTC初始化函数一定要放在Stm32_Clock_Init系统时钟初始化之前,
  12.                                                                                                                                         //否则掉电不能时钟配置不能正常写入,掉电不会跑时钟
  13.   Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
  14.         delay_init(180);                                                                //延时函数初始化
  15.         uart_init(115200);                                                        //串口初始化
  16.         LED_Config();                                                                                //LED初始化
  17.         Key_Config();                                                                                //按键初始化
  18.         printf("RTC实验\r\n");                                        //串口打印“RTC实验”
  19.        
  20.         RTC_TimeTypeDef RTC_TimeTypeStruct;
  21.         RTC_DateTypeDef        RTC_DataTypeStruct;
  22.         while(1)
  23.         {
  24.                 HAL_RTC_GetTime(&RTC_HandleStruct,&RTC_TimeTypeStruct,RTC_FORMAT_BIN);                //获取时间
  25.                 HAL_RTC_GetDate(&RTC_HandleStruct,&RTC_DataTypeStruct,RTC_FORMAT_BIN);                //获取日期
  26.                 //HAL_RTC_GetDate() 和 HAL_RTC_GetTime() 必须同时被调用,否则时钟不会跑
  27.                 sprintf(data_format,"Time:%d:%d:%d  Weekday:%d\r\nDate:20%d-%d-%d\n",RTC_TimeTypeStruct.Hours,RTC_TimeTypeStruct.Minutes,
  28.                                 RTC_TimeTypeStruct.Seconds,RTC_DataTypeStruct.WeekDay,RTC_DataTypeStruct.Year,RTC_DataTypeStruct.Month,RTC_DataTypeStruct.Date);        //向格式化字符串内写入数据
  29.                 printf("%s\r\n\r\n",data_format);                //打印格式化字符串
  30.                 delay_ms(1000);                        //延时1s
  31.         }
  32. }
复制代码
接下来,我再补充几个我所剩下的几个问题,
1、我记得配置其他时钟的时候是需要关闭时钟,配置完之后再打开,但是我找了很久都没找到这个函数,请问有哪位大佬知道可以分享下吗,或者我记混淆了
2、HAL_RTC_GetDate() 和 HAL_RTC_GetTime() 必须同时被调用,否则时钟不会跑,我粗略的看了下HAL_RTC_GetTime()函数内部,感觉也没什么影响呀,但是不调用HAL_RTC_GetTime函数时钟就是不跑(正常供电的情况下),但是我按复位,时钟在跑!!
3、这个原子哥在讲rtc的时候并没有讲到这一点,但是我实践发现只有这样时钟才能在掉电之后也正常跑,但是我看了开发板配套的源码,源码里面rtc并没有放到系统时钟前面,但是那个程序参杂了usmart的液晶屏的程序,我在源码的主函数把参杂的usmart的和液晶屏的程序删掉之后,也是有同样的问题,因此我目前想的是可能那两个程序里面是不是包含了关时钟的操作。
希望看到此贴的江湖朋友一起分享下
我把我写的rtc的代码和原子哥的源码都附带上




实验16 RTC实时时钟实验.zip

1.08 MB, 下载次数: 11

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 21:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表