資源簡介
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\
- 上一篇:英文字典 中國地質大學數據結構A上機3
- 下一篇:netbeans圖書管理系統
評論
共有 條評論