91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 2KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-03
  • 語言: 其他
  • 標簽: STM32DS1302??

資源簡介

STM32芯片讀寫DS1302芯片的庫代碼,可以用來做時鐘學習.

資源截圖

代碼片段和文件信息

#include?“stm32f10x.h“

#define?NOP()?__NOP

#define?DS1302_CLK_H() (GPIOE->BSRR=GPIO_Pin_4)
#define?DS1302_CLK_L() (GPIOE->BRR=GPIO_Pin_4)

#define?DS1302_RST_H() (GPIOE->BSRR=GPIO_Pin_6)
#define?DS1302_RST_L() (GPIOE->BRR=GPIO_Pin_6)

#define?DS1302_OUT_H() (GPIOE->BSRR=GPIO_Pin_5)
#define?DS1302_OUT_L() (GPIOE->BRR=GPIO_Pin_5)

#define?DS1302_IN_X (GPIOE->IDR&GPIO_Pin_5)

#define?Time_24_Hour 0x00 //24時制控制
#define?Time_Start 0x00 //開始走時

#define?DS1302_SECOND 0x80 //DS1302各寄存器操作命令定義
#define?DS1302_MINUTE 0x82
#define?DS1302_HOUR 0x84
#define?DS1302_DAY 0x86
#define?DS1302_MONTH 0x88
#define?DS1302_WEEK 0x8A
#define?DS1302_YEAR 0x8C
#define?DS1302_WRITE 0x8E
#define?DS1302_POWER 0x90

static?GPIO_InitTypeDef?GPIO_InitStructure;

void?DS1302_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE?ENABLE);

/*?PE456輸出?*/
GPIO_ResetBits(GPIOEGPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz; //50M時鐘速度
GPIO_Init(GPIOE?&GPIO_InitStructure);
}


static?void?DelayNOP(u32?count)
{
while(count--)?NOP();
}

static?void?DS1302_OUT(void)
{
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;
GPIO_Init(GPIOE?&GPIO_InitStructure);
}

static?void?DS1302_IN(void)
{
GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_IPU;
GPIO_Init(GPIOE?&GPIO_InitStructure);
}

void?DS1302SendByte(u8?byte)
{
u8 i;

for(i=0x01;i;i<<=1)
{
if(byte&i) DS1302_OUT_H();
else DS1302_OUT_L();
DS1302_CLK_H();
DelayNOP(50); //加延時
DS1302_CLK_L();
}
}

u8?DS1302ReceiveByte(void)
{
u8 ibyte=0;

for(i=0x01;i;i<<=1)
{
if(DS1302_IN_X) byte?|=?i;
DS1302_CLK_H();
DelayNOP(50); //加延時
DS1302_CLK_L();
}
return(byte);
}

void?Write1302(u8?addru8?data)
{
????DS1302_OUT();
DS1302_RST_L();
DS1302_CLK_L();
DS1302_RST_H();
DelayNOP(100);
DS1302SendByte(addr);
DS1302SendByte(data);
DelayNOP(100);
DS1302_RST_L();
}

u8?Read1302(u8?addr)
{
????u8?data=0;

????DS1302_OUT();
DS1302_RST_L();
DS1302_CLK_L();
DS1302_RST_H();
DelayNOP(100);
DS1302SendByte(addr|0x01);
DS1302_IN();
data?=?DS1302ReceiveByte();
DelayNOP(100);
DS1302_RST_L();
return(data);
}

//讀取時間函數
void?DS1302_GetTime(u8?*time)
{
u8?tmp;

time[0]?=?Read1302(DS1302_YEAR);
time[1]?=?Read1302(DS1302_WEEK);
time[2]?=?Read1302(DS1302_MONTH);
time[3]?=?Read1302(DS1302_DAY);
time[4]?=?Read1302(DS1302_HOUR);
time[5]?=?Read1302(DS1302_MINUTE);
time[6]?=?Read1302(DS1302_SECOND);
}

/*
讀取DS1302中的RAM
addr:地址從0到30共31個字節的空間
返回為所讀取的數據
*/
u8?ReadDS1302Ram(u8?addr)
{
u8 tmpres;

tmp?=?(addr<<1)|0xc0;
res?=?Read1302(tmp);
return(res);
}

/*
寫DS1302中的RAM
addr:地址從0到30共31個字節的空間
data:要寫的數

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5454??2013-06-10?09:45??DS1302\ds1302.c

?????文件????????277??2013-06-10?08:22??DS1302\ds1302.h

?????目錄??????????0??2013-07-01?08:40??DS1302

-----------?---------??----------?-----??----

?????????????????5731????????????????????3


評論

共有 條評論

相關資源