基于STM32的DS1302实时时钟模块应用

DS1302是一款低功耗的实时时钟芯片,被广泛应用于各种电子产品中。它具有准确计时、多种时间格式表示、定时报警等功能,适用于记录时间、日期和闹钟。在本文中,我们将介绍如何在基于STM32的开发环境中使用DS1302实时时钟模块,并给出一个完整的示例代码。

硬件连接:
首先,我们需要准备以下硬件:
- STM32单片机开发板
- DS1302实时时钟模块

连接方法如下:
- 将DS1302的SCK引脚连接到STM32的SCK引脚
- 将DS1302的SDA引脚连接到STM32的SDA引脚
- 将DS1302的RST引脚连接到STM32的RST引脚
- 将DS1302的VCC引脚连接到STM32的VCC引脚(一般为3.3V)
- 将DS1302的GND引脚连接到STM32的GND引脚

软件实现:
以下是一个基于STM32的DS1302实时时钟模块应用的示例代码:

```c
#include "stm32f10x.h"
#include "ds1302.h"int main(void)
{// 初始化DS1302模块DS1302_Init();while (1){// 读取实时时钟的时间uint8_t hour, minute, second;DS1302_GetTime(&hour, &minute, &second);// 读取实时时钟的日期uint8_t year, month, day;DS1302_GetDate(&year, &month, &day);// 在串口输出时间和日期printf("Current time: %02d:%02d:%02d\r\n", hour, minute, second);printf("Current date: %02d-%02d-%02d\r\n", year, month, day);// 延时一段时间delay_ms(1000);}
}
```

以上是一个简单的应用示例,该示例通过DS1302模块获取当前的时间和日期,并通过串口输出。在实际应用中,可以根据需要添加其他功能,如定时报警、时间设置等。

需要注意的是,在使用该示例代码之前,你需要提前编写一个适配器库`ds1302.h`和`ds1302.c`,用于实现DS1302模块的初始化、读写时间和日期等操作。你可以根据DS1302的数据手册编写适配器库,或者找到第三方提供的库。

接下来,我们将详细介绍如何编写`ds1302.h`和`ds1302.c`,以及其中的各个函数的实现。在这份代码中,我们假设使用的是STM32的标准外设库进行开发。

ds1302.h:```c
#ifndef DS1302_H
#define DS1302_H#include <stdint.h>void DS1302_Init(void);
void DS1302_GetTime(uint8_t *hour, uint8_t *minute, uint8_t *second);
void DS1302_GetDate(uint8_t *year, uint8_t *month, uint8_t *day);
void DS1302_SetTime(uint8_t hour, uint8_t minute, uint8_t second);
void DS1302_SetDate(uint8_t year, uint8_t month, uint8_t day);#endif
```ds1302.c:```c
#include "ds1302.h"
#include "stm32f10x.h"// DS1302模块引脚定义
#define DS1302_RST_PIN GPIO_Pin_0
#define DS1302_SCK_PIN GPIO_Pin_1
#define DS1302_IO_PIN GPIO_Pin_2
#define DS1302_PORT GPIOB// DS1302模块相关函数
void DS1302_WriteByte(uint8_t dat)
{uint8_t i;for (i = 0; i < 8; i++){GPIO_ResetBits(DS1302_PORT, DS1302_SCK_PIN);if (dat & 0x01)GPIO_SetBits(DS1302_PORT, DS1302_IO_PIN);elseGPIO_ResetBits(DS1302_PORT, DS1302_IO_PIN);GPIO_SetBits(DS1302_PORT, DS1302_SCK_PIN);dat >>= 1;}
}uint8_t DS1302_ReadByte(void)
{uint8_t i, dat = 0;GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = DS1302_IO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(DS1302_PORT, &GPIO_InitStructure);for (i = 0; i < 8; i++){dat >>= 1;GPIO_ResetBits(DS1302_PORT, DS1302_SCK_PIN);if (GPIO_ReadInputDataBit(DS1302_PORT, DS1302_IO_PIN))dat |= 0x80;GPIO_SetBits(DS1302_PORT, DS1302_SCK_PIN);}return dat;
}void DS1302_Write(uint8_t reg, uint8_t dat)
{GPIO_ResetBits(DS1302_PORT, DS1302_RST_PIN);DS1302_WriteByte(reg);DS1302_WriteByte(dat);GPIO_SetBits(DS1302_PORT, DS1302_RST_PIN);
}uint8_t DS1302_Read(uint8_t reg)
{uint8_t dat;GPIO_ResetBits(DS1302_PORT, DS1302_RST_PIN);DS1302_WriteByte(reg | 0x81);dat = DS1302_ReadByte();GPIO_SetBits(DS1302_PORT, DS1302_RST_PIN);return dat;
}void DS1302_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitStructure.GPIO_Pin = DS1302_RST_PIN | DS1302_SCK_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(DS1302_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = DS1302_IO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(DS1302_PORT, &GPIO_InitStructure);DS1302_Write(0x8e, 0x00);  // 写入禁止写保护命令
}void DS1302_GetTime(uint8_t *hour, uint8_t *minute, uint8_t *second)
{uint8_t data[3];for (int i = 0; i < 3; i++){data[i] = DS1302_Read(0x81 + i * 2);  // 从RAM中读取时间数据if (i == 0)*second = ((data[0] & 0x0F) + (data[0] >> 4) * 10);else if (i == 1)*minute = ((data[1] & 0x0F) + (data[1] >> 4) * 10);else*hour = ((data[2] & 0x0F) + (data[2] >> 4) * 10);}
}void DS1302_GetDate(uint8_t *year, uint8_t *month, uint8_t *day)
{uint8_t data[3];for (int i = 0; i < 3; i++){data[i] = DS1302_Read(0x81 + i * 2 + 6);  // 从RAM中读取日期数据if (i == 0)*day = ((data[0] & 0x0F) + (data[0] >> 4) * 10);else if (i == 1)*month = ((data[1] & 0x0F) + (data[1] >> 4) * 10);else*year = ((data[2] & 0x0F) + (data[2] >> 4) * 10);}
}void DS1302_SetTime(uint8_t hour, uint8_t minute, uint8_t second)
{// 禁止写保护DS1302_Write(0x8e, 0x00);// 写入时间数据到RAMDS1302_Write(0x80, (second / 10) << 4 | (second % 10));DS1302_Write(0x82, (minute / 10) << 4 | (minute % 10));DS1302_Write(0x84, (hour / 10) << 4 | (hour % 10));// 打开写保护DS1302_Write(0x8e, 0x80);
}void DS1302_SetDate(uint8_t year, uint8_t month, uint8_t day)
{// 禁止写保护DS1302_Write(0x8e, 0x00);// 写入日期数据到RAMDS1302_Write(0x86, (day / 10) << 4 | (day % 10));DS1302_Write(0x88, (month / 10) << 4 | (month % 10));DS1302_Write(0x8c, (year / 10) << 4 | (year % 10));// 打开写保护DS1302_Write(0x8e, 0x80);
}
```

以上是一个基于STM32的DS1302实时时钟模块的完整示例代码。在这个示例中,我们实现了DS1302模块的初始化,读取时间和日期,设置时间和日期等操作,并给出了相应的函数实现。需要注意的是,具体的引脚定义、外设时钟使能等操作可能会根据你的实际硬件环境而有所不同,你需要根据自己的实际情况进行相应的调整。

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进

代码获取、问题探讨及文章转载可私信。

 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Windows 7上安装Team Foundation Server(TFS)的代理服务器(Agent)

自2009年微软发布Windows 7以来&#xff0c;经过8年的市场验证&#xff0c;Windows 7已经成为史上应用最为广泛的操作系统。但是面对技术变化的日新月异&#xff0c;2015年微软正式停止了对Windows 7的主流支持&#xff0c;并将于2020年正式结束对Windows 7的所有技术支持。这一…

王喜文:图解新基建,细说新机遇(100图)

来源&#xff1a;智造智库去年8月22日&#xff0c;华为创始人任正非签发总裁办邮件&#xff0c;大力推荐技术大神王喜文博士的5G科普PPT《认识5G&#xff0c;发展5G》&#xff0c;并报送董事会成员、监事会成员&#xff0c;主送全体员工&#xff0c;要求华为全员学习。任正非的…

基于OpenGL编写一个简易的2D渲染框架-07 鼠标事件和键盘事件

这次为程序添加鼠标事件和键盘事件 当检测到鼠标事件和键盘事件的信息时&#xff0c;捕获其信息并将信息传送到需要信息的对象处理。为此&#xff0c;需要一个可以分派信息的对象&#xff0c;这个对象能够正确的把信息交到正确的对象。 实现思路&#xff1a; 要实现以上的功能&…

重新定义Wi-Fi功能,Wi-Fi 6为什么要分两步?

来源&#xff1a;传感器技术Wi-Fi 6重新定义Wi-Fi&#xff0c;先是双频并发&#xff0c;然后才是6GHz下的160MHz。Wi-Fi是什么&#xff1f;它是一个基于IEEE 802.11标准的无线局域网技术。如今&#xff0c;Wi-Fi已经覆盖了绝大部分的室内场景&#xff0c;你的手机、电脑、智能音…

《科学》:中德解析新冠主要蛋白酶晶体结构,有助抑制剂研发

来源&#xff1a;澎湃新闻自新型冠状病毒引起的疫情暴发以来&#xff0c;科学家们一直在努力寻找有效的病毒抑制剂。当地时间3月20日&#xff0c;顶级学术期刊《科学》在线发表了一篇题为“Crystal structure of SARS-CoV-2 main protease provides a basis for design of impr…

render_notebook()结果没有图_来自百度的良心产品!百度iOS截长图App

我们知道百度是国内最大的搜索引擎&#xff0c;但你知道它也会出品一些和搜索无关的精品工具&#xff1f;例如在最近&#xff0c;百度就推出了一款iOS平台上的滚动截长图App&#xff0c;要知道iOS系统一直以来就不支持系统级别的截长图&#xff0c;百度这工具可谓是非常实用了&…

2020年度国家科学技术奖提名项目公示丨附全名单

来源&#xff1a;科学技术部3月24日&#xff0c;科学技术部发布了《国家科学技术奖励工作办公室公告第95号》文件。该文件称&#xff0c;2020年度国家科学技术奖提名工作已结束&#xff0c;并对2020年度国家自然科学奖、国家技术发明奖通用项目、国家科学技术进步奖通用项目受理…

linux实验试题 cp,cp命令实验,cp命令

cp命令实验&#xff0c;cp命令创建条件[rootlocalhost ~]#mkdir /source[rootlocalhost~]#mkdir /target[rootlocalhost~]#cp /etc/l*.conf /source[rootlocalhost~]#ll /sourcetotal20-rw-r--r--. 1 root root 28 Aug 10 09:24 ld.so.conf-rw-r-----. 1 root root 191 Aug 10 …

机载雷达发展简史:从蝙蝠到机载相控阵

来源&#xff1a;军事高科技在线 从地基起步蝙蝠&#xff0c;虽然像人一样拥有双眼&#xff0c;但它看起东西来&#xff0c;用到的却不是眼睛。蝙蝠从鼻子里发出的超声波在传输过程中遇到物体后会立刻反弹&#xff0c;根据声波发射和回波接收之间的…

苹果手机时区改不了怎么办_天价手机摔了怎么办?苹果:你尽管摔,坏了算我输。...

智能手机比起过去的功能机&#xff0c;好处多到数不过来&#xff0c;但有一点智能手机怎么都比不上功能机&#xff0c;那就是不抗摔。当年的很多功能机那都是可以用来砸核桃的&#xff0c;抗摔性一流&#xff0c;基本不存在摔坏的说法&#xff0c;但智能手机就不一样了&#xf…

2020 最新自动驾驶技术报告出炉:Waymo、特斯拉、沃尔沃技术方案大起底

来源&#xff1a;《2020 自动驾驶技术报告》进入 2020 年&#xff0c;自动驾驶技术的跨越式路线与渐进式路线之间的阵营划分已经十分明显。但最终自动驾驶要完全实现无人化&#xff0c;其技术还需要进行不断的迭代和发展。对于自动驾驶的技术进展&#xff0c;WEVOLVER 发布的《…

PC_excel完毕一列英文小写变大写

原创作品&#xff0c;出自 “深蓝的blog” 博客。欢迎转载&#xff0c;转载时请务必注明出处。否则追究版权法律责任。深蓝的blog&#xff1a;http://blog.csdn.net/huangyanlong/article/details/44493869 使用excel中的UPPER函数就可以实现这个目标。介绍例如以下&#xff1a…

c语言if的作用,c语言中if 语句的作用范围示例代码

c语言中if 语句的作用范围示例代码复制代码 代码如下:# include int main(void){if (1 > 2)printf("第一条表达式");printf("第二条表达式");}/*输出结果第二条表达式*/说明if语句的作用范围只有紧跟if的第一条表达式时间&#xff1a; 2013-09-06在高中…

几何画板画椭圆_几何画板条件下椭圆的26种绘制方法(二)——代数法

“几何画板是一种常用的数学软件&#xff0c;具有强大的绘图功能&#xff0c;也为我们探究椭圆的不同绘制方法提供了平台.在探究过程中&#xff0c;我们遇到了一些麻烦和困难&#xff0c;但也获得了很多意想不到的惊喜和收获&#xff01;我们将椭圆的绘制方法分为七类&#xff…

中国抗疫十大黑科技盘点!

来源&#xff1a;工业机器人新冠肺炎来势汹汹&#xff0c;为了阻止疫情的扩散&#xff0c;不少人没来及过春节就投入到了抗疫第一线。不过如今已是2020年&#xff0c;除了人力以外&#xff0c;设计与科技也在积极参与这场抗疫战。你知道吗&#xff1f;不论是“火神山”“雷神山…

JavaScript(js)/上

JavaScript(js) ECMA-----定义的基础语法 DOM------document object model BOM------Browser object model Javasript 基于对象的&#xff0c;也是面向对象 ECMAScript描述了以下内容&#xff1a; 语法 类型 语句 关键字 保留字 运算符 对象&#xff08;封装 继承 多态&…

ap6212 Linux 蓝牙,替代正基AP6212、AP6330的SDIO WiFi+UART蓝牙组合

原标题&#xff1a;替代正基AP6212、AP6330的SDIO WiFiUART蓝牙组合SKYLAB推出的SDIO wifi串口蓝牙二合一模块WG221&#xff0c;可完全替代正基的WiFi蓝牙二合一模块AP6212和AP6330两个型号。WG221是WiFi和蓝牙二合一的组合解决方案模块&#xff0c;支持1 x 1 802.11 a/b/g/n W…

2020十大最具创新性的AR/VR开发与应用公司

来源&#xff1a; 资本实验室 在经历过去几年的热情高涨与资本蜂拥之后&#xff0c;AR与VR技术正在进入波澜不惊的发展时期&#xff0c;多家曾经风光一时的AR与VR初创企业都已成为昨日黄花。例如&#xff0c;昔日的独角兽&#xff0c;最受瞩目的AR公司Magic Leap一直受裁员、高…

关于直播学习笔记-005-nginx-rtmp-win32在Win10上使用

在Win10上使用nginx-rtmp-win32会提示文件路径问题。 可以将nginx-rtmp-win32拷贝到用户目录文件夹之中。 在命令行中执行nginx.exe程序 转载于:https://www.cnblogs.com/defineconst/p/6899720.html

连筋字体在线生成_四个超实用的字体网站,PPT和海报就靠它,收藏来一波

今天分享四个一键生成艺术字体的网站给你们&#xff0c;非常适合用到各种活动海报设计和PPT设计中。1、手写在线字体生成器这是一个专门生成手写字体的网站&#xff0c;比如毛笔字体、硬笔等手写字体。字体生成后也可以编辑文字的大小、颜色和背景。2、篆书在线生成器这是一个专…