最近想看下DS1302内部RAM掉电后的状态,会是默认的全0x00么?
首先查阅网上的资料和芯片相关手册,并没有对它的介绍,DS1302是块很普通的时钟芯片,之前用别的单片机也操作过,但从来没有留意这点。决定操作下1302,看下RAM究竟是什么状态。
手头别的什么单片机都没有,就有块上次代理商留下的stm8L15X系列单片机demo板。那就用这块单片机试下吧。
首先配置系统时钟,在stm8的库文件(STM8S_StdPeriph_Lib_V2.1.0)里有相关的函数获取相关时钟状态,如下:
SysClkFreq = CLK_GetClockFreq();
SysClkSource = CLK_GetSYSCLKSource();
从返回值可以看出,芯片默认时钟为内部HSI,2MHz。
重新设置成16M,内部时钟:
/*set system clock*/
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
之后是DS1302的相关函数,DS1302.h文件如下:
#ifndef DS1302_H
#define DS1302_H
//DS1302相关PIN
#define DS1302_PORT GPIOC
#define DS1302_PORT_RST GPIOE
#define DS1302_RST_PIN GPIO_Pin_7
#define DS1302_IO_PIN GPIO_Pin_0
#define DS1302_CLK_PIN GPIO_Pin_7
#define DS1302_SEC_REG 0x80
#define DS1302_MIN_REG 0x82
#define DS1302_HR_REG 0x84
#define DS1302_DATE_REG 0x86
#define DS1302_MONTH_REG 0x88
#define DS1302_DAY_REG 0x8a
#define DS1302_YEAR_REG 0x8c
#define D