在网上看到说STM32的RTC用20pF的32768晶振会发生不起振的事,我这几天试了试第一次上电的时候的确会出现, 后来在晶振上并了只2.4M的电阻加大振荡电路的反馈,就很容易起振了!!
大家如果遇到不起振的话可以试一试,不知道管不管用。
如果行的通的话就不必非要用6pF负载电容的晶振了~~!!
有人已经声称解决了一个问题:
说32768的12p的启振时间长,他在配置RCC时加了延迟电路,我没有条件测试.
具体代码如下:
/*******************************************************************************
* Function Name : RTC_Configuration
* Description : Configures the RTC.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RTC_Configuration(void)
{
/* 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)
{
}
/* Select LSE as RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* 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();
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* 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();
}
上上代码中的" /* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{
}
"
改为:
u32 delay;
do
{
/* delay about 10ms */
for(delay = 0;delay < 90000;delay++);
/* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);
}while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) /* Wait till LSE is ready */
专营STM8/32
QQ 940436962
http://y-ec.taobao.com/ |