資源簡(jiǎn)介
STM32的DS1302驅(qū)動(dòng)源碼,里面是C文件和H文件,可以用。注意里面用了位帶操作,不懂得查一查。

代碼片段和文件信息
#include?“stm32f10x.h“
#include?“usart1.h“
#include?“sys.h“
#include?“DS1302.h“
#define?uchar?unsigned?char
#define?uint??unsigned?int
////DS1302引腳定義可根據(jù)實(shí)際情況自行修改端口定義
//#define?RST?PBout(3)
//#define?IO??PBout(4)
//#define?SCK?PBout(5)
////DS1302地址定義
//#define?ds1302_sec_add?0x80?//秒數(shù)據(jù)地址
//#define?ds1302_min_add?0x82?//分?jǐn)?shù)據(jù)地址
//#define?ds1302_hr_add?0x84?//時(shí)數(shù)據(jù)地址
//#define?ds1302_date_add?0x86?//日數(shù)據(jù)地址
//#define?ds1302_month_add?0x88?//月數(shù)據(jù)地址
//#define?ds1302_day_add?0x8a?//星期數(shù)據(jù)地址
//#define?ds1302_year_add?0x8c?//年數(shù)據(jù)地址
//#define?ds1302_control_add?0x8e?//控制數(shù)據(jù)地址
//#define?ds1302_charger_add?0x90??
//#define?ds1302_clkburst_add?0xbe
//初始時(shí)間定義
extern?uchar?time_buf[8]?;
extern?uchar?time_buf1[8]?;
extern?uchar?readtime[14];//當(dāng)前時(shí)間
extern?uchar?sec_buf;??//秒緩存
extern?uchar?sec_flag;?//秒標(biāo)志位
//GPIO口的初始化配置,先默認(rèn)為高電平
void?DS1302_GPIOInit(void)
{
GPIO_InitTypeDef?GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB?ENABLE);?//開(kāi)啟GPIOB外設(shè)時(shí)鐘
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設(shè)置為推挽輸出?向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設(shè)置為上拉輸入?從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);
}
//功能:延時(shí)1毫秒不知道幾毫秒
//入口參數(shù):x
//出口參數(shù):無(wú)
//說(shuō)明:晶振為12M
void?Delay_xms(uint?x)
{
??u16?ij;
??for(i=0;i<112;i++)
????for(j=0;j<112;j++);
}
//DS1302初始化函數(shù)
void?ds1302_init(void)?
{
RST=0;?//RST腳置低將ds1302復(fù)位?
SCK=0;?//SCK腳置低,時(shí)鐘置低電平?
}
//向DS1302寫入一字節(jié)數(shù)據(jù)的函數(shù)?
void?ds1302_write_byte(uchar?addr?uchar?d)?
{
uchar?i;
DS1302_OUT();
RST=1;?//啟動(dòng)DS1302總線
//寫入目標(biāo)地址:addr
addr?=?addr?&?0xFE;???//最低位置零,寄存器0位為0時(shí)寫,為1時(shí)讀
for?(i?=?0;?i?8;?i?++)
?? {
if?(addr?&?0x01)?
{
???IO=1;
}
else?{
????IO=0;
}
SCK=1;??????//產(chǎn)生時(shí)鐘
SCK=0;
addr?=?addr?>>?1;
}
//寫入數(shù)據(jù):d
for?(i?=?0;?i?8;?i?++)?
{
if?(d?&?0x01)?
{
IO=1;
??}
else?{
?IO=0;
}
SCK=1;????//產(chǎn)生時(shí)鐘
SCK=0;
d?=?d?>>?1;
}
RST=0;?//停止DS1302總線
}
//從DS1302讀出一字節(jié)數(shù)據(jù)
uchar?ds1302_read_byte(uchar?addr)?
{
uchar?itemp;
DS1302_OUT();
RST=1;?//啟動(dòng)DS1302總線
//寫入目標(biāo)地址:addr
addr?=?addr?|?0x01;????//最低位置高,寄存器0位為0時(shí)寫,為1時(shí)讀
for?(i?=?0;?i?8;?i?++)?{
if?(addr?&?0x01)?{
IO=1;
}
else?{
IO=0;
}
SCK=1;
SCK=0;
addr?=?addr?>>?1;
}
//輸出數(shù)據(jù):temp
DS1302_IN();
for?(i?=?0;?i?8;?i?++)?{
temp?=?temp?>>?1;
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????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\
評(píng)論
共有 條評(píng)論