您现在的位置: 主页 > MCU > 单片机应用 > 基于stm32f103zet6的DS1302学习 -
本文所属标签:
为本文创立个标签吧:

基于stm32f103zet6的DS1302学习 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-11 

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

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

本文引用地址: http://www.21ic.com/app/mcu/201809/781431.htm

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)



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > 基于stm32f103zet6的DS1302学习 -
 

"基于stm32f103zet6的DS1302学习 -"的相关文章

网站地图

围观()