历史上的今天
返回首页

历史上的今天

今天是:2024年09月08日(星期日)

2018年09月08日 | STM32L152 RTC 日历和定时中断使用

2018-09-08 来源:eefocus

1、开发平台:


STM32L1-Discovery Keil 4


2、RTC Calendar和wake up


STM32L152RC 带有一个硬件的实时时钟模块(RTC),可为用户提供日历功能,RTC也可以提供一个自动定时的功能,相当于是一个睡眠定时器,下面就看看该如何配置日历和定时:

 void SYS_RTCInit(void)

{

    static NVIC_InitTypeDef  NVIC_InitStructure;

    static EXTI_InitTypeDef  EXTI_InitStructure;

    static RTC_InitTypeDef RTC_InitStructure;

    static RTC_TimeTypeDef RTC_TimeStructure;

    static uint32_t AsynchPrediv = 0, SynchPrediv = 0;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);


    /*!< Allow access to RTC */

    PWR_RTCAccessCmd(ENABLE);


    /*!< 使能外部低速时钟 */

    RCC_LSEConfig(RCC_LSE_ON);


    /*!< 等待外部低速时钟就绪 */

    while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)

    {}


    /*!< 配置RTC时钟来源 */

    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);


    /*!< 使能RTC时钟 */

    RCC_RTCCLKCmd(ENABLE);


    /*!< Wait for RTC APB registers synchronisation */

    RTC_WaitForSynchro();


    //配置日历

    /* 配置RTC数据寄存器以及时钟分频 */

    SynchPrediv = 0xFF;

    AsynchPrediv = 0x7F;//分频为1Hz

    RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv;

    RTC_InitStructure.RTC_SynchPrediv = SynchPrediv;

    RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//24小时制

    /* 检查RTC初始化 */

    if (RTC_Init(&RTC_InitStructure) == ERROR)

    {

        printf("\n\r        /!\\***** RTC Prescaler Config failed ********/!\\ \n\r");

    }

    //配置时间 9点15分01秒

    RTC_TimeStructure.RTC_H12     = RTC_H12_AM;

    RTC_TimeStructure.RTC_Hours = 0x09;

    RTC_TimeStructure.RTC_Minutes = 0x15;

    RTC_TimeStructure.RTC_Seconds = 0x01;

    RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);


    //配置自动定时功能

    /* 中断配置 *******************************************************/

    EXTI_ClearITPendingBit(EXTI_Line20);

    EXTI_InitStructure.EXTI_Line = EXTI_Line20;

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;

    EXTI_Init(&EXTI_InitStructure);


    /*使能 RTC Wakeup Interrupt */

    NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);


    /* RTC 唤醒中端配置: Clock Source: RTCDiv_16, Wakeup Time Base: 4s */

    RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);

    RTC_SetWakeUpCounter(0x1FFF);//0x1FFF = 8191; 4s = (8191+1)*(1/(32768/16))


    /* 使能 the Wakeup Interrupt */

    RTC_ITConfig(RTC_IT_WUT, ENABLE);  

}


使能了RTC的定时中断,那么就要编写中断服务子程序,如下:

void RTC_WKUP_IRQHandler(void)

{

  if(RTC_GetITStatus(RTC_IT_WUT) != RESET)

  {

    RTC_ClearITPendingBit(RTC_IT_WUT);

    EXTI_ClearITPendingBit(EXTI_Line20);

  } 

}


推荐阅读

史海拾趣

General Microcircuits Corp公司的发展小趣事
在电桥和放大器电路中,使用高精度、低温度系数的电阻来减小因电阻变化引起的直流偏移。
Arduino公司的发展小趣事

2005年,意大利Ivrea交互设计学院的副教授Massimo Banzi面临了一个问题:他的学生们无法负担市面上昂贵的微控制器。为了解决这个问题,Banzi与他的同事David Cuartielles开始着手制造一个更便宜、更易于使用的电子平台。他们基于学生Hernando Barragá的Wiring平台,通过拆解和重新设计,最终推出了价格仅为30美元的Arduino电路板。Arduino的名字来源于他们常去的酒吧“di Re Arduino”,以此纪念这个创新的起点。

Frolyt Condensers & Elements GmbH公司的发展小趣事

在电子元件领域,Frolyt Condensers & Elements GmbH起初是一家专注于电容器研发的小型制造商。2005年,公司研发团队成功开发出一种新型高性能铝电解电容器,该电容器在耐高温、长寿命和低阻抗方面表现出色,迅速吸引了市场的关注。通过持续的技术创新和严格的品质控制,Frolyt的电容器产品在汽车电子、通信设备等多个领域得到广泛应用,公司因此实现了市场份额的快速增长。

DL Instruments LLC公司的发展小趣事

DL Instruments继承了Ithaco Corporation在精密仪器制造方面的技术积累,并在此基础上不断创新。公司推出了多种高性能的前置放大器产品,如低噪声电流前置放大器1211型、电流前置放大器1212型等。这些产品以其高阻抗差分或单端输入、共模抑制性能以及能在交流或直流耦合模式下运行的特点,赢得了市场的广泛认可。

ADTech公司的发展小趣事

AdTech公司在成立之初,以其完整的传统半导体器件工艺在通信、激光医疗和激光防卫领域获得了广泛认可。然而,随着技术的不断进步和市场的变化,公司管理层意识到需要转型以维持竞争优势。2008年,经过三年的技术储备,AdTech决定将原有的光电探测器业务剥离,转而专注于量子级联激光器(QCL)的研发和生产。这一决策使公司能够专注于前沿技术,逐渐在QCL领域建立了领先地位,成为美国各大QCL激光设备的核心供应商。

Comchip Technology公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,Comchip Technology始终保持着创新精神。公司不断投入研发资源,开发新产品、新技术,以满足市场的不断变化。同时,公司还积极关注行业发展趋势和未来技术动向,为公司的长远发展做好战略布局。

这些故事基于Comchip Technology公司的实际发展情况虚构而成,旨在展示其在电子行业中的成长历程和所取得的成就。虽然这些故事可能并不完全准确或详尽,但它们能够提供一个关于该公司发展的大致框架和背景。

问答坊 | AI 解惑

上位机控制16路继电器源码

上位机控制16路继电器源码…

查看全部问答>

告别IAR,拥抱RVMDK

从接触STM32以来,一直都是在IAR For ARM 4.22A环境下进行开发。因为以前用过IAR For MSP430,对IAR的开发环境比较熟悉,再加上万利板子提供的例程都是IAR的,用起来也还顺手。 直到前一阵参加了一个ARM的研讨会,会上英蓓特极力推荐RealView MDK中 ...…

查看全部问答>

SD卡休眠唤醒后,盘符没了 重新插拔也没法显示。。

平台是 pxa270+wince 6.0 当休眠,再唤醒后, SD卡的盘符就丢失了, 重新插拔也显示不了 根据串口输出信息,SD驱动在Powerup的时候执行了一个函数SimulateCardInsertion,这个函数已经模拟了一次SD卡的插拔过程,通过串口信息也发现这个函数被正 ...…

查看全部问答>

短接网线的1,3和2,6号线,能造成交换机端口连接上的现象吗?

请教大家一个问题:如果将网线的一头作成正常的网线接头,另一头的线路将1,3号线短接,2,6号线短接,接在交换机的一个端口上,会出现什么样的情况?交换机会不会不能工作? 非常感谢大家…

查看全部问答>

微型低功耗大容量心电记录仪的研制

常规心电图记录仪是医生诊断心脏疾病的主要手段之一,但它仅能记录短暂心搏情况。由于在相当多的情况下难以记录到即刻发作时的心电图改变,导致无法作出正确的诊断和治疗。因此对病人进行长时间的心电图记录有着极其重要的临床价值。而微型动态心电 ...…

查看全部问答>

请教ADC12内部时钟

请问ADC12内部时钟工作频率是5MH吗?在低功耗状态下这个内部时钟工作吗?在哪个低功耗的层面上工作,LPM0,LPM1,还是LPM2? 多谢…

查看全部问答>

有哪些C语言提高的书?

现在学完C了,对一些基本的东西有了一个大致的掌握了,希望在这个基础上再提高一下,恳请大家推荐几本比较好的C语言提高的书,谢谢!!…

查看全部问答>

layoutt 设计准则

小弟是刚接触layout,对于在PCB布线时,应该要注意哪些问题,比如说针对不同的信号线长、线距等等, 因为看过一些书,都是概念性的话,在实际操作感觉不上手。     所以想请教目前比较通用的一些设计准则。   PS:我是做NOTEBO ...…

查看全部问答>

STM固件库及其相关资料

把自己收集的固件库资料分享给大家,免费下载! [local]1[/local][local]2[/local][local]3[/local][local]4[/local][local]5[/local][local]6[/local][local]7[/local]…

查看全部问答>