OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3226|回复: 2

STM32驱动DS1302,读出来一直是零,用示波器测量有输入信号,没有输出信号,是不是片子有问题?

[复制链接]

13

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2014-8-4
在线时间
56 小时
发表于 2016-1-19 17:26:25 | 显示全部楼层 |阅读模式
程序如下:#include "ds1302.h"#include "delay.h"


//TIME_TYPEDef Rtc_time;

void DS1302_IO_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);        //½«GPIOBê±Öó′ò¿a (¸′óÃê±Öó′ò¿a)
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);                //JTAG-DP ê§Äü+ SW-DP ê1Äü
       
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;                        //íÆíìêä3ö
        GPIO_InitStructure.GPIO_Pin=DSCLK|DSIO|DSRST;                                          //IO¿ú
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;                        //êä3öÆμÂê
        GPIO_Init(GPIOB,&GPIO_InitStructure);                                                //½øDD3õê¼»ˉéèÖÃ

        GPIO_ResetBits(GPIOB,DSCLK|DSIO|DSRST);                        //éèÖÃÎaáã
}
/*********************
**ÏòDS130D′èëò»¸ö×Ö½úμÄêy¾Y
//SCLKÔúéÏéyÑØê±½«êy¾YD′èëDS1302ÖD
*********************/
void DS1302_WriteByte(u8 dat)
{
         u8 i=0;
         DS1302_SDA_OUT();
         for(i=0;i<8;i++)
         {
                        DS1302_SCK=0;
                 DS1302_SDA=dat&(0x01<<i);
//                        if(dat&0x01)DS1302_SDA=1;
//                        else DS1302_SDA=0;
//                        dat >>=1;
                        delay_us(1);
                        DS1302_SCK=1;
                }
}
/*********************
**′óDS1302&#182;áè&#161;ò&#187;&#184;&#246;×&#214;&#189;úμ&#196;êy&#190;Y
//DS1302&#212;ú&#207;&#194;&#189;μ&#209;&#216;μ&#196;ê±oò&#189;μêy&#190;Y&#182;á3&#246;à′
*********************/
unsigned char DS1302_ReadByte(void)
{
        u8 i=0,dat=0;
        DS1302_SDA_IN();                //éè&#214;&#195;&#206;aê&#228;è&#235;&#191;ú
        for(i=0;i<8;i++)
        {
                DS1302_SCK=0;
                dat>>=1;               
                if(DS1302_IN_SDA==1)
                {dat |=0x80;}
                delay_us(1);
                DS1302_SCK=1;
        }
        return (dat);
       
}
/************************
**1|&#196;ü£o&#212;úμ&#216;&#214;·é&#207;D′êy&#190;Y
***********************/
void DS1302_WriteData(u8 addr,u8 date)
{
         DS1302_RST=0;
         DS1302_SCK=0;
         DS1302_RST=1;
         DS1302_WriteByte(addr);
         DS1302_WriteByte(date);
         DS1302_SCK=1;
         DS1302_RST=0;

}

/************************
**1|&#196;ü£o&#182;áè&#161;DS1302μ&#196;êy&#190;Y
***********************/
u8 DS1302_ReadData(u8 addr)
{
         u8 value=0;
       
         DS1302_RST=0;
         DS1302_SCK=0;
         DS1302_RST=1;
         DS1302_WriteByte(addr);
         value=DS1302_ReadByte();
         DS1302_SCK=0;
         DS1302_RST=0;
         return (value);
}
/************************
**oˉêy DS1302_GetTime
**1|&#196;ü£o&#182;áè&#161;μ±&#199;°ê±&#188;&#228;£&#172;ò&#212;·&#189;±&#227;μ÷ó&#195;
***********************/
void DS1302_GetTime1(unsigned char *miao,unsigned char *fen,unsigned char *shi,unsigned char *ri,unsigned char *yue)
{
                *miao = DS1302_ReadData(0x81);
                *fen  = DS1302_ReadData(0x83);
                *shi  = DS1302_ReadData(0x85);   
                *ri   = DS1302_ReadData(0x87);
                *yue  = DS1302_ReadData(0x89);
}

/************************
**oˉêy DS1302_Initial()
**1|&#196;ü£o&#182;&#212;DS1302&#189;&#248;DD3&#245;ê&#188;&#187;ˉ
***********************/
void DS1302_Initial(void)
{       
                DS1302_IO_Init();
                delay_us(10);
                DS1302_RST=0;
                DS1302_SCK=0;
       
          DS1302_WriteData(0x8e, 0x00); //&#212;êDíD′2ù×÷       
               
                DS1302_WriteData(0x8c, 0x15);        //&#196;ê
                DS1302_WriteData(0x8a, 0x05);        //D&#199;&#198;ú
                DS1302_WriteData(0x88, 0x11);        //&#212;&#194;
                DS1302_WriteData(0x86, 0x13);        //è&#213;
                DS1302_WriteData(0x84, 0x11);        //D&#161;ê±
                DS1302_WriteData(0x82, 0x11);  //·&#214;&#214;ó
                DS1302_WriteData(0x80, 0x00);  //&#195;&#235;
               
                DS1302_WriteData(0xc0, 0x55);  //D′è&#235;3&#245;ê&#188;&#187;ˉ±ê&#214;&#190;RAM
       
    DS1302_WriteData(0x8e, 0x80);   //D′±£&#187;¤          
}



#ifndef __DS1302_H
#define __DS1302_H                

#include "sys.h"

#define DS1302_SDA_IN()  {GPIOB->CRL &= 0xfff0ffff;GPIOC->CRL |= 8<<16;}                //éè&#214;&#195;&#206;a&#191;a&#194;¥ê&#228;3&#246;
#define DS1302_SDA_OUT() {GPIOB->CRL &= 0xfff0ffff;GPIOC->CRL |= 0xa<<16;}                //òaéè&#214;&#195;&#206;aí&#198;íìê&#228;3&#246;


#define DS1302_RST                        PBout(5)        //RST
#define DS1302_SCK                        PBout(3)        //SCL
#define DS1302_SDA            PBout(4)        //SDA
#define DS1302_IN_SDA                PBin(4)                //

#define DSCLK GPIO_Pin_3
#define DSIO  GPIO_Pin_4


在吃苦的年纪,何必那么安逸?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
270
金钱
270
注册时间
2014-8-4
在线时间
56 小时
 楼主| 发表于 2016-1-19 17:28:13 | 显示全部楼层
望大神有时间帮我看下!在此谢谢
在吃苦的年纪,何必那么安逸?
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-1-19 18:48:37 | 显示全部楼层
1.发帖违规
2.你这种问题方式,别抱太大希望
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 16:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表