• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: STM32  DS1302  

资源简介

STM32的DS1302驱动源码,里面是C文件和H文件,可以用。注意里面用了位带操作,不懂得查一查。

资源截图

代码片段和文件信息

#include “stm32f10x.h“
#include “usart1.h“
#include “sys.h“
#include “DS1302.h“



#define uchar unsigned char
#define uint  unsigned int
////DS1302引脚定义可根据实际情况自行修改端口定义
//#define RST PBout(3)
//#define IO  PBout(4)
//#define SCK PBout(5)

////DS1302地址定义
//#define ds1302_sec_add 0x80 //秒数据地址
//#define ds1302_min_add 0x82 //分数据地址
//#define ds1302_hr_add 0x84 //时数据地址
//#define ds1302_date_add 0x86 //日数据地址
//#define ds1302_month_add 0x88 //月数据地址
//#define ds1302_day_add 0x8a //星期数据地址
//#define ds1302_year_add 0x8c //年数据地址
//#define ds1302_control_add 0x8e //控制数据地址
//#define ds1302_charger_add 0x90  
//#define ds1302_clkburst_add 0xbe

//初始时间定义
extern uchar time_buf[8] ;
extern uchar time_buf1[8] ;
extern uchar readtime[14];//当前时间
extern uchar sec_buf;  //秒缓存
extern uchar sec_flag; //秒标志位

//GPIO口的初始化配置,先默认为高电平
void DS1302_GPIOInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ENABLE); //开启GPIOB外设时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_1 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB &GPIO_InitStructure);
GPIO_SetBits(GPIOB GPIO_Pin_5 | GPIO_Pin_1 | GPIO_Pin_15);
}
//模拟I2C 这里把IO设置为推挽输出 向DS1302输入
void DS1302_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB &GPIO_InitStructure);
}

//模拟I2C 这里把IO设置为上拉输入 从DS1302接收
void DS1302_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入 
GPIO_Init(GPIOB &GPIO_InitStructure);
}

//功能:延时1毫秒不知道几毫秒
//入口参数:x
//出口参数:无
//说明:晶振为12M
void Delay_xms(uint x)
{
  u16 ij;
  for(i=0;i<112;i++)
    for(j=0;j<112;j++);
}

//DS1302初始化函数
void ds1302_init(void) 
{
RST=0; //RST脚置低将ds1302复位 
SCK=0; //SCK脚置低,时钟置低电平 
}

//向DS1302写入一字节数据的函数 
void ds1302_write_byte(uchar addr uchar d) 
{
uchar i;
DS1302_OUT();
RST=1; //启动DS1302总线
//写入目标地址:addr
addr = addr & 0xFE;   //最低位置零,寄存器0位为0时写,为1时读
for (i = 0; i < 8; i ++)
   {
if (addr & 0x01) 
{
   IO=1;
}
else {
    IO=0;
}
SCK=1;      //产生时钟
SCK=0;
addr = addr >> 1;
}
//写入数据:d
for (i = 0; i < 8; i ++) 
{
if (d & 0x01) 
{
IO=1;
  }
else {
 IO=0;
}
SCK=1;    //产生时钟
SCK=0;
d = d >> 1;
}
RST=0; //停止DS1302总线
}

//从DS1302读出一字节数据
uchar ds1302_read_byte(uchar addr) 
{

uchar itemp;
DS1302_OUT();
RST=1; //启动DS1302总线
//写入目标地址:addr
addr = addr | 0x01;    //最低位置高,寄存器0位为0时写,为1时读
for (i = 0; i < 8; i ++) {
if (addr & 0x01) {
IO=1;
}
else {
IO=0;
}
SCK=1;
SCK=0;
addr = addr >> 1;
}
//输出数据:temp
DS1302_IN();
for (i = 0; i < 8; i ++) {
temp = temp >> 1;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4590  2019-03-16 18:44  DS1302\DS1302.c
     文件         933  2019-03-16 16:30  DS1302\DS1302.h
     目录           0  2019-03-19 22:04  DS1302\

评论

共有 条评论