历史上的今天
返回首页

历史上的今天

今天是:2025年03月06日(星期四)

正在发生

2019年03月06日 | stm32 RTC_WaitForSynchro()死循环

2019-03-06 来源:eefocus

1.RTC_WaitForSynchro()死循环,发现是没有执行RTC_Configuration(),增加函数,但不知道对之后的时钟准确性有什么影响



/*******************************************************************************

* Function Name  : RTC_Configuration

* Description    : Configures the RTC.

* Input          : None

* Output         : None

* Return         : 0 reday,-1 error.

*******************************************************************************/

int RTC_Configuration(void)

{

    u32 countmax = 0x20000;

    u32 count = countmax;

    /* Enable PWR and BKP clocks */

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

    /* Allow access to BKP Domain */

    PWR_BackupAccessCmd(ENABLE);

    /* Reset Backup Domain */

    BKP_DeInit();

    /* Enable LSE */

    RCC_LSEConfig(RCC_LSE_ON);

 

    /* Wait till LSE is ready */

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

 

    if(count == 0)

    {

        count = countmax;

        //关闭外部低速晶振(LSE)

        RCC_LSEConfig(RCC_LSE_OFF);

        //如果失败,使用内部晶振

        //使能或者失能内部低速晶振(LSI)

        RCC_LSICmd(ENABLE);

        //设置RTC时钟(RTCCLK)

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

 

        /* Wait till LSI is ready */

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

 

        if(count == 0)

            return 1;

    }

    else

    {

        /* Select LSE as RTC Clock Source */

        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);//设置RTC时钟(RTCCLK)

    }

 

    /* 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 */

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

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

    RTC_WaitForLastTask();

    return 0;

}



void rt_hw_rtc_init(void)

{

    rtc.type    = RT_Device_Class_RTC;

 

    if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)

    {

        rt_kprintf("rtc is not configured\n");

        rt_kprintf("please configure with set_date and set_time\n");

 

        if(RTC_Configuration() != 0)

        {

            rt_kprintf("rtc configure fail...\r\n");

            return ;

        }

    }

    else

    {

        if(RTC_Configuration() != 0)

        {

            rt_kprintf("rtc configure fail...\r\n");

            return ;

        }

 

        /* Wait for RTC registers synchronization */

        RTC_WaitForSynchro();

    }

 

    /* register rtc device */

    rtc.init    = RT_NULL;

    rtc.open    = rt_rtc_open;

    rtc.close   = RT_NULL;

    rtc.read    = rt_rtc_read;

    rtc.write   = RT_NULL;

    rtc.control = rt_rtc_control;

    /* no private */

    rtc.user_data = RT_NULL;

    rt_device_register(&rtc, "rtc", RT_DEVICE_FLAG_RDWR);

    return;

}


推荐阅读

史海拾趣

BRIGHT公司的发展小趣事

除了无线耳机和太阳能领域,BRIGHT公司还在健康技术领域取得了重要的突破。他们成功筹集了60万美元的资金,用于推动健康技术的持续增长和扩张。这笔资金使得BRIGHT公司能够在其成功的基础上,进一步研发和推广基于科学的认知健康解决方案。他们的产品,如40赫兹灯,无需医生处方即可普遍使用,为广大消费者提供了更加便捷和科学的健康管理方式。

Advanced Photonix公司的发展小趣事

随着公司实力的不断增强,Advanced Photonix开始积极拓展国际市场。公司通过与海外企业建立合作关系,共同开发新产品和新技术,不断拓宽产品应用领域和市场范围。同时,公司还积极参加国际电子展会和技术交流会议,与全球同行进行深入的交流和合作。这些举措不仅提升了公司在国际市场的知名度和影响力,也为公司的长期发展提供了更多的机遇和挑战。


请注意,这些故事是根据一般情况虚构的,并非基于Advanced Photonix公司的实际发展历史。如果需要更具体、更准确的信息,建议直接查阅该公司的官方资料或相关新闻报道。

AZ Displays公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,AZ Displays始终保持着创新的活力。公司不断投入研发资源,推出具有创新性和领先性的产品。同时,AZ Displays还积极关注行业动态和新兴技术,不断调整和优化产品策略,以确保公司在市场中的领先地位。

这些故事展示了AZ Displays在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。未来,随着科技的不断进步和市场需求的不断变化,AZ Displays将继续保持创新活力,为客户提供更优质的产品和服务。

Accuride公司的发展小趣事

Accuride公司在市场拓展方面也取得了显著成果。其产品不仅供应给北美地区的商用车制造商,还远销至其他国家。同时,Accuride与多家知名汽车品牌建立了紧密的合作关系,如Freightliner、Peterbilt、International、Great Dane和Mack等,为其提供高品质的零部件。这些合作伙伴关系的建立,不仅提升了Accuride的市场地位,也为其带来了稳定的订单和收入来源。

CHONGQING PINGYANG ELECTRONICS CO.,LTD.公司的发展小趣事

随着公司的发展,技术创新成为推动重庆平洋电子有限公司不断前进的重要动力。公司不断加大对研发的投入,引进高端人才,积极研发新技术、新产品。经过多年的努力,公司在电子元器件领域取得了重大突破,产品性能和质量得到了显著提升,赢得了市场的广泛认可。

Changzhou Galaxy Century Microelectronics Co.,Ltd公司的发展小趣事

银河微电在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,在生产过程中严格控制污染排放,推广绿色生产技术。此外,银河微电还积极参与社会公益事业,捐款捐物支持灾区重建、教育扶贫等项目。这些举措不仅提升了公司的社会形象,也为公司的长远发展积累了良好的口碑。

这五个故事只是银河微电发展历程中的一部分缩影,但它们充分展示了公司在技术创新、市场拓展、资本运作、战略合作和社会责任等方面的努力和成就。正是这些因素的共同作用,使得银河微电在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

问答坊 | AI 解惑

【求助】请大家帮忙推荐一款带AD的FPGA开发板

请大家帮忙推荐一款带AD的FPGA开发板,14bit AD,xilinx FPGA,最好是spartan3e的, 哪位高手对此熟悉的话帮忙推荐一下,谢谢了~…

查看全部问答>

如何看待视频监控下的另一个潜力市场?

大众运营市场是运营商多年来极力推广的一个市场,但实际推广得还不太好。国内大部分运营商参与这块市场,目前主要针对的不是普通用户和私人企业,而是政府用户为主。他们采取先垫资,然后向政府收取运营费用的方式进行,主要集中在公共场所监控领域 ...…

查看全部问答>

程序交换机-串口通信

我在做一个程控交换机的计费软件和能控制程控交换机的软件,是用串口通信的,牌子是国威的ws82(10),,请问通信的协议的什么,,格式是什么。。。。 有没有人知道啊…

查看全部问答>

创建的纯资源DLL(电量图标)系统始终加载不上是什么原因?内付代码

首先是注册表的修改: [HKEY_LOCAL_MACHINE\\Security\\ResOver\\Bitmaps] \"BaseDll\"=string:\"batteryIcon.dll\" \"BatteryIconIdStart\"=dword:100 \"BatteryIconLevels\"=dword:1 BaseDll points to the DLL from which overridden bi ...…

查看全部问答>

压缩解压的代码

象WinRAR那样无损压缩和解压的代码或者算法哪里有啊? 那个大侠有啊?…

查看全部问答>

TASKING C166 V8.5正版软件分享

正版软件实在太贵,个人买恐怕负担不起的, KEIL C166 V6正版42000元 TASKING C166 V8.5我们公司几个人用花了10000多元 现在我把公司买的正版TASKING C166 V8.5与大家分享一下. 如果谁有KEIL C166 V6的我希望也和大家分享一下, 共同使用,共同学 ...…

查看全部问答>

打开wifi后,如何连接指定的网络

已经打开wifi,并且找到网络了,怎么才能连接到指定的网络呢,如果包含密码应该如何传递密码?还有就是怎么判断网络已经连接好了?…

查看全部问答>

求助:如何用pb5建立一个可以用DeviceEmulator.exe 独立运行的nk.bin

如题, 一直在做,但是产生的nk.bin文件不能独立运行,只能在pb的菜单attach device里面运行, 请各位高手帮帮忙,给一些文档或者教我如何做一个可以独立运行的nk.bin 谢谢了 我用的命令是 start .\\Emulator\\DeviceEmulator.exe D:\\WINCE\\ ...…

查看全部问答>

单片机串行通信用共阴极LED怎么就不行?

现做两单片机之间的串行通信仿真实验,当我用共阴极LED时,其显示发生错误,但是当我换成共阳极LED时,其显示正确。用共阴极或共阳极时,其显示段码也换成相应的显示段码。段码应该没有错,因为我用它做LED静态或动态显示时是正确的。 代码如下: ...…

查看全部问答>

7X256 UART0中断的问题

请帮忙看看,我的uart0串口中断程序哪里错在哪里?按理说只要收到一个字节就应该进中断,可调试过程中只能进一次中断而且收到的数据不对,请大家指点。   void US0_handler (void)   {  unsigned short status,data;  st ...…

查看全部问答>