Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RTC
STM32F103
调用ALIENTEKMiniSTM32V35开发板的RTC
发布于 2021-06-23 16:57:52 浏览:1041
订阅该版
双击RT-Thread Setting,进入界面后点击更多配置。接着找到RTC驱动并勾选。 然后在drivers目录中打开board.h源文件,找到`#define BSP_USING_ONCHIP_RTC`的注释,取消掉。 修改drv_rtc.c文件,把 ```c #ifndef HAL_RTCEx_BKUPRead #define HAL_RTCEx_BKUPRead(x1, x2) (~BKUP_REG_DATA) #endif #ifndef HAL_RTCEx_BKUPWrite #define HAL_RTCEx_BKUPWrite(x1, x2, x3) #endif ``` 注释掉, 修改下面的get_rtc_timestamp()函数如下 ```c static time_t get_rtc_timestamp(void) { #if 0 RTC_TimeTypeDef RTC_TimeStruct = {0}; RTC_DateTypeDef RTC_DateStruct = {0}; struct tm tm_new; HAL_RTC_GetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT_BIN); HAL_RTC_GetDate(&RTC_Handler, &RTC_DateStruct, RTC_FORMAT_BIN); tm_new.tm_sec = RTC_TimeStruct.Seconds; tm_new.tm_min = RTC_TimeStruct.Minutes; tm_new.tm_hour = RTC_TimeStruct.Hours; tm_new.tm_mday = RTC_DateStruct.Date; tm_new.tm_mon = RTC_DateStruct.Month - 1; tm_new.tm_year = RTC_DateStruct.Year + 100; LOG_D("get rtc time."); return mktime(&tm_new); #else time_t timestamp; timestamp = RTC->CNTH; /* 得到计数器中的值(秒钟数) */ timestamp <<= 16; timestamp += RTC->CNTL; LOG_D("get rtc time."); return timestamp; #endif } ``` 修改下面的set_rtc_time_stamp()函数如下: ```c static rt_err_t set_rtc_time_stamp(time_t time_stamp) { #if 0 RTC_TimeTypeDef RTC_TimeStruct = {0}; RTC_DateTypeDef RTC_DateStruct = {0}; struct tm *p_tm; p_tm = localtime(&time_stamp); if (p_tm->tm_year < 100) { return -RT_ERROR; } RTC_TimeStruct.Seconds = p_tm->tm_sec ; RTC_TimeStruct.Minutes = p_tm->tm_min ; RTC_TimeStruct.Hours = p_tm->tm_hour; RTC_DateStruct.Date = p_tm->tm_mday; RTC_DateStruct.Month = p_tm->tm_mon + 1 ; RTC_DateStruct.Year = p_tm->tm_year - 100; RTC_DateStruct.WeekDay = p_tm->tm_wday + 1; if (HAL_RTC_SetTime(&RTC_Handler, &RTC_TimeStruct, RTC_FORMAT_BIN) != HAL_OK) { return -RT_ERROR; } if (HAL_RTC_SetDate(&RTC_Handler, &RTC_DateStruct, RTC_FORMAT_BIN) != HAL_OK) { return -RT_ERROR; } LOG_D("set rtc time."); HAL_RTCEx_BKUPWrite(&RTC_Handler, RTC_BKP_DR1, BKUP_REG_DATA); return RT_EOK; } #else /* 设置时钟 */ RCC->APB1ENR |= 1<<28; /* 使能电源时钟 */ RCC->APB1ENR |= 1<<27; /* 使能备份时钟 */ PWR->CR |= 1 << 8; /* 取消备份区写保护 */ /* 上面三步是必须的! */ RTC->CRL |= 1 << 4; /* 允许配置 */ RTC->CNTL = time_stamp & 0xffff; RTC->CNTH = time_stamp >> 16; RTC->CRL &= ~(1 << 4); /* 配置更新 */ while (!(RTC->CRL & (1 << 5)));/* 等待RTC寄存器操作完成 */ HAL_RTCEx_BKUPWrite(&RTC_Handler, RTC_BKP_DR1, BKUP_REG_DATA); LOG_D("set rtc time."); return RT_EOK; #endif } ``` 完成上述步骤后,打开终端msh命令输入date可以查到当前时间日期,一开始为默认时间,需要手动输入时间日期例如: ``` date 2021 06 23 16 56 30 ``` 进行设置。 参考文章 > https://bbs.huaweicloud.com/blogs/218574
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
巴菲特不非
这家伙很懒,什么也没写!
文章
3
回答
7
被采纳
1
关注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组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部