打印
[STM32F1]

SD3078问题

[复制链接]
6814|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LianBinbing|  楼主 | 2018-1-18 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sd, ic, iic, ck, ST
有人用过SD3078 IC做实时时钟吗?我这写了个程序,IIC读不到应答ACK,不知道是什么原因?求大神指教,有STM32F10x的例程就更好了,万分感谢!
沙发
mmuuss586| | 2018-1-18 18:00 | 只看该作者
没有呢;
模拟IIC好了;
为啥不选DS1302呢

使用特权

评论回复
板凳
jiekou001| | 2018-1-18 20:28 | 只看该作者
51的程序有,要不要

使用特权

评论回复
地板
jiekou001| | 2018-1-18 20:29 | 只看该作者

//************************************************************
// 实时时钟SD30XX读写C51演示程序
// AT89S52   11.0592MHz
// E-mail:   FAE@whwave.com.cn
// TEL:                 0755-83114387
// Last update:                   2014/11/14
//************************************************************

#pragma code
#include <reg51.h>
#include <intrins.h>

#define                RTC_Address                        0x64                //RTC器件地址
#define                IDcode                                0x72                //8字节ID号起始地址
#define                Bat_bit8                        0x1A                //电量最高位寄存器地址
#define                Bat_Low8                        0x1B                //电量低八位寄存器地址

#define                true                          1
#define         false                         0

//*********变量及IO口定义*********
typedef unsigned char uchar;
typedef unsigned int uint;

sbit        SDA=P3^4;                
sbit        SCL=P3^5;               

uchar        Batbit8,Batlow7;        //电池电量寄存器值
uint          Bat;                        //电池电量值
uchar        Sram[8];                //通用数据缓存器
uchar        data1[8];                //通用数据缓存器
typedef        struct
{
        uchar         second;
        uchar        minute;
        uchar        hour;
        uchar        week;
        uchar        day;
        uchar        month;
        uchar        year;
}S_Time;       

S_Time  RTC={0x55,0x59,0x14,0x01,0x12,0x11,0x14};        //初始化时间结构体变量(设置时间:2014年11月12日 14:59:55  星期一)
//           55秒 59分 14时 周一 10日 11月 14年
/********SD30XX函数名********/
uchar I2CReadOneByte(uchar DeviceAddress,uchar add);//读一字节
bit I2CWriteOneByte(uchar DeviceAddress,uchar add, uchar date);//写一字节
uchar I2CReadSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps);//连续读
uchar I2CWriteSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps);//连续写
bit I2CWriteDate(S_Time        SetRTC);//写时间       
bit I2CReadDate(S_Time        *psRTC);//读时间
bit        WriteTimeOn(void);//写允许
bit        WriteTimeOff(void);//写禁止
void Delay(uint nn);

/*********I2C延时4us***********/
void I2CWait(void)//4us
{       
        _nop_();_nop_();_nop_();_nop_();//AT89S52一个nop是1us
}

/********开启SD30XX的I2C总线********/
bit I2CStart(void)
{
        SDA=1;
        SCL=1;
        I2CWait();
        if(!SDA)return false;        //SDA线为低电平则总线忙,退出
        SDA=0;
        I2CWait();
        while(SDA)return false;        //SDA线为高电平则总线出错,退出
        SCL=0;
        I2CWait();
        return true;
}

/********关闭SD30XX的I2C总线*******/
void I2CStop(void)
{
        SDA=0;
        SCL=0;
        I2CWait();
        SCL=1;
        I2CWait();
        SDA=1;
}

/*********发送 ACK*********/
void I2CAck(void)
{       
        SDA=0;
        SCL=0;
        I2CWait();
        SCL=1;
        I2CWait();
        SCL=0;
}

/*********发送NO ACK*********/
void I2CNoAck(void)
{       
        SDA=1;
        SCL=0;
        I2CWait();
        SCL=1;
        I2CWait();
        SCL=0;
}

/*********读取ACK信号*********/
bit I2CWaitAck(void)          //返回为:1=有ACK,0=无ACK
{
        SCL=0;
        SDA=1;                //设置SDA为输入(其它类型的单片机需要配置IO输入输出寄存器)
        I2CWait();
        SCL=1;
        I2CWait();
        while(SDA)
        {
                SCL=0;
                return false;
        }
        SCL=0;
        return true;
}

/************MCU向SD30XX发送一个字节*************/
void I2CSendByte(uchar demand) //数据从高位到低位//
{
        uchar i=8;                       
                                        
       
        while(i--)
        {
                SCL=0;
                _nop_();
                SDA=(bit)(demand&0x80);
                demand<<=1;
                I2CWait();
                SCL=1;
                I2CWait();
        }
        SCL=0;
}

/*********MCU从SD30XX读入一字节*********/
uchar I2CReceiveByte(void)      //数据从高位到低位//
{
        uchar i=8;
        uchar ddata=0;
        SDA=1;                        //设置SDA为输入(其它类型的单片机需要配置IO输入输出寄存器)
        while(i--)
        {
                ddata<<=1;      //数据从高位开始读取
                SCL=0;
                I2CWait();
                SCL=1;
                I2CWait();        //从高位开始 ddata|=SDA;ddata<<=1
                if(SDA)
                {
                        ddata|=0x01;
                }
        }
        SCL=0;
        return ddata;
}

/******I2C写一个字节******/
bit I2CWriteOneByte(uchar DeviceAddress,uchar add, uchar date)
{               
        if(!I2CStart())return false;
        I2CSendByte(DeviceAddress);      
        I2CWaitAck();   
        I2CSendByte(add);                //设置写地址      
        I2CWaitAck();       
        I2CSendByte(date);                //写数据
        I2CWaitAck();       
        I2CStop();
        return        true;
}

/******I2C读一个字节程序******/
uchar I2CReadOneByte(uchar DeviceAddress,uchar add)
{               
        uchar dat;
        if(!I2CStart())return false;
        I2CSendByte(DeviceAddress);      
        if(!I2CWaitAck()){I2CStop(); return false;}
          I2CSendByte(add);                //设置要读的地址
        I2CWaitAck();
        I2CStart();       
        I2CSendByte(DeviceAddress+1);       
        I2CWaitAck();       
        dat=I2CReceiveByte();                //读数据
        I2CNoAck();
        I2CStop();
        return  dat;
}

/******写SD30XX允许程序******/
bit WriteTimeOn(void)
{               
        if(!I2CWriteOneByte(RTC_Address,0x10,0x80))return false;
        I2CWriteOneByte(RTC_Address,0x0f,0xff);
        return        true;
}

/******写SD30XX禁止程序******/
bit WriteTimeOff(void)
{               
        if(!I2CWriteOneByte(RTC_Address,0x0f,0x7b))return false;
        I2CWriteOneByte(RTC_Address,0x10,0);
        return        true;
}

/******读SD30XX实时数据寄存器******/
bit I2CReadDate(S_Time        *psRTC)
{
       
        if(!I2CStart())return false;
        I2CSendByte(RTC_Address+1);
            if(!I2CWaitAck()){I2CStop(); return false;}
        psRTC->second=I2CReceiveByte();
        I2CAck();
        psRTC->minute=I2CReceiveByte();
        I2CAck();
        psRTC->hour=I2CReceiveByte();
        I2CAck();
        psRTC->week=I2CReceiveByte();
        I2CAck();
        psRTC->day=I2CReceiveByte();
        I2CAck();
        psRTC->month=I2CReceiveByte();
        I2CAck();
        psRTC->year=I2CReceiveByte();
        I2CNoAck();                //读时间完成,发送NoAck
        I2CStop();
        return        true;
}

/******写SD30XX实时数据寄存器******/
bit I2CWriteDate(S_Time        SetRTC)        //写时间操作要求一次对实时时间寄存器(00H~06H)依次写入,
{                               //不可以单独对7个时间数据中的某一位进行写操作,否则可能会引起时间数据的错误进位.
                                //要修改其中某一个数据 , 应一次性写入全部 7 个实时时钟数据.
        S_Time         *psRTC;
            psRTC=&SetRTC;
        WriteTimeOn();                                //使能,开锁
        if(!I2CStart())return false;
        I2CSendByte(RTC_Address);
        if(!I2CWaitAck()){I2CStop(); return false;}
        I2CSendByte(0x00);                        //设置写起始地址      
        I2CWaitAck();       
        I2CSendByte(psRTC->second);                //second     
        I2CWaitAck();       
        I2CSendByte(psRTC->minute);                //minute      
        I2CWaitAck();       
        I2CSendByte(psRTC->hour|0x80);                //hour ,同时设置小时寄存器最高位(0:为12小时制,1:为24小时制)
        I2CWaitAck();       
        I2CSendByte(psRTC->week);                //week      
        I2CWaitAck();       
        I2CSendByte(psRTC->day);                //day      
        I2CWaitAck();       
        I2CSendByte(psRTC->month);                //month      
        I2CWaitAck();       
        I2CSendByte(psRTC->year);                //year      
        I2CWaitAck();       
        I2CStop();
       
        WriteTimeOff();                                //使能,关锁
        return        true;
}


/******设置SD30XX报警中断演示程序演示******/
void WriteALARM(void)                                //设置报警时间:2015年2月14日 8:00
{                                                //只有设置未来的时间才有效
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x09,0x08);        //8时
        I2CWriteOneByte(RTC_Address,0x0b,0x14);        //14日
        I2CWriteOneByte(RTC_Address,0x0c,0x02);        //02月
        I2CWriteOneByte(RTC_Address,0x0d,0x15);        //15年
        I2CWriteOneByte(RTC_Address,0x0e,0x74);        //设置报警允许(使能年、月、日、小时报警)
        I2CWriteOneByte(RTC_Address,0x10,0x92);        //设置INT中断选通(INTS1,INTS0),及报警中断总允许位(INTAE)
        WriteTimeOff();
}

/******关闭SD30XX报警中断程序******/
void ClrALARM(void)                                //关闭报警中断
{
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x10,0x90);
        WriteTimeOff();
}
/******设置SD30XX倒计时中断演示******/
void SetDjs(void)                                //设置倒计时中断
{
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x10,0x0f);//先清倒计时中断总允许位(INTDE)
        I2CWriteOneByte(RTC_Address,0x10,0xf4);//设置周期性中断(IM=1)INT中断选通(INTS1,INTS0),配置倒计时中断总允许位(INTDE)
        I2CWriteOneByte(RTC_Address,0x11,0x30);//选择定时器频率源(TDS1、TDS0)为1/60HZ
        I2CWriteOneByte(RTC_Address,0x13,0x05);//倒计时初值寄存器,设置8位倒计时计数初值(5min)
        WriteTimeOff();
}

/******关闭SD30XX倒计时中断程序******/
void ClrDjs(void)         
{
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x10,0xf0);
        WriteTimeOff();
}
/******设置SD30XX频率中断演示******/
void SetFrq(void)                                       
{
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x10,0xa1);        //选通频率中断(INTS1,INTS0),设置频率中断总允许位(INTFE)
        I2CWriteOneByte(RTC_Address,0x11,0x09);        //设置2Hz频率中断
        WriteTimeOff();
}
/******关闭SD30XX频率中断******/
void ClrFrq(void)         
{
        WriteTimeOn();
        I2CWriteOneByte(RTC_Address,0x10,0xa0);
        WriteTimeOff();
}
//|************I2C连续读多个字节************|
uchar I2CReadSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps)
{
        uchar        i;
        if(!I2CStart())return false;
        I2CSendByte(DeviceAddress);      
        if(!I2CWaitAck()){I2CStop(); return false;}
          I2CSendByte(Address);                        //设置要读的地址
        I2CWaitAck();
        I2CStart();       
        I2CSendByte(DeviceAddress+1);
        I2CWaitAck();
        for(i=0;i<length-1;i++,ps++)
        {
                *ps=I2CReceiveByte();                //读数据
                I2CAck();
        }
        *ps=I2CReceiveByte();       
        I2CNoAck();
        I2CStop();
        return        true;
}

//|******************I2C连续写多个字节******************|
uchar I2CWriteSerial(uchar DeviceAddress, uchar Address, uchar length,uchar *ps)
{
        uchar        i;
        if(!WriteTimeOn())return false;
        if(!I2CStart())return false;
        I2CSendByte(DeviceAddress);      //器件地址
        if(!I2CWaitAck()){I2CStop(); return false;}
          I2CSendByte(Address);                //设置起始地址
        I2CWaitAck();
        for(i=0;i<length;i++)
        {
                I2CSendByte(*(ps++));               
                I2CAck();                                       
        }
        I2CStop();
        WriteTimeOff();
        return        true;
}

/*********延时子程序*********/
void Delay2_5ms()      //延时2.5ms
{
        uchar        i=255;
        while(i--);
}

void Delayms(uchar n)
{
        while(n--)
                Delay2_5ms();
}
//////*****主程序演示*****//////
void main()
{

        I2CWriteDate(RTC);        //设置时间演示
//        WriteALARM();            //设置报警中断时间演示
//        SetDjs();                         //设置倒计时中断演示
        SetFrq();                        //设置频率中断演示
       
        I2CReadSerial(RTC_Address,IDcode,8,Sram);                //读内部8字节ID号
        I2CWriteSerial(RTC_Address,0x30,8,Sram);                //把内部8字节的ID号写入用户通用存储器的0x30-0x37地址
       
        I2CReadSerial(RTC_Address,0x30,8,data1);                //读从用户RAM寄存器把先前存入的ID号读出来(0x30-0x37地址)
        Batbit8=I2CReadOneByte(RTC_Address,Bat_bit8);                //读SD30XX的电池电量最高位
        Batlow7=I2CReadOneByte(RTC_Address,Bat_Low8);                //读SD30XX的电池电量低八位
        Bat=(Batbit8>>7)*255+Batlow7;                                //计算电池电量值演示。如Bat=285则表示2.85V

    while(1)
        {
                I2CReadDate(&RTC);                //读时间演示
                Delayms(100);                        //延时250ms,1s读4次
            }

}
//特别提醒:当写实时时间数据时 (00H~06H), 不可以单独 对 7 个时间数据中的某一位进行写操作 ,
//否则可能会引起时间数据的错误进位 , 所以要修改其中某一个数据 , 应一次性写入全部 7 个实时时钟数据 .

使用特权

评论回复
5
jiekou001| | 2018-1-18 20:29 | 只看该作者
一会儿给你找找32的

使用特权

评论回复
6
jiekou001| | 2018-1-18 20:31 | 只看该作者
SD3088_STM32_demo.rar (400.63 KB)



使用特权

评论回复
7
jiekou001| | 2018-1-18 20:32 | 只看该作者

     SD3078是一种具有标准IIC接口的实时时钟芯片,CPU可使用该接口通过7位地址寻址来读写片内122字节寄存器的数据(包括时间寄存器、报警寄存器、控制寄存器、用户SRAM寄存器及ID码寄存器)。
    SD3078内置晶振及数字温度计,用户可以不用顾虑因外接晶振、谐振电容等所带来的元件匹配误差问题、晶振温度特性问题及可靠性问题,实现在常温及宽温范围内不需用户干预、全自动、全电源环境补偿的高精度、高可靠计时功能。
           
主要性能特点:
l 低功耗: 0.8μA 典型值(VBAT =3.0V,Ta=25℃)。   
l 工作电压:2.7V~5.5V,工作温度为-40℃~+85℃。
l 标准IIC总线接口方式,最高速度400KHZ(4.5V~5.5V)。
l 年、月、日、星期、时、分、秒的BCD码输入/输出,并可通过独立的地址访问各时间寄存器。
l 闰年自动调整功能(从2000年~2099年)。
l 可选择12/24小时制式.
l 内置年、月、日、星期、时、分、秒共7字节的报警数据寄存器及1字节的报警允许寄存器,共有96种组合报警
   方式,并有单事件报警和周期性报警两种中断输出模式,报警时间最长可设至100年。
l 周期性频率中断输出:从4096Hz~1/16Hz……1秒共十四种方波脉冲.
l 自动重置的三字节共24位的倒计时定时器,可选的4种时钟源(4096HZ、1024HZ、1秒、1分钟),最小定时为244us,最长定时可到31年,通过计算可获得较精确的毫秒级定时值。
l 三种中断均可选择从INT脚输出,并具有两个中断标志位.
l 内置70字节通用SRAM寄存器可用于存储用户的一般数据。
l 具有可控的32768HZ方波输出脚F32K,可以位允许/禁止32K输出。
l 内置8bit转换结果的数字温度传感器,为了节省电池电量消耗,设为VDD模式下60S间隔测温一次,电池模式600S间隔测温一次。
l 内置晶振和谐振电容,芯片内部通过高精度补偿方法,实现在宽温范围内高精度的计时功能,其中25℃精度<±3.8ppm(即每月误差10S)。     
l 具有一次性或充电的后备电池输入脚VBAT ,其内部的3.3V稳压充电电路可选择性地对外接的充电电池进行自动充电,内置的充电限流电阻可位选2KΩ、5KΩ和10KΩ三种。
l 内置电池电压检测功能,可读取当前电池电压值(三位有效数),设置高低电池报警电压值并从INT脚输出中断。
l 芯片依据不同的电压自动从VDD切换到VBAT或从VBAT切换到VDD。当芯片检测到主电源VDD掉到2.4V电压以下且VDD小于VBAT,芯片会转为由接在VBAT的后备电池供电;当VDD大于VBAT或VDD大于2.4V,则芯片会转为由VDD供电。(内置电源模式指示位PMF,VDD模式时PMF=0,VBAT模式时PMF=1)。
l 内置8字节的ID码(OTP型),芯片出厂之前设定的、全球唯一的身份识别码。
l 内置IIC总线0.5秒自动复位功能(从Start命令开始计时),该功能可以避免IIC总线挂死问题。
l 内置三个时钟数据写保护位, 避免对数据的误写操作,可更好地保护数据。
l 内置软件可控VBAT模式IIC总线通信禁止功能(BATIIC=0,VBAT模式下禁止IIC通信;BATIIC=1,VBAT模式下允许IIC通信.上电默认值BATIIC=0),从而避免在电池供电时CPU对时钟操作所消耗的电池电量,也可避免在VDD上、下电的过程中因CPU的I/O端口所输出的不受控的杂波信号对时钟芯片的误写操作,进一步提高时钟芯片的可靠性。
l 内置上电指示位RTCF,当包括电池在内的所有电源第一次上电时该位置1。
l 内置电池电压欠压指示位BLF,当电池电压低于2.2V时BLF位置1。 
l 内置停振检测位OSF,当内部振荡器停止振荡时该位置1。 
l 芯片管脚抗静电(ESD)>2KV。
l 芯片在兴威帆的评估板上可通过4KV的群脉冲(EFT)干扰。
l CMOS 工艺
l 封装形式:SOP8(宽度208mil)。

使用特权

评论回复
8
jiekou001| | 2018-1-18 20:32 | 只看该作者
//************************************************************
// 实时时钟SD30XX读写STM8参考程序
// MCU: STM8S103F3
// Last update:              2017/7/19
//************************************************************

#include "stm8s103f3p.h"

#define uchar unsigned char
#define SCL_H  PC_ODR |= 0X08
#define SDA_H  PA_ODR |= 0X08
#define SCL_L  PC_ODR &= 0XF7
#define SDA_L  PA_ODR &= 0XF7
#define SDAM  ((PA_IDR & 0X08) >> 3)
#define SET_SCL_OUT()    {PC_DDR |= 0X08; PC_CR1 |= 0X08; PC_CR2 &= 0XF7;}//scl选择管脚为PC3
#define SET_SDA_OUT()    {PA_DDR |= 0X08; PA_CR1 |= 0X08; PA_CR2 &= 0XF7;}//sda选择管脚为PA3
#define SET_SDA_IN()     {PA_DDR &= 0XF7; PA_CR1 &= 0XF7; PA_CR2 &= 0XF7;}//浮空输入

uchar s_data[7] = {0};

void GPIO_I2c_Master_Init(void)
{
  I2C_CR1 &= 0xFE;      
  SET_SCL_OUT();    //PC3 输出;推挽;2MHz时钟;
  SET_SDA_OUT();    //PA3 输出;推挽;2MHz时钟;
}

void Delay_5us(void)
{
  uchar i = 10;    //fcpu 16MHz

  for (; i > 0; i--);
}

void I2C_Start(void)//起始信号
{
  SDA_H;                    
  SCL_H;                    
  Delay_5us();               
  SDA_L;                  
  Delay_5us();               
  SCL_L;                    
}

void I2C_Stop(void)//结束信号
{
  SDA_L;                  
  SCL_H;                  
  Delay_5us();               
  SDA_H;                  
  Delay_5us();               
}

void I2C_SendACK(uchar ack)//应答或者非应答信号
{
  if (ack == 0)
  {
    SDA_L;
  }
  else
  {
    SDA_H;
  }
  SCL_H;                  
  Delay_5us();  
  
  SCL_L;                    
  Delay_5us();     
}

uchar I2C_SendByte(uchar sendDAT)//发送字节
{
  uchar i = 0;
  uchar revack = 0;

  for (i= 0 ; i< 8; i++)         
  {
    SCL_L;               
    Delay_5us();  
  
    if (sendDAT & 0x80)  
    {
      SDA_H;
    }
    else  
    {      
      SDA_L;
    }
    sendDAT <<=  1;
    SCL_H;               
    Delay_5us();     
  }
  SCL_L;               
  Delay_5us();  
  SET_SDA_IN();
  SCL_H;   
  _asm("nop");
  _asm("nop");
  revack = (uchar)SDAM;
  Delay_5us();   
  SCL_L;   
  SET_SDA_OUT();
  Delay_5us();  

  return revack;
}

uchar I2C_RecvByte(void)//接收字节
{
  uchar i = 0;
  uchar revDAT = 0;
  
  SDA_H;  
  SET_SDA_IN();
  for (i = 0; i < 8; i++)         
  {
     revDAT <<= 1;      
     SCL_H;
     _asm("nop");
     _asm("nop");
     if (SDAM)
     {
        revDAT |= 0x01;
     }
     else
     {
        revDAT &= 0xfe;
     }

     Delay_5us();
     SCL_L;               
     Delay_5us();  
  }   
  SET_SDA_OUT();
  
  return revDAT;
}

void WriteOn(void)//打开写保护
{
  I2C_Start();
  I2C_SendByte(0x64);
  I2C_SendByte(0x10);
  I2C_SendByte(0x80);
  I2C_Stop();
  
  I2C_Start();
  I2C_SendByte(0x64);
  I2C_SendByte(0x0f);
  I2C_SendByte(0x84);
  I2C_Stop();
}

void WriteOff(void)//关闭写保护
{
  I2C_Start();
  I2C_SendByte(0x64);
  I2C_SendByte(0x10);
  I2C_SendByte(0x00);
  I2C_Stop();
  
  I2C_Start();
  I2C_SendByte(0x64);
  I2C_SendByte(0x0f);
  I2C_SendByte(0x00);
  I2C_Stop();
}

void read_time_from_sd30xx(void)//从sd30xx读时间
{
  uchar n = 0;

  I2C_Start();
  if (I2C_SendByte(0x65))
  {
    I2C_Stop();

    return;
  }
  for (n = 0; n < 7; n++)
  {
    s_data[n] = I2C_RecvByte();
    if (n == 6)
    {
      I2C_SendACK(1);
    }
    I2C_SendACK(0);
  }
  I2C_Stop();
}



void write_time_to_sd30xx(void)//写时间到sd30xx
{
  uchar n = 0;

  WriteOn();
  
  I2C_Start();
  I2C_SendByte(0x64);
  I2C_SendByte(0x00);
  for (n = 0; n < 7; n++)
  {
    I2C_SendByte(s_data[n]);
  }
  I2C_Stop();
  
  WriteOff();
}

使用特权

评论回复
9
LianBinbing|  楼主 | 2018-1-19 08:33 | 只看该作者

谢谢!谢谢!真是太感谢了!

使用特权

评论回复
10
dsyq| | 2018-7-2 09:23 | 只看该作者
请教楼上各位,这个芯片稳定不稳定啊

使用特权

评论回复
11
DENGXUEYING| | 2019-4-15 16:31 | 只看该作者
有谁弄过STM32F030R8T6的的PCF8563实时时钟芯片的求分享代码

使用特权

评论回复
12
manufact| | 2019-4-15 21:44 | 只看该作者
用过PCF8563,还不错,比较好用

使用特权

评论回复
13
KloppGuo| | 2020-2-26 10:57 | 只看该作者
我现在是不明白 如何去调整时间?谁有这方面的历程可以参考下

使用特权

评论回复
14
归依龙井| | 2022-9-27 18:19 | 只看该作者
本帖最后由 归依龙井 于 2022-10-11 11:52 编辑

SD3077官网32例程说设置成推挽会有问题?有谁遇到过吗?

使用特权

评论回复
15
wenfen| | 2022-10-13 22:29 | 只看该作者
选DS1302

使用特权

评论回复
16
月亮一键变蓝| | 2022-10-15 19:57 | 只看该作者
读不到应答的话,你看硬件是否连接正确,然后再用逻辑分析仪抓一下波形吧

使用特权

评论回复
17
失物招領| | 2022-10-15 20:19 | 只看该作者
话说,这时钟IC好用不呢?正常都是用8010或者DS1302

使用特权

评论回复
18
温室雏菊| | 2022-10-15 20:41 | 只看该作者
如果对时钟要求精度不是很高,就用内置的RTC也是可以的

使用特权

评论回复
19
风凉| | 2022-10-15 21:03 | 只看该作者
你这个单片机采用的硬件I2CDS3078相连接的么?

使用特权

评论回复
20
捧一束彼岸花| | 2022-10-15 21:25 | 只看该作者
不是很建议使用STM32F1的硬件I2C哈,听说不是很稳

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

129

帖子

2

粉丝