资源简介
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图书管理系统
相关资源
- I2C读写AT24C02 基于STM32F103 cube116540
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- 利用DS1302和msp430进行闹钟和万年历的
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
- stm32 用SPI 方式读写 SDHC
- stm32通过DMA方式采集ADC数据
- 意法半导体STM全系列微控制器STM32ST
- 基于STM32芯片的SX1278 驱动 LORA.rar
评论
共有 条评论