STM32CubeMX使用-2.rtc和iwdg(正点原子潘多拉开发板)

这篇文章记录一下使用STM32CubeMX配置独立看门狗和RTC的过程。基础CubeMX工程的创建可以参考我的前一篇文章《STM32CubeMX使用-1.点个灯(正点原子潘多拉开发板)》。

目录

一. 配置IWDG

二. 配置RTC

三. 读取RTC时间以及刷新IWDG


一. 配置IWDG

按照如下图的步骤1~3来使能独立看门狗。按照步骤4~5配置独立看门狗的超时时间,这里的参数需要根据独立看门狗的时钟源频率来设置,此示例IWDG时钟源使用的是LSI 32KHZ,因此可以计算出超时时间为:32KHZ \div 32 * 4096 \approx 4S,然后配置系统时钟并生成项目代码。 最后在main.c 的while中调用 HAL_IWDG_Refresh(&hiwdg)刷新看门狗。

 

二. 配置RTC

此实验中RTC时钟源跟IWDG一样使用内部低速时钟32KHZ。按如下步骤1~3打开RTC,按照步骤4设置RTC日历的初始时间。然后完成时钟配置并生成代码。

 

三. 读取RTC时间以及刷新IWDG

在main.c文件中添加如下代码

int main(void)
{
....
    while (1)
    {
        HAL_IWDG_Refresh(&hiwdg);
        HAL_RTC_GetTime(&hrtc, &cur_time, RTC_FORMAT_BCD);
        HAL_RTC_GetDate(&hrtc, &cur_date, RTC_FORMAT_BCD);

        printf("%02X/%02X/%02X/-%02X:%02X:%02X\r\n", 
                cur_date.Year, cur_date.Month, cur_date.Date, 
                cur_time.Hours, cur_time.Minutes, cur_time.Seconds);

        HAL_Delay(1000);

     }
....
}

 

注意如果只调用HAL_RTC_GetTime读取时间是不行的,那会出现每次读取的时间都相同的现象,需要在调用HAL_RTC_GetTime之后调用一下HAL_RTC_GetDate,这样才能正确得到时间。原因请看函数HAL_RTC_GetTime的注释,有如下一段描述

* @note  You must call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values
*        in the higher-order calendar shadow registers to ensure consistency between the time and date values.
*        Reading RTC current time locks the values in calendar shadow registers until Current date is read
*        to ensure consistency between the time and date values.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值