久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32與DS1302的接口電路
[打印本頁]
作者:
liuzong
時間:
2013-7-9 03:14
標(biāo)題:
STM32與DS1302的接口電路
作者在某STM32的應(yīng)用中外接了一塊DS1302,借鑒原來寫過的PIC代碼,很快移植成功。在這里與大家分享一下。(1)硬件 CLK PA4 DAT PA5 RST PA6
(2)硬件初始化 CLK與RST均為輸出,而DAT是開漏型的輸出。因?yàn)樵谶@種方式下,IO口的讀仍然存在,因此是真正的雙向IO模式。
/*DSCK -PA4 DAT PA5 RST DAT*/
#define ds1302Clk GPIO_Pin_4 //與時鐘線相連的芯片的管腳
#define ds1302Dat GPIO_Pin_5 //與數(shù)據(jù)線相連的芯片的管腳
#define ds1302Rst GPIO_Pin_6 //與復(fù)位端相連的芯片的管腳
/* PA 4,6,為輸出*/
GPIO_InitStructure.GPIO_Pin = ds1302Clk | ds1302Rst ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//PA5配置為開漏模式,此模式下可以實(shí)現(xiàn)真下的雙向IO
GPIO_InitStructure.GPIO_Pin = ds1302Dat;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
(3)配置完畢,然后實(shí)現(xiàn)的代碼就很簡單了,從現(xiàn)成的代碼移植過來。
#define WrEnDisCmd 0x8e //寫允許/禁止指令代碼
#define WrEnDat 0x00 //寫允許數(shù)據(jù)
#define WrDisDat 0x80 //寫禁止數(shù)據(jù)
#define OscEnDisCmd 0x80 //振蕩器允許/禁止指令代碼
#define OscEnDat 0x00 //振蕩器允許數(shù)據(jù)
#define OscDisDat 0x80 //振蕩器禁止數(shù)據(jù)
#define WrMulti 0xbe //寫入多個字節(jié)的指令代碼
#define WrSingle 0x84 //寫入單個字節(jié)的指令代碼
#define RdMulti 0xbf //讀出多個字節(jié)的指令代碼
////以上這些#define均放在一個ds1302.h文件中。
void SendDat_1302(u8 Dat)
{ u8 i;
u8 cTmp;
for(i=0;i<8;i++)
{
cTmp=Dat&LSB; //數(shù)據(jù)端等于tmp數(shù)據(jù)的末位值
if(cTmp) //1
GPIO_SetBits(GPIOA,ds1302Dat);
else
GPIO_ResetBits(GPIOA,ds1302Dat);
Dat>>=1;
GPIO_SetBits(GPIOA,ds1302Clk);
uDelay(1);
GPIO_ResetBits(GPIOA,ds1302Clk);
}
}
/*寫入1個或者多個字節(jié),第1個參數(shù)是相關(guān)命令
#define WrMulti 0xbe //寫入多個字節(jié)的指令代碼
#define WrSingle 0x84 //寫入單個字節(jié)的指令代碼
第2個參數(shù)是待寫入的值
第3個參數(shù)是待寫入數(shù)組的指針
*/
void WriteByte_1302(u8 CmdDat,u8 Num,u8 *pSend)
{
u8 i=0;
GPIO_ResetBits(GPIOA,ds1302Rst);
uDelay(1);
GPIO_SetBits(GPIOA,ds1302Rst);
SendDat_1302(CmdDat);
for(i=0;i<Num;i++)
{ SendDat_1302(*(pSend+i));
}
GPIO_ResetBits(GPIOA,ds1302Rst);
}
/*讀出字節(jié),第一個參數(shù)是命令
#define RdMulti 0xbf //讀出多個字節(jié)的指令代碼
第2個參數(shù)是讀出的字節(jié)數(shù),第3個是指收數(shù)據(jù)數(shù)組指針
*/
void RecByte_1302(u8 CmdDat,u8 Num,u8 *pRec)
{
u8 i,j,tmp,cTmp;
GPIO_ResetBits(GPIOA,ds1302Rst);//復(fù)位引腳為低電平
uDelay(1);
GPIO_ResetBits(GPIOA,ds1302Clk);
uDelay(1);
GPIO_SetBits(GPIOA,ds1302Rst);
SendDat_1302(CmdDat); //發(fā)送命令
for(i=0;i<Num;i++)
{ for(j=0;j<8;j++)
{ tmp>>=1;
cTmp=GPIO_ReadInputDataBit(GPIOA,ds1302Dat);
if(cTmp)
tmp|=0x80;
GPIO_SetBits(GPIOA,ds1302Clk);
uDelay(1);
GPIO_ResetBits(GPIOA,ds1302Clk);
}
*(pRec+i)=tmp;
}
uDelay(1);
GPIO_ResetBits(GPIOA,ds1302Rst);//復(fù)位引腳為低電平
}
/*
當(dāng)寫保護(hù)寄存器的最高位為0時,允許數(shù)據(jù)寫入寄存器。
寫保護(hù)寄存器可以通過命令字節(jié)8E、8F來規(guī)定禁止寫入/讀出。寫保護(hù)位不能在多字節(jié)傳送模式下寫入。
當(dāng)寫保護(hù)寄存器的最高位為1時,禁止數(shù)據(jù)寫入寄存器。
時鐘停止位操作:當(dāng)把秒寄存器的第7位時鐘停止位設(shè)置為0時起動時鐘開始
當(dāng)把秒寄存器的第7位時鐘停止位設(shè)置為1時,時鐘振蕩器停止。
根據(jù)傳入的參數(shù)決定相關(guān)命令,
第一個參數(shù):命令字,第2個參數(shù):寫入的數(shù)據(jù)
寫允許命令;8EH,00H
寫禁止命令;8EH,80H
振蕩器允許命令;80H,00H
振蕩器禁止命令;80H,80H
*/
void WrCmd(u8 CmdDat,u8 CmdWord)
{ u8 CmdBuf[2];
CmdBuf[0]=CmdWord;
WriteByte_1302(CmdDat,1,CmdBuf);
}
main函數(shù)中調(diào)用如下:
u8 Ds1302SendBuf[8]={0x30,0x32,0x01,0x10,0x01,0x01,0x08,33}; //發(fā)送數(shù)據(jù)緩沖區(qū)
u8 Ds1302RecBuf[8]; //接收數(shù)據(jù)緩沖區(qū)
WrCmd(WrEnDisCmd,WrEnDat); //寫允許
WrCmd(OscEnDisCmd,OscEnDat); //振蕩器允許
WriteByte(WrMulti,8,Ds1302SendBuf);//將時間值送到DS1302中
RecByte(RdMulti,8,Ds1302RecBuf); // 讀出來看看,
......
作者:
銘為科技
時間:
2013-7-21 09:52
為什么要用DS1302, STM32不是內(nèi)部有RTC模塊么?
再用它就資源浪費(fèi)了。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
天海翼一区二区
|
欧美a在线观看
|
中文一级片
|
青青草国产成人av片免费
|
秋霞一区二区
|
日韩理论片
|
欧美精品在线视频
|
激情六月天
|
91tv国产成人福利
|
精品一区二区三区视频
|
四虎永久在线视频
|
欧美日韩一区二
|
欧美做受69
|
国产日韩中文字幕
|
午夜免费福利
|
黄色大片免费在线观看
|
夜夜嗨av一区二区三区网页
|
黄色福利
|
亚洲一区在线看
|
国产自产21区
|
www.chengren
|
a级毛毛片
|
永久在线
|
国产福利在线视频
|
一区二区三区免费
|
国产午夜麻豆影院在线观看
|
中文字幕免费在线
|
亚洲一区二区欧美
|
日韩三级中文字幕
|
日韩成人中文字幕
|
日韩伊人
|
九九视频在线
|
黄色片一级
|
日本免费中文字幕
|
国产免费成人
|
精品婷婷
|
一区二区三区成人
|
成人一级毛片
|
日韩专区中文字幕
|
国产午夜三级
|
成人精品影院
|