STM32F103X hal RTThread rtc驱动支持日期保存

之前那篇移植的驱动(地址https://blog.csdn.net/Mooney_yuan/article/details/83377428)似乎有点问题,验证的时候发现RTC实际上没有起作用。实际上开始时测试过可以工作的,但现在在我板子上测试不行,所以重新改写了一下,并且解决了STM32 HAL驱动RTC掉电后日期无法保存的问题。

环境

1. 开发板,正点原子ALIENTEK MiniSTM32 V3.4

2. rtthread 3.1.0

1. 增加drv_rtc.c驱动文件

添加drv_rtc.c文件到 bsp/stm32f10x-HAL/drivers 目录下,修改该目录下的SConscript文件,增加drv_rtc.c编译选择
 


if GetDepend(['RT_USING_RTC']):

    src += ['drv_rtc.c']

2. 配置rtthread

通过env的menuconfig命令,打开 RT-Thread Components -> Device Drivers 

[*] Using RTC device drivers      
 [ ]   Using software simulation RTC device    
 [ ]   Using NTP auto sync RTC time

3. drv_rtc.c源码

/*
 * Copyright (c) 2006-2018, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2017-10-25     ZYH      first implementation
 */
#include "drv_rtc.h"
#include <board.h>
#include <rtdevice.h>
#include <string.h>
#include <time.h>
#ifndef RT_USING_SOFT_RTC
RTC_HandleTypeDef hrtc;
uint8_t time_synced;
#define BKUP_REG_DATA 0xA5A5
/* RTC init function */
void MX_RTC_Init(void)
{
    __HAL_RCC_PWR_CLK_ENABLE();
    __HAL_RCC_BKP_CLK_ENABLE();
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
#ifdef BSP_RTC_USING_LSI
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
    RCC_OscInitStruct.LSIState = RCC_LSI_ON;
#else
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    RCC_OscInitStruct.LSEState = RCC_LSE_ON;
    RCC_OscInitStruct.LSIState = RCC_LSI_OFF;
#endif
    HAL_RCC_OscConfig(&RCC_OscInitStruct);   

    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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103STMicroelectronics推出的一款ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的性能。RTC(Real-Time Clock)是STM32F103系列微控制器的一个重要的功能模块,可以用于实现实时时钟和闹钟功能。HAL库是STMicroelectronics提供的一套用于STM32系列微控制器的开发库,可以简化程序的编写过程。 在使用STM32F103RTC闹钟功能时,我们可以通过HAL库提供的相关函数进行配置和操作。首先,我们需要初始化RTC模块,并设置时钟源以及预分频系数。然后,我们可以设置闹钟时间,并使能闹钟中断,通过中断回调函数来执行相应的操作。在闹钟触发时,RTC模块会产生中断,并执行我们事先定义好的中断回调函数。我们可以在中断回调函数中进行一系列的操作,比如触发其他外设、显示相关信息等。 需要注意的是,在使用RTC闹钟功能时,我们需要先通过外部电池或超级电容器来保持RTC的时间计数器。否则,每次重新上电或复位都会导致时间计数器重置。我们可以使用RTC备份域来保存一些关键的信息,以防断电时数据的丢失。 总之,STM32F103RTC闹钟功能可以通过HAL库简单易用地实现。我们只需要按照相应的步骤进行配置和操作,即可实现一套完整的RTC闹钟功能。这种功能在一些需要时间相关操作的应用中非常实用,比如时钟、日历、定时任务等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值