Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RTC
RTC设备调用HAL_RTCEx_BKUPWrite()失败
发布于 2020-08-16 18:13:00 浏览:3098
订阅该版
实验:通过RT-Thread Studio使用NUCLEO-F413ZH的内置RTC 硬件:NUCLEO-F413ZH(注:电路上V(BAT)口已经连接到VDD) 软件:RT-Thread Studio 构建过程:基于芯片、使用4.0.2版本创建RT-Thread项目,打开的组件:finsh命令、ulog日志、libc、PM(电源管理)设备驱动程序等,勾选“rtc device”示例,在board.c中打开“#define BSP_USING_ONCHIP_RTC”,在stm32f4xx_hal_config.h中打开“#define BSP_USING_ONCHIP_RTC”。 问题现象:无论是在“rtc device”示例的rtc_sample()、rtc.c的date()、drv_rtc.c的rt_rtc_init()函数调用HAL_RTCEx_BKUPWrite()函数,都不能往RTC备份寄存器的RTC_BKP_DR1写入标志0xA5A5。 测试方法:使用msh调用“**rtc_sample**”或“**date 2018 01 01 23 59 59**”命令后,再调用“**reboot**”命令(USB持续供电)还会提示“**I/drv.rtc: RTC hasn't been configured, please use
command to config.**” 疑惑:RTC驱动中是不是有个BKP时钟没有启动,类似__HAL_RCC_BKP_CLK_ENABLE(),导致调用HAL_RTCEx_BKUPWrite()函数不能往RTC备份寄存器的RTC_BKP_DR1写入标志? ```c //在rtc_sample.c中,粗体是在原来的基础上增加的代码 static int rtc_sample(int argc, char *argv[]) { rt_err_t ret = RT_EOK; time_t now; /* 设置日期 */ ret = set_date(2020, 8, 15); if (ret != RT_EOK) { rt_kprintf("set RTC date failed\n"); return ret; } /* 设置时间 */ ret = set_time(16, 55, 0); if (ret != RT_EOK) { rt_kprintf("set RTC time failed\n"); return ret; } **HAL_PWR_EnableBkUpAccess();//取消备份区域写保护** **HAL_RTCEx_BKUPWrite(&RTC_Handler,RTC_BKP_DR1,BKUP_REG_DATA);//标记已经初始化过了** /* 延时3秒 */ rt_thread_mdelay(3000); /* 获取时间 */ now = time(RT_NULL); rt_kprintf("%s\n", ctime(&now)); return ret; } ``` ```c //在rtc.c中,粗体是在原来的基础上增加的代码 static void date(uint8_t argc, char **argv) { if (argc == 1) { time_t now; /* output current time */ now = time(RT_NULL); rt_kprintf("%.*s", 25, ctime(&now)); } else if (argc >= 7) { /* set time and date */ uint16_t year; uint8_t month, day, hour, min, sec; year = atoi(argv[1]); month = atoi(argv[2]); day = atoi(argv[3]); hour = atoi(argv[4]); min = atoi(argv[5]); sec = atoi(argv[6]); if (year > 2099 || year < 2000) { rt_kprintf("year is out of range [2000-2099]\n"); return; } if (month == 0 || month > 12) { rt_kprintf("month is out of range [1-12]\n"); return; } if (day == 0 || day > 31) { rt_kprintf("day is out of range [1-31]\n"); return; } if (hour > 23) { rt_kprintf("hour is out of range [0-23]\n"); return; } if (min > 59) { rt_kprintf("minute is out of range [0-59]\n"); return; } if (sec > 59) { rt_kprintf("second is out of range [0-59]\n"); return; } set_time(hour, min, sec); set_date(year, month, day); **HAL_PWR_EnableBkUpAccess();//取消备份区域写保护** **HAL_RTCEx_BKUPWrite(&RTC_Handler, RTC_BKP_DR1, BKUP_REG_DATA);//标记已经初始化过了** } else { rt_kprintf("please input: date [year month day hour min sec] or date\n"); rt_kprintf("e.g: date 2018 01 01 23 59 59 or date\n"); } } ``` ```c //在drv_rtc.c中,粗体是在原来的基础上增加的代码 static rt_err_t rt_rtc_config(struct rt_device *dev) { RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; HAL_PWR_EnableBkUpAccess(); PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; //#ifdef BSP_RTC_USING_LSI //PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; //#else PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; //#endif HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); /* Enable RTC Clock */ __HAL_RCC_RTC_ENABLE(); RTC_Handler.Instance = RTC; if (HAL_RTCEx_BKUPRead(&RTC_Handler, RTC_BKP_DR1) != BKUP_REG_DATA) { LOG_I("RTC hasn't been configured, please use
command to config."); //#if defined(SOC_SERIES_STM32F1) //RTC_Handler.Init.OutPut = RTC_OUTPUTSOURCE_NONE; //RTC_Handler.Init.AsynchPrediv = RTC_AUTO_1_SECOND; //#elif defined(SOC_SERIES_STM32F0) /* set the frequency division */ //#ifdef BSP_RTC_USING_LSI //RTC_Handler.Init.AsynchPrediv = 0XA0; //RTC_Handler.Init.SynchPrediv = 0xFA; //#else //RTC_Handler.Init.AsynchPrediv = 0X7F; //RTC_Handler.Init.SynchPrediv = 0x0130; //#endif /* BSP_RTC_USING_LSI */ //RTC_Handler.Init.HourFormat = RTC_HOURFORMAT_24; //RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE; //RTC_Handler.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; //RTC_Handler.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; //#elif defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32H7) /* set the frequency division */ //#ifdef BSP_RTC_USING_LSI //RTC_Handler.Init.AsynchPrediv = 0X7D; //#else RTC_Handler.Init.AsynchPrediv = 0X7F; //#endif /* BSP_RTC_USING_LSI */ RTC_Handler.Init.SynchPrediv = 0XFF; RTC_Handler.Init.HourFormat = RTC_HOURFORMAT_24; RTC_Handler.Init.OutPut = RTC_OUTPUT_DISABLE; RTC_Handler.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; RTC_Handler.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; //#endif if (HAL_RTC_Init(&RTC_Handler) != HAL_OK) { return -RT_ERROR; } **set_time(16, 55, 0);** **set_date(2020, 8, 15);** **HAL_PWR_EnableBkUpAccess();//取消备份区域写保护** **HAL_RTCEx_BKUPWrite(&RTC_Handler, RTC_BKP_DR1, BKUP_REG_DATA);//标记已经初始化过了** } return RT_EOK; } ```
查看更多
2
个回答
默认排序
按发布时间排序
红枫
认证专家
2020-08-17
这家伙很懒,什么也没写!
有使用cubemx生成底层驱动吗?没有的话加上试试。
Fjf
2020-08-17
这家伙很懒,什么也没写!
不用RT-Thread Studio时,通过配置cubemx的RTC和env生成工程也是出现同样的问题
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
Fjf
这家伙很懒,什么也没写!
提问
9
回答
20
被采纳
0
关注TA
发私信
相关问题
1
RTC驱动框架几点建议
2
求助:RTT在STM32F407上使用内置的RTC设置日期需重启生效,设置时间即时生效,有遇到同样问题的吗?
3
[新人试水] LPC1768 Nano3_9 添加RTC
4
STM32 关于RTC的问题
5
stm32f4xx-HAL BSP的RTC设置不对
6
关于STM32的RTC设置年份不正确的问题
7
RTT的RTC驱动调试
8
rtc驱动中的bkp模块起不到防止时间的重新设置
9
rtc时钟跑十几个小时后,比实际时间快几秒怎么解决
10
stm32如何断电之后开发板rtc时间继续往前跑
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部