当前位置:首页 > 单片机 > 单片机
[导读]由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!1、所谓的DS1302这里面也指

由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧!

1、所谓的DS1302


这里面也指明了简单的SPI协议

然后就直接上代码了,注释很详细的!基本实现单行注释

1、主函数main


#include"stm32f10x.h"

#include"SysTick.h"

#include"Delay.h"

#include"Usart.h"

#include"stdio.h"

#include"DS1302.h"

/*******由于没有做外设测试的程序是:按键PA0仅一个LED灯******/

/*******由于没有做外设测试的程序是:串口采用的是PA9->(T<->T),PA9->(R<->R)*****/

/*******由于没有做外设测试的程序是:ds1302clk<->PA4

ds1302dat<->PA5

ds1302rst<->PA6*****/

externuint8_twrite[];

externuint8_tread[];

intmain(void)

{

//uint8_ttime[]={0,0,12,11,11,1,13};

//初始化系统定时器

SysTick_Init();

USART1_Config();

ds1302_GPIO_Configuration();//一定别忘记了配置GPIO

printf("rn("__DATE__"-"__TIME__")rn");

//ds1302_init(write,time);//设置1302的初始时间

ds1302_data(read);

while(1);//这个得加,不然的话会有尾巴是乱码!!!

}



/*******************************************************************************

**文件名称:ds1302.c

**编译环境:RealViewMDK-ARM4.53

**文件作者:

**功能说明:ds1302相关函数定义

**软件协议:模拟SPI协议

**简介:clk上升沿发送数据,clk下降沿接收数据

:typedefunsignedcharuint8_t;

**

**

**

*******************************************************************************/

/*包含头文件*****************************************************************/

#include"ds1302.h"

#include"stdio.h"

#include"Delay.h"

uint8_tread[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//读秒、分、时、日、月、周、年的寄存器地址

uint8_twrite[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//写秒、分、时、日、月、周、年的寄存器地址

/*PA4、PA6为输出*/

/*PA5配置为开漏模式,此模式下能够实现真正的双向IO口*/

voidds1302_GPIO_Configuration(void)

{

GPIO_InitTypeDefGPIO_InitStruct;

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Pin=ds1302clk|ds1302rst;//clk、rst配置为输出

GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD;//IO配置为双向

GPIO_InitStruct.GPIO_Pin=ds1302dat;

GPIO_Init(GPIOA,&GPIO_InitStruct);

}

voidwrite_1302byte(uint8_tdat)//写一个字节的数据sck上升沿写数据

{

uint8_ti=0;

GPIO_ResetBits(GPIOA,ds1302clk);//ds1302clk=0

Delay_us(2);//延时大约2us

for(i=0;i<8;i++)

{

GPIO_ResetBits(GPIOA,ds1302clk);//ds1302clk=0;

if(dat&0x01)

GPIO_SetBits(GPIOA,ds1302dat);

else //ds1302dat=(dat&0x01)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

51单片机学习笔记———13.1DS1302实时时钟原理部分

关键字: ds1302 时钟

由于昨天照着手册写了一下DS1302的驱动程序,发现耗时挺多的,并且在考场上不可能一步步去自己写驱动,所以今天看了一下蓝桥杯提供的DS1302官方驱动程序,发现直接引用还是不行的,程序当中有些小问题需要去修改。下面就对那...

关键字: ds1302 时钟

DS1302时钟模块通信原理(SPI总线)

关键字: ds1302 时钟

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用

关键字: ds1307 ds1302

stm32f103zet6是一种嵌入式-微控制器的集成电路(IC),是由ST公司开发的STM32F1系列的其中一种,芯体尺寸是32位,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是...

关键字: stm32f103zet6 datasheet 引脚图

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

关键字: ds1302 时钟芯片 电路

DS1302 我们前边也有提起过,是三根线,分别是 CE、I/O 和 SCLK,其中 CE 是使能线,SCLK 是时钟线,I/O 是数据线。前边我们介绍过了 SPI 通信,同学们发现没发现,这个 DS1302 的通信线定...

关键字: ds1302 通信时序

有时候,我们需要保存少量数据,但是用外扩的ROM又觉得不方便,这时候自然就想到了芯片内部是否自带flash(闪存),据我了解,stm32内部的应该是nor flash,因为如果是nand flash的话,肯定速度是跟不上...

关键字: Flash nor stm32f103zet6

定时器TIM3产生四路PWM波输出。首先介绍一下PWM吧,算是给自己充电,脉冲宽度调制(PWM),是英文“Pulse Width Modulation ”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制...

关键字: pwm stm32f103zet6 定时器

//引入文件***********************************************************#include "delay.h" #include "...

关键字: ds1302 pic16f84a 读取时钟芯片
关闭
关闭