历史上的今天
返回首页

历史上的今天

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

2019年08月24日 | stm32在rt-thread上的RTC(实时时钟)

2019-08-24 来源:eefocus

rt-thread中已经部分实现了rtc的内容 ---> rtc.c ,调用rt_hw_rtc_init()函数即可使用msh设置date和time等


rtc时钟来源有三个:


HSE, LSE, LSI, 实现如下: 在原RTC_Configuration(void)进行替换即可




    /* Enable LSE */

    #ifdef USE_LSE

        RCC_LSEConfig(RCC_LSE_ON);

        /* Wait till LSE is ready */

        while ( (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) && (--count) );

    #else

        #ifdef USE_HSE



        #else

            RCC_LSICmd(ENABLE);

            /* Wait till LSE is ready */

            while ( (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) && (--count) );

        #endif

    #endif

    if ( count == 0 )

    {

        return -1;

    }



    /* Select LSE as RTC Clock Source */

    #ifdef USE_LSE

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

    #else

        #ifdef USE_HSE

            RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);

        #else

            RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

        #endif

    #endif

    /* Enable RTC Clock */

    RCC_RTCCLKCmd(ENABLE);



    /* Wait for RTC registers synchronization */

    RTC_WaitForSynchro();



    /* Wait until last write operation on RTC registers has finished */

    RTC_WaitForLastTask();



    /* Set RTC prescaler: set RTC period to 1sec */

    #ifdef USE_LSE

        RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */

    #else

        #ifdef USE_HSE

            RTC_SetPrescaler(93749); /* 72 MHz / 128 */

        #else

            RTC_SetPrescaler(40000); /* 40 KHz */

        #endif

    #endif




注意:/* Note:If the HSE divided by 128 is used as the RTC clock, this bit must remain set to 1. */




秒中断和ALARM中断实现:


        rt_hw_rtc_navi_init();

        RTC_WaitForLastTask();

        RTC_SetAlarm(RTC_GetCounter()+25);       //当前RTC值的基础上加时间

        RTC_WaitForLastTask();

        RTC_ITConfig(RTC_IT_SEC, ENABLE);      //使能秒中断

        RTC_WaitForLastTask();

        RTC_ITConfig(RTC_IT_ALR,ENABLE);       //使能arlarm中断


        RTC_WaitForLastTask();




void rt_hw_rtc_navi_init(void)

{

    NVIC_InitTypeDef NVIC_InitStructure; 

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  

    NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; 

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 

    NVIC_Init(&NVIC_InitStructure);

}




void RTC_IRQHandler(void)

{

    /* enter interrupt */

    rt_interrupt_enter();



    if(RTC_GetITStatus(RTC_IT_ALR) == SET)

    {

        rt_kprintf("RTCAlarm_IRQHandler1~~~rn");

        RTC_ClearITPendingBit(RTC_IT_ALR);

    }

    if(RTC_GetITStatus(RTC_IT_SEC) == SET)

    {

        RTC_ClearITPendingBit(RTC_IT_SEC);

        rt_kprintf("RTCAlarm_IRQHandler2~~~rn");

    }

    /* leave interrupt */

    rt_interrupt_leave();

}



ps:RTCAlarm_IRQn               = 41,     /*!< RTC Alarm through EXTI Line Interrupt                */  这个不是alarm的中断函数哟


推荐阅读

史海拾趣

FERYSTER公司的发展小趣事

随着市场的不断扩大,FERYSTER公司意识到产品质量对于企业的重要性。因此,公司投入大量资金用于提升质量管理体系,引入国际先进的生产设备和检测仪器。同时,公司还加强了员工的质量意识培训,确保每一个环节都符合质量标准。这些措施的实施,使得FERYSTER公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

ELNA(依娜)公司的发展小趣事

进入电子领域后,ELNA迅速在电子元件领域取得了突破。公司凭借其在材料科学和制造工艺方面的专长,成功开发出了一系列高性能的电子元件产品。这些产品广泛应用于通信、计算机、消费电子等领域,为ELNA赢得了广泛的客户群。

为了保持技术领先,ELNA不断投入研发资源,加强技术创新。公司积极引进国际先进的生产设备和检测手段,提升产品品质和可靠性。同时,ELNA还加强了与国内外科研机构和高校的合作,共同推动电子元件技术的发展。

Eris Technology Corp公司的发展小趣事

面对日益激烈的国际竞争,Eris Tech开始实施全球化战略。公司通过在海外设立研发中心、生产基地和销售网络,加强与国际市场的联系和合作。同时,Eris Tech还积极参与国际标准的制定和技术交流活动,提高了公司的国际影响力和竞争力。随着全球化战略的深入实施,Eris Tech的产品已经远销全球多个国家和地区。

Faraday Technology公司的发展小趣事

在汽车电子市场取得成功后,Eris Tech开始将目光投向工业控制领域。通过深入了解工业控制市场的需求和技术特点,公司成功开发出多款适用于工业控制领域的半导体产品。这些产品不仅具有高性能、高可靠性等特点,还能满足工业控制领域对实时性、安全性等方面的要求。随着工业控制领域的不断拓展,Eris Tech在该领域的市场份额也逐渐增加。

D+H Mechatronic AG公司的发展小趣事

D+H Mechatronic AG深知人才是企业发展的核心。因此,公司一直致力于培养和引进优秀人才,并建立了完善的培训体系。通过内部培训和外部引进相结合的方式,公司成功打造了一支高素质、专业化的技术和管理团队。这支团队不仅具备丰富的专业知识和实践经验,还具备良好的创新意识和团队协作精神。他们的努力为公司的发展提供了源源不断的动力。

意华(CZT)公司的发展小趣事

为了提高产品质量,意华先后通过了ISO9001、ISO14001、IECQC080000等多项国际质量管理体系认证。这些认证不仅证明了公司的质量管理水平,也为客户提供了更可靠的产品保障。通过持续的质量改进和过程控制,意华的产品质量得到了显著提升,赢得了更多客户的认可。

问答坊 | AI 解惑

Skype 4.0 Beta:界面设计大变脸

Skype,这个最热门的网络电话软件,明天即将发布4.0 Beta版本,到时候大家可以到这里下载。你很可能会为这个版本感动吃惊,因为它的界面设计可以说颠覆了skype的传统,不再是那个瘦削的拨号电话,而让位于全屏幕的、视频占主体地位的界面。 我们先 ...…

查看全部问答>

再看看警察的职业性

这两天有一个最帅的警察,就是说武汉暴雪,一个路口四个方向全堵死了,一个警察站在那儿指挥了一个小时后离去,整个过程也没有打雨伞。后来人肉出来原来是个前深圳警察,来武汉结婚的,看到塞车就主动指挥。 看来干什么的就是干什么的,就算脱了那 ...…

查看全部问答>

想买个LED电源测试仪,大家给推荐一下!!

如题,推荐的越详细越好!谢谢!!…

查看全部问答>

海水淡化芯片

麻省理工学院(MIT)的科学家,研发出一种新的水淡化技术,将有望生产出能运用在灾区(如海地地震或卡崔纳台风),具备小型可携和可遥控的功能的水净化装置。此技术由一层硅晶结构所组成,图中红色的Y型信道是净化路径,海水会从右侧流入,而新鲜的水 ...…

查看全部问答>

S7-200可以扩展512点模拟量输入啦!

S7-200PLC是西门子公司的小型PLC系统,具有简单灵活的特点,但是,模拟量通道少的可怜,增加一个扩展模块也只有4路模拟量输入,尤其热电偶温度、热电阻温度采集模块,不但通道少,而且价格高,信号类型必须统一选择,不能混合输入,当需要采集大量 ...…

查看全部问答>

DXP里打印院器件图时线都是虚的,怎么修改

我在DXP 里打印元器件图,顺序是File-Fabrication outputs-Final ,这里所有的连线图和放元器件的图,我是需要打印元器件图,打出来的图都是虚线,看的不清楚,有什么办法能打印出清楚呢?谢谢大家帮忙了!…

查看全部问答>

Flash初始化出错

eboot能烧进去,可是启动的时候在FMD_Init()一步就出错了! 这个eboot我们一直在用的!肯定是没问题。问题是这批板子是新做的,跟以前的那些原理图一点没变,难道是打板的时候出错了?或者焊接的时候有问题?如果有问题也不会这一批30块全是同样 ...…

查看全部问答>

F2812的外部RAM问题

我以DSP2812为核心做了一块实验板,外扩了一块64K的RAM,但是在程序下载的时候,若把.cinit指向外部RAM就无法下载,若不使用外部RAM就可以下载,不知何故,请朋友们帮忙看看!谢谢!…

查看全部问答>

AD选型资料

详细的AD选型资料 6bits~24bits、16.6SPS~400MSPS…

查看全部问答>

求教如何联调keil uvision4与protues7.7

如何联调keil uvision4与protues7.7,请求高手指教…

查看全部问答>