STM32F103DS1302驱动程序.docx
- 文档编号:8917595
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:16
- 大小:87.83KB
STM32F103DS1302驱动程序.docx
《STM32F103DS1302驱动程序.docx》由会员分享,可在线阅读,更多相关《STM32F103DS1302驱动程序.docx(16页珍藏版)》请在冰豆网上搜索。
STM32F103DS1302驱动程序
#include"stm32f10x_conf.h"
#include"mrhh_f1.h"
#include"HPF_TIME.h"
#include"HpfDS1302Drive.h"
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯F103IO¿ÚÅäÖÃ
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
#if1
#defineclkresetGPIOE->BRR=GPIO_Pin_1
#defineclksetGPIOE->BSRR=GPIO_Pin_1
#definerstresetGPIOE->BRR=GPIO_Pin_2
#definerstsetGPIOE->BSRR=GPIO_Pin_2
#definedatresetGPIOE->BRR=GPIO_Pin_0
#definedatsetGPIOE->BSRR=GPIO_Pin_0
#definedatredGPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)//¶ÁÈ¡Êý¾Ý
#defineDS1302EnableHpfDS1302WritByte(control_add,0x80)//´ò¿ª±£»¤
#defineDS1302DisEnableHpfDS1302WritByte(control_add,0x00)//¹Ø±Õ±£»¤
#definetestdat0x25
#definecheaken0
#endif
#definedstim1
Ds1302TimeDSTime={21,16,1,1,12,0,0,1};
voidHpfDS1302PinInData(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//ÉÏÀÊäÈë
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
voidHpfDS1302PinOutData(void)
{
GPIO_InitTypeDefGPIO_InitSyructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitSyructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÃâÊä³ö
GPIO_InitSyructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitSyructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitSyructure);
}
voidHpfDS1302PinClkRst(void)
{
GPIO_InitTypeDefGPIO_InitSyructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitSyructure.GPIO_Mode=GPIO_Mode_Out_PP;//ÍÆÃâÊä³ö
GPIO_InitSyructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitSyructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitSyructure);
}
voidHpfDS1302Init(void)
{
HpfDS1302PinClkRst();
clkreset;
rstreset;
//¼Ä´æÆ÷Ö±½ÓÅäÖÃÊä³öµÍµçƽ
}
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯Ð´ÈëÒ»¸öµØÖ·ºÍÊý¾Ý
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
voidHpfDS1302WritByte(u8addr,u8data)//дÈëÊý¾ÝÔÚÉÏÉýÑØÓÐЧ
{
u8i;
HpfDS1302PinOutData();
addr&=0xfe;//дÊý¾Ý£¬µØÖ·×îµÍλΪ¸ß
rstreset;
clkreset;
HpfDealyUs(dstim);
rstset;
HpfDealyUs(dstim);
for(i=0;i<8;i++)//дÈëµØÖ·
{
clkreset;
HpfDealyUs(dstim);
if(addr&0x01)
datset;
else
datreset;
clkset;
HpfDealyUs(dstim);
addr>>=1;
//HpfDealyUs(10);
}
for(i=0;i<8;i++)//дÈëÊý¾Ýdata
{
clkreset;
HpfDealyUs(dstim);
if(data&0x01)
datset;
else
datreset;
clkset;
HpfDealyUs(dstim);
data>>=1;
}
rstreset;//Í£Ö¹×ÜÏß
clkreset;
}
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯¶ÁÈ¡Ò»¸öÊý¾Ý
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
u8HpfDS1302ReadByte(u8addr)//¶ÁÈ¡Ò»¸öÊý¾ÝÔÚϽµÑØÓÐЧ£¬Ð´ÈëµØÖ·ÔÚÉÏÉýÑØÓÐЧ
{
u8i,tem=0;
addr|=0x01;//¶ÁÊý¾Ý£¬µØÖ·×îµÍλΪ1
rstreset;
clkreset;
HpfDealyUs(dstim);
rstset;//Æô¶¯×ÜÏß
HpfDealyUs(dstim);
HpfDS1302PinOutData();
for(i=0;i<8;i++)
{
clkreset;
HpfDealyUs(dstim);
if(addr&0x01)
datset;
else
datreset;
clkset;
HpfDealyUs(dstim);
addr>>=1;
}
HpfDS1302PinInData();
for(i=0;i<8;i++)
{
clkreset;
HpfDealyUs(dstim);
if(datred)
tem|=0x80;
if(i<7)
tem>>=1;
clkset;
HpfDealyUs(dstim);
}
rstreset;
clkreset;
returntem;
}
u8HpfDSBCDToNum(u8BCD)//8421BCDÂëת»»ÎªÊý×Ö
{
u8temp,temp1;
temp1=BCD&0x0f;
temp=((BCD&0xf0)>>4)*10+temp1;
returntemp;
}
u8HpfDSNumToBCD(u8NUM)//Êý×Öת»»Îª8421BCDÂë
{
u8temp;
temp=((NUM/10)<<4)|(NUM%10);
returntemp;
}
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯»ñÈ¡Óû§Ê±¼ä²¢×ª»»ÎªbcdÂë²¢¸´ÖƵ½DS1302bufferÖÐ
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
voidHpfDSTimrSet(void)
{
HpfWTime*p;
Ds1302Time*s;
p=GetWRTime();
s=&DSTime;
s->century=p->MyYear/100+1;
s->year=HpfDSNumToBCD(p->MyYear-(s->century-1)*100);
s->month=HpfDSNumToBCD(p->MyMon);
s->day=HpfDSNumToBCD(p->MyDay);
s->hh=HpfDSNumToBCD(p->MyHH);
s->mm=HpfDSNumToBCD(p->MyMM);
s->ss=HpfDSNumToBCD(p->MySS);
s->week=HpfDSNumToBCD(GetWNLWeek(p,s->day));
}
//---------------------------------------------------------------------------------------------------------------
//DS1302°ÑbufferÖеÄʱ¼äÊý¾ÝдÈëµ½ds1302ÖÐ
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
voidHpfDS1302WritData(void)
{
Ds1302Time*s;
s=&DSTime;
DS1302DisEnable;//¹Ø±Õд±£»¤
HpfDS1302WritByte(sec_add,0x80);//ÔÝͣʱÖÓ
HpfDS1302WritByte(year_add,s->year);
HpfDS1302WritByte(month_add,s->month);
HpfDS1302WritByte(day_add,s->day);
HpfDS1302WritByte(hh_add,s->hh);
HpfDS1302WritByte(min_add,s->mm);
HpfDS1302WritByte(sec_add,s->ss);
HpfDS1302WritByte(week_add,s->week);
HpfDS1302WritByte(RAM_Address29,testdat);
DS1302Enable;
}
//---------------------------------------------------------------------------------------------------------------
//DS1302¶Áȡʱ¼äÊý¾Ý²¢×ª»»ÎªÊý×Ö²¢´æÈ뻺´æÆ÷ÖÐ
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
voidHpfDS1302ReadData(void)
{
Ds1302Time*s;
s=&DSTime;
s->year=HpfDSBCDToNum(HpfDS1302ReadByte(year_add));
s->month=HpfDSBCDToNum(HpfDS1302ReadByte(month_add));
s->day=HpfDSBCDToNum(HpfDS1302ReadByte(day_add));
s->hh=HpfDSBCDToNum(HpfDS1302ReadByte(hh_add));
s->mm=HpfDSBCDToNum(HpfDS1302ReadByte(min_add));
s->ss=HpfDSBCDToNum(HpfDS1302ReadByte(sec_add));
s->week=HpfDSBCDToNum(HpfDS1302ReadByte(week_add));
}
//---------------------------------------------------------------------------------------------------------------
//DS1302°Ñʱ¼äͬ²½µ½Óû§Ê±¼ä
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
voidHpfDS1302TimeSyn(void)
{
HpfWTime*p;
p=GetWRTime();
p->MyYear=(DSTime.century-1)*100+DSTime.year;
p->MyMon=DSTime.month;
p->MyDay=DSTime.day;
p->MyHH=DSTime.hh;
p->MyMM=DSTime.mm;
p->MySS=DSTime.ss;
}
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯»ñÈ¡»º´æÆ÷µØÖ·
//Ver1.0ByMrHDS
//2016,4.23
//---------------------------------------------------------------------------------------------------------------
Ds1302Time*HpfDS1302GetTime(void)
{
HpfDS1302Init();
HpfDS1302ReadData();
return&DSTime;
}
//---------------------------------------------------------------------------------------------------------------
//DS1302Çý¶¯RAM²Ù×÷
//Ver1.0ByMrHDS
//2016,4.23
//
//bufferΪ»º´æÆ÷µØÖ·£¬ramaddrΪÄÚ´æµØÖ·£¬numΪÁ¬Ðø²Ù×÷µÄ·¶Î§£¬rwΪ1£¬±íʾдÈëÊý¾Ý£¬Îª0±íʾ¶ÁÈ¡Êý¾Ý
//
//
//
//
//
//---------------------------------------------------------------------------------------------------------------
voidHpfDs1302RamWR(u8*buffer,u8ramaddr,u8num,u8rw)
{
u8i;
if(ramaddr==RAM_Address29)
return;
if(rw)
{
for(i=0;i { DS1302DisEnable; HpfDS1302WritByte(ramaddr+(i<<1),buffer[i]); DS1302Enable; } } else { for(i=0;i buffer[i]=HpfDS1302ReadByte(ramaddr+(i<<1)); } } //--------------------------------------------------------------------------------------------------------------- //DS1302Çý¶¯¼ì²éÉ豸ÊÇ·ñºÃ»µ¡£·µ»Ø0±íʾÕý³££¬·µ»Ø1±íʾÊý¾Ý»òÉ豸³öÎÊÌâ //µ±cheakenΪ1ʱ£¬·µ»Ø1±íʾÉ豸Õý³££¬Ê±¼äδ³õʼ»¯£¬·µ»Ø2±íʾӲ¼þ¹ÊÕÏ //Ver1.0ByMrHDS //2016,4.23 //--------------------------------------------------------------------------------------------------------------- u8HpfDS1302Check(void) { u8testnum; //DS1302DisEnable; testnum=HpfDS1302ReadByte(RAM_Address29); //DS1302Enable; if(testnum==testdat) return0; else { #ifcheaken DS1302DisEnable; HpfDS1302WritByte(RAM_Address29,testdat); DS1302Enable; HpfDealyUs(10); testnum=HpfDS1302ReadByte(RAM_Address29); if(testnum==testdat) return1; #else return1; #endif } #if! cheaken return2; #endif }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F103DS1302 驱动程序