欢迎使用CSDN-markdown编辑器

本文记录了作者在使用STM32驱动DS1302时遇到的问题及解决方案。首先,RTC初始化时遇到卡死,通过调整硬件和初始化顺序得以解决。随后,DS1302驱动中发现IO口配置、读写时序的问题,通过更改为开漏输出和修正读取时序后,问题得到解决。文章强调了对时序的精确控制和硬件匹配的重要性,并分享了相关函数实现。
摘要由CSDN通过智能技术生成

被DS1302折腾的两天

前两天公司修改代码,之前走时采用的是STM32的RTC,但是RTC很坑爹。经常出现卡死在初始化配置的时候
`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_NVIC_Configuration();
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();

}`
后来找到方法解决了,但是仍然有少数的板子进不去,解决方法如下:
1.在进入RTC_Configuration(void)之前先对备份域的时钟和电源的时钟初始化
这里写图片描述
2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值