完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
3个回答
|
|
RTC简介
实时时钟(RTC)是一个独立的BCD定时器/计数器。RTC提供具有可编程闹钟中断功能的日历时钟/日历。RTC还包含具有中断功能的周期性可编程唤醒标志。 两个32位寄存器包含二进码十进数格式(BCD)的秒、分钟、小时(12或24小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为28、29(闰年)、30和31天。 只要芯片的备用电源一直供电,RTC上的时间会一直走。 |
|
|
|
新建工程
本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒开启RTC。为晶振管脚。 开启外部低速晶振,PC14,PC15配置 RTC时钟选择为外部低速晶振(LSE),频率为32.768。 在RTC配置中,设置时间和日期,其他为默认设置。(此处设置时间为2016/04/16 16:25:49) 生成报告以及代码,编译程序。 |
|
|
|
添加应用程序
在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。 从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。 1 /*USERCODEBEGINPV*/ 2 /*Privatevariables---------------------------------------------------------*/ 3 RTC_DateTypeDefsdatestructure; 4 RTC_TimeTypeDefstimestructure; 5 /*USERCODEENDPV*/ 在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。 01 /** 02 *@brief RTCTimestructuredefinition 03 */ 04 typedefstruct 05 { 06 uint8_tHours; /*!《SpecifiestheRTCTimeHour. 07 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=12 08 iftheRTC_HourFormat_12isselected. 09 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=23 10 iftheRTC_HourFormat_24isselected */ 11 12 uint8_tMinutes; /*!《SpecifiestheRTCTimeMinutes. 13 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=59*/ 14 15 uint8_tSeconds; /*!《SpecifiestheRTCTimeSeconds. 16 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=59*/ 17 18 uint32_tSubSeconds; /*!《SpecifiestheRTCTimeSubSeconds. 19 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=59*/ 20 21 uint8_tTimeFormat; /*!《SpecifiestheRTCAM/PMTime. 22 Thisparametercanbeavalueof@refRTC_AM_PM_Definitions*/ 23 24 uint32_tDayLightSaving; /*!《SpecifiesRTC_DayLightSaveOperation: 25 thevalueofhouradjustment. 26 Thisparametercanbeavalueof@refRTC_DayLightSaving_Definitions*/ 27 28 uint32_tStoreOperation; /*!《SpecifiesRTC_StoreOperationvaluetobewrittenintheBCKbit 29 inCRregistertostoretheoperation. 30 Thisparametercanbeavalueof@refRTC_StoreOperation_Definitions*/ 31 }RTC_TimeTypeDef; 32 33 /** 34 *@brief RTCDatestructuredefinition 35 */ 36 typedefstruct 37 { 38 uint8_tWeekDay; /*!《SpecifiestheRTCDateWeekDay. 39 Thisparametercanbeavalueof@refRTC_WeekDay_Definitions*/ 40 41 uint8_tMonth; /*!《SpecifiestheRTCDateMonth(inBCDformat)。 42 Thisparametercanbeavalueof@refRTC_Month_Date_Definitions*/ 43 44 uint8_t Date; /*!《SpecifiestheRTCDate. 45 ThisparametermustbeanumberbetweenMin_Data=1andMax_Data=31*/ 46 47 uint8_tYear; /*!《SpecifiestheRTCDateYear. 48 ThisparametermustbeanumberbetweenMin_Data=0andMax_Data=99*/ 49 50 }RTC_DateTypeDef; 在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。 01 /*USERCODEBEGINWHILE*/ 02 while (1) 03 { 04 /*USERCODEENDWHILE*/ 05 06 /*USERCODEBEGIN3*/ 07 /*GettheRTCcurrentTime,mustgettimefirst*/ 08 HAL_RTC_GetTime(&hrtc,&stimestructure,RTC_FORMAT_BIN); 09 /*GettheRTCcurrentDate*/ 10 HAL_RTC_GetDate(&hrtc,&sdatestructure,RTC_FORMAT_BIN); 11 12 /*DisplaydateFormat:yy/mm/dd*/ 13 printf(“%02d/%02d/%02drn”,2000+sdatestructure.Year,sdatestructure.Month,sdatestructure.Date); 14 /*DisplaytimeFormat:hh:mm:ss*/ 15 printf(“%02d:%02d:%02drn”,stimestructure.Hours,stimestructure.Minutes,stimestructure.Seconds); 16 17 printf(“rn”); 18 HAL_Delay(1000); 19 } 20 /*USERCODEEND3*/ 程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。 编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。 |
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1071浏览 3评论
194浏览 2评论
456浏览 2评论
369浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
454浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:13 , Processed in 1.040895 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号