0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32实时时钟(RTC)介绍(下)

jf_78858299 来源:武汉芯源 作者:武汉芯源 2023-05-26 17:07 次阅读

4.RTC模块初始化,ErrorStatus 返回值为SUCCESS或ERROR

ErrorStatus RTC_Init(RTC_InitTypeDef* RTC_InitStruct)

{

CW_SYSCTRL->APBEN1_f.RTC = 1;            //  启动RTC外设时钟,使能RTC模块

if ((RCC_GetAllRstFlag() & SYSCTRL_RESETFLAG_POR_Msk) != RCC_FLAG_PORRST)  //不是上电复位,直接退出

{    

    RCC_ClearRstFlag(RCC_FLAG_ALLRST);        

    return SUCCESS;    

}

RTC_Cmd(DISABLE);                        //  停止RTC,保证正确访问RTC寄存器

RTC_SetClockSource(RTC_InitStruct->RTC_ClockSource);        // 设置RTC时钟源, 用户需首先启动RTC时钟源!!!

RTC_SetDate(&RTC_InitStruct->DateStruct);// 设置日期,DAY、MONTH、YEAR必须为BCD方,星期为0~6,代表星期日,星期一至星期六

RTC_SetTime(&RTC_InitStruct->TimeStruct); //时间,HOUR、MINIUTE、SECOND必须为BCD方式,用户须保证HOUR、AMPM、H24之间的关联正确性

RTC_Cmd(ENABLE);

RCC_ClearRstFlag(RCC_FLAG_ALLRST);  

return SUCCESS;

}

5.RTC周期中断时间设置

int RTC_SetInterval(uint8_t Period)

{

uint16_t timeout = 0xffff;



RTC_UNLOCK();

if (IS_RTC_START())         // 如果RTC正在运行,则使用WINDOWS、ACCESS访问

{

    CW_RTC->CR1_f.ACCESS = 1;        

    while ((!CW_RTC->CR1_f.WINDOW) && timeout--);

    if (timeout == 0) return 1;



}

CW_RTC->CR0_f.INTERVAL = Period;

CW_RTC->CR1_f.ACCESS = 0;

RTC_LOCK();

return 0;

}

6.设置时钟中断使能

int RTC_ITConfig(uint32_t RTC_IT, FunctionalState NewState)

{

uint16_t timeout = 0xffff;

RTC_UNLOCK();

CW_RTC->CR1_f.ACCESS = 1;

while ((!CW_RTC->CR1_f.WINDOW) && timeout--);

if (timeout == 0) return 1;

if (!NewState)

{

    CW_RTC->IER &= ~RTC_IT;

}

else

{

    CW_RTC->IER |= RTC_IT;

}

CW_RTC->CR1_f.ACCESS = 0;

RTC_LOCK();

return 0;

}

void RTC_IRQHandlerCallBack(void)

{

if (RTC_GetITState(RTC_IT_ALARMA))

{

    RTC_ClearITPendingBit(RTC_IT_ALARMA);

    printf("*********Alarm!!!!\\r\\n");

}

if (RTC_GetITState(RTC_IT_INTERVAL))

{

    RTC_ClearITPendingBit(RTC_IT_INTERVAL);

    ShowTime();

}

void NVIC_Configuration(void)

{

__disable_irq();

NVIC_EnableIRQ(RTC_IRQn);

__enable_irq();

}

7.RTC时钟测试,初始化日历,使用间隔中断0.5秒通过Log输出日期时间

int32_t main(void)

{

RTC_InitTypeDef RTC_InitStruct = {0};

RTC_AlarmTypeDef RTC_AlarmStruct = {0};

/*系统时钟配置*/

RCC_Configuration();

/* GPIO 口配置*/

GPIO_Configuration();

LogInit();//配置输出时间所需GPIO口以及串口UART配置

printf("RTC Init...\\r\\n");

printf(" (RTC CR0:%04x,CR1:%04x,CR2:%04x,RESET FLAG:0x%08x)\\r\\n",CW_RTC->CR0,CW_RTC->CR1,CW_RTC->CR2,CW_SYSCTRL->RESETFLAG);

RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL); // 选择LSE为RTC时钟

RTC_InitStruct.DateStruct.Day = 0x21; //日

RTC_InitStruct.DateStruct.Month = RTC_Month_June;//月

RTC_InitStruct.DateStruct.Week = RTC_Weekday_Monday;//星期

RTC_InitStruct.DateStruct.Year = 0x21; //年

//设置日期,DAY、MONTH、YEAR必须为BCD方式,星期为0~6,代表星期日,星期一至星期六

printf("-------Set Date as 20%x/%x/%x\\r\\n", RTC_InitStruct.DateStruct.Year,RTC_InitStruct.DateStruct.Month,RTC_InitStruct.DateStruct.Day);

//打印日期

RTC_InitStruct.TimeStruct.Hour = 0x11; //时

RTC_InitStruct.TimeStruct.Minute = 0x58;//分

RTC_InitStruct.TimeStruct.Second = 0x59;//秒

RTC_InitStruct.TimeStruct.AMPM = 0;

RTC_InitStruct.TimeStruct.H24 = 0; //采用12小时设置

//设置时间,HOUR、MINIUTE、SECOND必须为BCD方式,用户须保证HOUR、AMPM、H24之间的关联正确性

printf("-------Set Time as %02x:%02x:%02x\\r\\n", RTC_InitStruct.TimeStruct.Hour,RTC_InitStruct.TimeStruct.Minute,RTC_InitStruct.TimeStruct.Second);//打印时间

RTC_InitStruct.RTC_ClockSource = RTC_RTCCLK_FROM_LSE;

RTC_Init(&RTC_InitStruct); // RTC模块初始化, 用户需选定需要使用的时钟源

printf("=====Set interval period as 0.5s...\\r\\n");

RTC_SetInterval(RTC_INTERVAL_EVERY_0_5S);

//闹钟为工作日上午的6:45

RTC_AlarmStruct.RTC_AlarmMask = RTC_AlarmMask_WeekMON | RTC_AlarmMask_WeekTUE |

RTC_AlarmMask_WeekWED | RTC_AlarmMask_WeekTHU |RTC_AlarmMask_WeekFRI;

//设定时间为周一到周五

RTC_AlarmStruct.RTC_AlarmTime.Hour = 6;

RTC_AlarmStruct.RTC_AlarmTime.Minute = 0x45;

RTC_AlarmStruct.RTC_AlarmTime.Second = 0;

RTC_SetAlarm(RTC_Alarm_A, &RTC_AlarmStruct); // 设置闹钟,BCD格式

RTC_AlarmCmd(RTC_Alarm_A, ENABLE);//使能闹钟

printf("=====Enable ALRAMA and INTERVAL IT...\\r\\n");

RTC_ITConfig(RTC_IT_ALARMA | RTC_IT_INTERVAL, ENABLE);

//设置中断使能

While(1){}

}

8.通过UART串口验证RTC工作正常

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 实时时钟
    +关注

    关注

    4

    文章

    239

    浏览量

    65682
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94339
  • 中断
    +关注

    关注

    5

    文章

    895

    浏览量

    41384
  • 定时器
    +关注

    关注

    23

    文章

    3237

    浏览量

    114432
  • CW32
    +关注

    关注

    1

    文章

    183

    浏览量

    575
  • 武汉芯源
    +关注

    关注

    1

    文章

    65

    浏览量

    249
收藏 人收藏

    评论

    相关推荐

    STM32 RTC实时时钟(一)

    STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建实时时钟系统。
    的头像 发表于 07-22 15:41 4584次阅读
    STM32 <b class='flag-5'>RTC</b><b class='flag-5'>实时时钟</b>(一)

    什么是实时时钟RTC)?如何更改RTC的时间?

    什么是实时时钟RTC)?实时时钟RTC)的基本功能是什么?实时时钟RTC)晶体误差的主要来
    发表于 07-19 08:44

    实时时钟RTC)简要介绍

    实时时钟RTC)是什么?实时时钟RTC的寄存器有哪些?
    发表于 10-09 07:08

    RTC实时时钟怎么使用?

    RTC实时时钟怎么使用?cubemx中如何配置RTC?如何在keil中编写程序?
    发表于 01-18 07:33

    RTC实时时钟实验的相关资料分享

    的价值非常大,因此在这里介绍RTC的使用。只要添加一颗纽扣电池即可实时显示单片机的时间,即使是断点了也可以在下次上电的时候继续显示实时时
    发表于 03-02 07:34

    HT49 MCU RTC实时时钟)的使用介绍

    HT49 MCU RTC实时时钟)的使用介绍文件编码:HA0024s本文主要介绍HT49 系列单片机实时时钟的使用方法。简单
    发表于 03-26 08:37 12次下载

    一文看懂rtc实时时钟和单片机时钟的区别

    本文首先阐述了rtc实时时钟和单片机时钟的区别,其次介绍了单片机中时钟概念与单片机内外部时钟方式
    的头像 发表于 05-14 15:48 6.1w次阅读

    浅谈RTC实时时钟特征与原理

    一、RTC实时时钟特征与原理 查看STM32中文手册 16 实时时钟RTC)(308页) RTC (Real Time Clock):
    的头像 发表于 06-30 15:54 1.1w次阅读

    STM32CubeMX | 40 - 实时时钟RTC的使用(日历和闹钟)

    STM32CubeMX | 40 - 实时时钟RTC的使用(日历和闹钟)
    发表于 11-23 18:06 19次下载
    STM32CubeMX | 40 - <b class='flag-5'>实时时钟</b><b class='flag-5'>RTC</b>的使用(日历和闹钟)

    STM32CubeMX系列|RTC实时时钟

    RTC实时时钟1. RTC实时时钟简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 12-24 19:15 16次下载
    STM32CubeMX系列|<b class='flag-5'>RTC</b><b class='flag-5'>实时时钟</b>

    DA1468x SoC 的实时时钟(RTC) 概念

    DA1468x SoC 的实时时钟 (RTC) 概念
    发表于 03-15 20:16 0次下载
    DA1468x SoC 的<b class='flag-5'>实时时钟</b>(<b class='flag-5'>RTC</b>) 概念

    实时时钟RTC:32.768kHz晶振

    实时时钟(RTC: Real-Time Clock)是集成电路,通常称为时钟芯片。目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。
    的头像 发表于 05-08 10:45 2683次阅读
    <b class='flag-5'>实时时钟</b><b class='flag-5'>RTC</b>:32.768kHz晶振

    CW32实时时钟RTC介绍(上)

    实时时钟RTC)是一个专用的计数器 / 定时器,可提供日历信息,包括小时、分钟、秒、日、月份、年份以及星期。RTC 具有两个独立闹钟,时间、日期可组合设定,可产生闹钟中断,并通过引脚输出;支持时间
    的头像 发表于 05-26 17:07 1528次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>实时时钟</b>(<b class='flag-5'>RTC</b>)<b class='flag-5'>介绍</b>(上)

    DA1468x SoC 的实时时钟(RTC) 概念

    DA1468x SoC 的实时时钟 (RTC) 概念
    发表于 07-06 19:27 0次下载
    DA1468x SoC 的<b class='flag-5'>实时时钟</b>(<b class='flag-5'>RTC</b>) 概念

    CW32实时时钟RTC介绍

    CW32实时时钟RTC介绍
    的头像 发表于 10-24 15:36 1082次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>实时时钟</b>(<b class='flag-5'>RTC</b>)<b class='flag-5'>介绍</b>