资源简介
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图书管理系统
相关资源
- stm32频率计测量总结
- STM32-基于SD卡的FATFS文件系统
- STM32的CAN实验程序
- STM32-I2C程序例程
-
Jli
nk_ARM-OB_STM32固件(V8) - pca9685+stm32f103c8t6
- stm32f103c8t6+mpu9250读取九轴原始数据
- 基于stm32的图片显示
- 基于STM32的智能扫地机器人避障系统设
- STM32超声波测距程序
- STM32F103C8T6引脚图
- STM32F407VET6原理图
- AltiumDesigner官方STM32封装库(F0~F4 L1)
- 基于STM32F1的6位QS-30辉光钟设计原理图
- STM32L4xx_通过UART写FLASH_IAP更新程序_L
- SPWM波形产生数组生成工具
- STM32F207的串口_IAPBootloader程序
- TIM PWM.zip
- 基于STM32的酒精检测仪
- STM32 OLED打点划线画圆 OLED电子罗盘 程
- STC15F2K48S2单片机DS1302获取时间通过串
- STM32+DAC+ADC语音录制与播放
- STM32F103驱动三个超声波模块,串口屏
- 利用DS1302实现单片机控制的电子万年
- 基于STM32F103的24m02芯片驱动代码
- 基于STM32的DAC7562模块驱动代码
- STM32_vl53l0x 激光 测距
- 官方Keil.STM32F4xx_DFP.2.9.0.pack固件库
- 基于STM32的四旋翼程序
- stm32f407使用MQ7检测一氧化碳浓度程序
评论
共有 条评论