历史上的今天
今天是: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;
}
史海拾趣
|
请大家帮忙推荐一款带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 ...… 查看全部问答> |
|
正版软件实在太贵,个人买恐怕负担不起的, KEIL C166 V6正版42000元 TASKING C166 V8.5我们公司几个人用花了10000多元 现在我把公司买的正版TASKING C166 V8.5与大家分享一下. 如果谁有KEIL C166 V6的我希望也和大家分享一下, 共同使用,共同学 ...… 查看全部问答> |
|
求助:如何用pb5建立一个可以用DeviceEmulator.exe 独立运行的nk.bin 如题, 一直在做,但是产生的nk.bin文件不能独立运行,只能在pb的菜单attach device里面运行, 请各位高手帮帮忙,给一些文档或者教我如何做一个可以独立运行的nk.bin 谢谢了 我用的命令是 start .\\Emulator\\DeviceEmulator.exe D:\\WINCE\\ ...… 查看全部问答> |
|
现做两单片机之间的串行通信仿真实验,当我用共阴极LED时,其显示发生错误,但是当我换成共阳极LED时,其显示正确。用共阴极或共阳极时,其显示段码也换成相应的显示段码。段码应该没有错,因为我用它做LED静态或动态显示时是正确的。 代码如下: ...… 查看全部问答> |
|
请帮忙看看,我的uart0串口中断程序哪里错在哪里?按理说只要收到一个字节就应该进中断,可调试过程中只能进一次中断而且收到的数据不对,请大家指点。 void US0_handler (void) { unsigned short status,data; st ...… 查看全部问答> |




