STM32与DS1302的接口电路

发布者:书香墨意最新更新时间:2018-06-25 来源: eefocus关键字:STM32  DS1302  接口电路 手机看文章 扫描二维码
随时随地手机看文章

(1)硬件 CLK---PA4,  DAT--- PA5, RST--- PA6

(2)硬件初始化 CLK与RST均为输出,而DAT是开漏型的输出。因为在这种方式下,IO口的读仍然存在,因此是真正的双向IO模式。


/*DSCK -PA4 DAT PA5 RST DAT*/
#define ds1302Clk GPIO_Pin_4   //与时钟线相连的芯片的管脚
#define ds1302Dat GPIO_Pin_5   //与数据线相连的芯片的管脚
#define ds1302Rst GPIO_Pin_6   //与复位端相连的芯片的管脚


/* PA 4,6,为输出*/
 GPIO_InitStructure.GPIO_Pin =  ds1302Clk | ds1302Rst ;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);


//PA5配置为开漏模式,此模式下可以实现真下的双向IO
 GPIO_InitStructure.GPIO_Pin =  ds1302Dat;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
   GPIO_Init(GPIOA, &GPIO_InitStructure);


(3)配置完毕,然后实现的代码就很简单了,从现成的代码移植过来。

#define WrEnDisCmd  0x8e  //写允许/禁止指令代码
#define WrEnDat     0x00 //写允许数据
#define WrDisDat    0x80 //写禁止数据
#define OscEnDisCmd 0x80 //振荡器允许/禁止指令代码
#define OscEnDat    0x00 //振荡器允许数据
#define OscDisDat   0x80 //振荡器禁止数据
#define WrMulti     0xbe //写入多个字节的指令代码
#define WrSingle    0x84 //写入单个字节的指令代码
#define RdMulti  0xbf //读出多个字节的指令代码


////以上这些#define均放在一个ds1302.h文件中。

void SendDat_1302(u8 Dat)
{ u8 i;
 u8 cTmp;
 for(i=0;i<8;i++)
 { 
   cTmp=Dat&LSB; //数据端等于tmp数据的末位值
  if(cTmp)    //1
      GPIO_SetBits(GPIOA,ds1302Dat);
  else
   GPIO_ResetBits(GPIOA,ds1302Dat); 
  Dat>>=1;
  GPIO_SetBits(GPIOA,ds1302Clk);
  uDelay(1);
  GPIO_ResetBits(GPIOA,ds1302Clk);
 }
}
/*写入1个或者多个字节,第1个参数是相关命令
#define WrMulti     0xbe //写入多个字节的指令代码
#define WrSingle    0x84 //写入单个字节的指令代码
第2个参数是待写入的值
第3个参数是待写入数组的指针
*/ 
void WriteByte_1302(u8 CmdDat,u8 Num,u8 *pSend)

 u8 i=0;
 GPIO_ResetBits(GPIOA,ds1302Rst);
 uDelay(1);
 GPIO_SetBits(GPIOA,ds1302Rst);
 SendDat_1302(CmdDat);
 for(i=0;i { SendDat_1302(*(pSend+i));
 }
 GPIO_ResetBits(GPIOA,ds1302Rst);
}
/*读出字节,第一个参数是命令
 #define RdMulti  0xbf //读出多个字节的指令代码
 第2个参数是读出的字节数,第3个是指收数据数组指针
 */
void RecByte_1302(u8 CmdDat,u8 Num,u8 *pRec)

 u8 i,j,tmp,cTmp;
 GPIO_ResetBits(GPIOA,ds1302Rst);//复位引脚为低电平
 uDelay(1);
 GPIO_ResetBits(GPIOA,ds1302Clk);
 uDelay(1);
 GPIO_SetBits(GPIOA,ds1302Rst);
 SendDat_1302(CmdDat); //发送命令
 for(i=0;i { for(j=0;j<8;j++)
  { tmp>>=1;
   cTmp=GPIO_ReadInputDataBit(GPIOA,ds1302Dat);
   if(cTmp)
    tmp|=0x80;
   GPIO_SetBits(GPIOA,ds1302Clk);
   uDelay(1);
   GPIO_ResetBits(GPIOA,ds1302Clk);       
  }
  *(pRec+i)=tmp;
 }
 uDelay(1);
 GPIO_ResetBits(GPIOA,ds1302Rst);//复位引脚为低电平

}

/*
当写保护寄存器的最高位为0时,允许数据写入寄存器。
写保护寄存器可以通过命令字节8E、8F来规定禁止写入/读出。写保护位不能在多字节传送模式下写入。
当写保护寄存器的最高位为1时,禁止数据写入寄存器。

时钟停止位操作:当把秒寄存器的第7位时钟停止位设置为0时起动时钟开始
当把秒寄存器的第7位时钟停止位设置为1时,时钟振荡器停止。
   
    根据传入的参数决定相关命令,
 第一个参数:命令字,第2个参数:写入的数据
 写允许命令;8EH,00H
 写禁止命令;8EH,80H
 振荡器允许命令;80H,00H
 振荡器禁止命令;80H,80H
*/
void WrCmd(u8 CmdDat,u8 CmdWord)
{ u8 CmdBuf[2];
 CmdBuf[0]=CmdWord;
 WriteByte_1302(CmdDat,1,CmdBuf);
}

main函数中调用如下:

 u8 Ds1302SendBuf[8]={0x30,0x32,0x01,0x10,0x01,0x01,0x08,33};  //发送数据缓冲区
 u8 Ds1302RecBuf[8];    //接收数据缓冲区
 WrCmd(WrEnDisCmd,WrEnDat);  //写允许
 WrCmd(OscEnDisCmd,OscEnDat); //振荡器允许
 WriteByte(WrMulti,8,Ds1302SendBuf);//将时间值送到DS1302中
 RecByte(RdMulti,8,Ds1302RecBuf); // 读出来看看


关键字:STM32  DS1302  接口电路 引用地址:STM32与DS1302的接口电路

上一篇:一个完整的DS1302时钟在STM32上的应用实例
下一篇:stm32+DS1302+TM1638驱动程序

推荐阅读最新更新时间:2024-03-16 16:06

stm32外部晶振经倍频后提供系统时钟常用设置
void RCC_Configuration(void) { RCC_DeInit(); //将外设 RCC寄存器重设为缺省值(即默认值) RCC_HSEConfig(RCC_HSE_ON);//打开外部晶振 if(RCC_WaitForHSEStartUp() == SUCCESS) //判断起振是否成功 { RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK)(这时设置为=系统时钟) RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(HCLK2)(这时设置为=HCLK) RCC_PCLK1Co
[单片机]
STM32将常量数组定义到FLASH固定地址
方法:static const uint8_t s_acBmpLogo030 __attribute__((at(0X800F000)))={0x80,0xC0,0xC0,0xC0,0xC0,0x80,xxxxxxx} 编译之后可在.map文件看到其分配到的地址 0x0800f000 0x0000005c Data RO 4013 .ARM.__AT_0x0800F000 main.o 这是从调试窗口查看的flash数据
[单片机]
<font color='red'>STM32</font>将常量数组定义到FLASH固定地址
STM32学习笔记——AFIO时钟的配置问题
最近在写程序时发现设置外部中断出了问题,之前的程序好好的怎么就不能用了呢?经过了一晚上的折腾发现问题出在AFIO时钟的配置上,我没有使能AFIO时钟。 什么时候要开启AFIO呢?参考手册: 说的很明白,操作AFIO的三类寄存器时需要开启: 1.事件控制寄存器(AFIO_EVCR) 2.复用重映射和调试I/O配置寄存器(AFIO_MAPR) 3.外部中断配置寄存器x(AFIO_EXTICRx) 这三类其实是AFIO的全部寄存器, AFIO_EVCR是事件相关的,AFIO_MAPR是与重映射和调试I/O相关的,AFIO_EXTICRx是与外部中断相关的。因此管脚重映射和调试I/O配置、外部中断、事件时需开启AFIO。 再回
[单片机]
<font color='red'>STM32</font>学习笔记——AFIO时钟的配置问题
stm32:查询法使用pt2262/pt2272无线模块
pt2262/pt2272的工作原理就是按下遥控器的按键之后,接收器的相对应引脚上就会产生一个高电平。该程序实现的功能就是遥控器按下之后,红灯亮起。采用查询法检测引脚是否为高电平。 //初始化接收器的相对应的IO口 void KEY1_Config(void) { GPIO_InitTypeDef GPIO_Struct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //由于检测高电平,所以设置为下拉模式,可理解为,该io口为低电平 GPIO_Struct.GPIO_Mode=GPIO_Mode_IPD; GPIO_Struct.GPIO_
[单片机]
PIC单片机(PIC16F877A)DS1302芯片程序
#include pic.h typedef unsigned char uchar; typedef unsigned int uint; #define rs_h PORTC|=0x01 #define rs_l PORTC&=0xfe #define rw_h PORTC|=0x02 #define rw_l PORTC&=0xfd #define en_h PORTC|=0x04 #define en_l PORTC&=0xfb #define rst_h PORTC|=0x08 #define rst_l PORTC&=0xf7 #define sck_h PORTC|=0x10 #defin
[单片机]
PIC单片机(PIC16F877A)<font color='red'>DS1302</font>芯片程序
零基础入门STM32定时器配置及其中断设置
  我们大家都知道STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的。就拿tiM2举例说明。在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的,让人看起来一头雾水,对于初学者很是不利(我也是初学者)。下面我将自己的定时器设置过程一一记录下来,以供大家参考,我们共同学习……   首先定义定时器头文件,也就是定义寄存器以供操作:   #define TIM2_CR1 (*((volatile unsigned long *)0x40000000))   #define TIM2_CR2 (*((volatile unsigned long *)0x40000004))   #define
[单片机]
stm32中AMBA、AHB、APB总系介绍
AMBA(advanced microcontroller bus architecture )片上总线是由ARM公司推出的。 AMBA规范主要包括了:AHB(Advanced High-performance Bus)系统总线和 APB(Advanced Peripheral Bus) 外围总线。其中,AHB的相互连接采用了传统的带有主模块和从模块的共享总线,接口与互连功能分离,这对芯片上模块之间的互连具有重要意义。AMBA已不仅是一种总线,更是一种带有接口模块的互连体系。 基于AMBA的片上系统 一个典型的基于AMBA总线的系统框图如图3所示。 大多数挂在总线上的模块(包括处理器)只是单一属性的功能模块:主模块或者
[单片机]
<font color='red'>stm32</font>中AMBA、AHB、APB总系介绍
STM32的一些基本知识总结
Cortex-M3缩略语 AMBA:先进单片机总线架构 ADK:AMBA设计套件 AHB:先进高性能总线 AHB-AP:AHB访问端口 APB:先进外设总线 ARM ARM:ARM架构参考手册 ASIC:行业领域专用集成电路 ATB :先进跟踪总线 BE8:字节不变式大端模式 CPI:每条指令的周期数 DAP:调试访问端口 DSP:数字信号处理(器) DWT:数据观察点及跟踪 ETM:嵌入式跟踪宏单元 FPB:闪存地址重载及断点 FSR:fault状态寄存器 HTM:Core Sight AHB跟踪宏单元 ICE:在线仿真器 IDE:集成开发环境 IRQ:中断请求(通常是外中断请求) ISA:指令系统架构 ISR:中断服务例程 I
[单片机]
<font color='red'>STM32</font>的一些基本知识总结
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved