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)刷新看门狗。

STM32CubeMX使用-2.rtc和iwdg(正点原子潘多拉开发板)_第1张图片

 

二. 配置RTC

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

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

 

三. 读取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.

 

你可能感兴趣的:(stm32-cubemx)