stm32 iic驱动ds1307实际使用驱动

news2025/1/31 11:13:00

本文使用的工程代码如下:

(1条消息) stm32iic驱动ds1307实际使用驱动,参考博客:资源-CSDN文库

上次我记得写了一个使用开发板测试DS1307的测试例程,DS1307也是使用测试板,后面项目上具体使用了,又优化了驱动代码,这里做个简单的说明

做了哪些优化呢?

00h 地址的第 7 位为器件时钟允许位(CH), 此位为 1 则芯片未开始工作, 即时钟未走时, 所以在上电时单片机要先读出秒, 并判断位 7(CH) 是否为1,如为 1 要把该位清零写入秒寄存器(地址为 0) ,并把其他的时间单元设定为默认值。 如果上电复位时读出的秒的最高位 CH 为 0,说明时钟已工作(前已对 CH清 0,且停电 后有备用电池), 此时不能重写时间单元!

按照上述论述,主要是针对开始上电,判断DS1307是否已经配置了时钟进行判断,如果配置了DS1307就不再重复配置,重复配置会导致时间丢失。这里使用如下函数

u8 ds1307GetCH(void)//CH 1标明芯片未开始工作,需要将该位清零
{
	u8 add = 0x00, CH;
//  unsigned char temp;
  unsigned char dat;
  ds1307_IIC_Start();
  ds1307_IIC_Send_Byte(0xD0);
  ds1307_IIC_Wait_Ack();
  ds1307_IIC_Send_Byte( add);
  ds1307_IIC_Wait_Ack();
  ds1307_IIC_Stop(); 
  ds1307_IIC_Start();
  ds1307_IIC_Send_Byte(0xD1);
  ds1307_IIC_Wait_Ack(); 
  dat=ds1307_IIC_Read_Byte(add); 
  ds1307_IIC_NAck();
  ds1307_IIC_Stop();
	
	if(dat & 0x80)
	{
		CH = 1;
	}
	else
	{
		CH = 0;
	}
	return CH;
}

这里原理图设计如下,其中TIME_INT管脚这里没有使用,这个管脚主要是DS1307可以提供一些时钟,主要是iic管脚对应MCU的PA6/PA7

 DS1307的简单介绍如下

DS1307串行实时时钟(RTC)是一款低功耗、二-十进制编码(BCD)的时钟/日历,外加56字节NV RAM。地址与数据通过I²C接口串行传输。时钟/日历提供秒、分、时、星期、日、月和年信息。对于少于31天的月份,将自动调整月末日期,包括闰年修正。时钟格式可以是24小时或带AM/PM指示的12小时格式。DS1307内置电源检测电路,检测主电源失效时自动切换到备用电源,以保持时间、日期信息和计时。

  • RTC提供秒、分钟、小时、日、月、星期及年计时,带闰年补偿,有效期至2100年
  • 56字节、电池备份、通用RAM,写次数不受限制
  • I²C串口
  • 可编程方波输出信号
  • 自动电源失效检测和切换电路
  • 电池备份模式下,振荡器运行功耗低于500nA
  • -40°C至+85°C工作温度范围
  • 可用于8引脚塑料DIP等

 stm32cubemx配置如下

主要使用原理图中的PA6/PA7,配置为输出模式

 主要使用外部时钟,倍频到72MHZ

软件主函数中针对DS1307的初始化配置如下

这里比较简单,就是配置或者读取DS1307的时间信息到内存

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  delay_init();
  
  ds1307Init();
  //更新实时时钟时间
  ds1307UpdateTime();

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

实际使用的DS1307的读写函数

unsigned char Write1307(unsigned char add,unsigned char dat)//写一字节到对应地址去
{
  unsigned char temp;
  //转BCD码再写入1307
  temp=dat/10; 
  temp<<=4;
  temp=dat%10+temp;
  ds1307_IIC_Start();
  ds1307_IIC_Send_Byte(0xD0);     
  ds1307_IIC_Wait_Ack();
  ds1307_IIC_Send_Byte(add);   
  ds1307_IIC_Wait_Ack();    
  ds1307_IIC_Send_Byte(temp);     
  ds1307_IIC_Stop();  
  return (0);
}
unsigned char Read1307(unsigned char add)
{
  unsigned char temp;
  unsigned char dat;
  ds1307_IIC_Start();
  ds1307_IIC_Send_Byte(0xD0);
  ds1307_IIC_Wait_Ack();
  ds1307_IIC_Send_Byte( add);
  ds1307_IIC_Wait_Ack();
  ds1307_IIC_Stop(); 
  ds1307_IIC_Start();
  ds1307_IIC_Send_Byte(0xD1);
  ds1307_IIC_Wait_Ack(); 
  dat=ds1307_IIC_Read_Byte(add); 
  ds1307_IIC_NAck();
  ds1307_IIC_Stop();
//  BCD转为16进制
  temp=dat/16;
  dat=dat%16;
  dat=dat+temp*10;
  return(dat);
}

本文使用的工程代码如下:

(1条消息) stm32iic驱动ds1307实际使用驱动,参考博客:资源-CSDN文库

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

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

相关文章

HelloSpring

1.beans.xml配置文件 在resource资源文件夹下创建beans.xml文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

我们的愿景是在个人计算机上实现量子霸权

奥维尔号量子计算机 简介 采用扩展的量子二进制算法。在经典计算机上实现量子计算机。我们的景愿是在个人计算机上实现量子霸权。 此计算机的字长是64位&#xff0c;等效数据位为32位字长的量子计算机。我们采用量子扩展二进制&#xff0c;共有&#xff14;个字符:0,1,Q,P可以…

Redis---主从复制 哨兵

目录 一、主从复制 1、什么是主从复制呢&#xff1f; 2、案例演示 2.1 配置文件 2.2 一主二仆 2.2.1 相关题目&#xff1a; 2.3 薪火相传 & 反客为主 3、复制原理和工作流程 3.1、slave启动&#xff0c;同步清初 3.2 首次连接&#xff0c;全量复制 3.…

【CNN】卷积神经网络(LeNet)是什么?如何实现LeNet?

系列文章目录 第一章 深度学习 CNN中的卷积神经网络&#xff08;LeNet&#xff09; 目录 系列文章目录 文章目录 前言 一、卷积神经网络&#xff08;LeNet&#xff09;是什么&#xff1f; 二、LeNet的网络结构 三、实现LeNet模型 ​​​​ 总结 前言 本文主要是介绍卷…

【改进粒子群优化算法】自适应惯性权重粒子群算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【软考|软件设计师】某计算机系统的CPU主频为2.8GHz

目录 题&#xff1a; CPI MIPS 题&#xff1a; 某计算机系统的CPU主频为2.8GHz。某应用程序包括3类指令&#xff0c;各类指令的CPI &#xff08;执行每条指令所需要的时钟周期&#xff09;及指令比例如下表所示。执行该应用程序时 的平均CPI为______&#xff1b; 运算速度…

面试了一个00后,绝对能称为是内卷届的天花板

前言 公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资也不低&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。令我印象最深的是一个00后测试员&#xf…

DelphiMVCFrameWork 源码分析(三)

中间件(MiddleWare) 文档中是这样说的&#xff1a; Middleware is a powerful and flexible layer within DMVCFramework. Middleware allows you to write SOLID code and separate the processing or each request into smaller steps to be invoked during the request ha…

二本4年测试经验,5面阿里(定薪38K),分享我的心得

年前准备跳槽&#xff0c;先后面试了各大小公司&#xff0c;拿了一些offer&#xff0c;有阿里&#xff0c;滴滴&#xff0c;快手&#xff0c;达达&#xff0c;得物等公司。面试的公司大部分都能过&#xff0c;所以这里给大家分享下自己的经验&#xff0c;也给自己做个归档&…

新书推荐:《AIGC未来已来——迈向通用人工智能时代》

新书推荐&#xff1a;《AIGC未来已来——迈向通用人工智能时代》 导言 AIGC为何引发关注&#xff1f; ChatGPT会成为人工智能的拐点吗&#xff1f; GPT-4未来已来&#xff0c;奇点时刻该如何面对&#xff1f; 人类的创新能力会被AIGC替代吗&#xff1f; 当下有哪些典型的AIGC变…

单片机GD32F303RCT6 (Macos环境)开发 (二十)—— 光感芯片veml7700的使用

光感芯片veml7700的使用 1、veml有7个寄存器&#xff0c;每个十六位&#xff0c;见图。 00是config寄存器&#xff0c; 01 02 是中断设置的阈值 03是节能模式的设置 04 是得到的光的亮度值 05是得到的data of whole WHITE 06是中断设置值。 2、我们只测试得到光的亮度值&…

86盒IP对讲一键报警器

86盒IP对讲一键报警器 86盒IP对讲一键报警器&#xff1a;革命性保障生命安全的利器&#xff01; 随着科技的飞速发展&#xff0c;我们的生活变得越来越方便和智能化。而86盒IP对讲一键报警器更是在这种背景下应运而生。这款产品不仅无缝对接各种手机APP&#xff0c;也可以在智…

Linux系统crash后定位方法-PCIE举例

crash解释 在Linux操作系统中&#xff0c;"crash"通常是指一种用于分析系统崩溃&#xff08;crash&#xff09;的工具或方法。当系统发生崩溃时&#xff0c;可能会产生一些关键信息&#xff0c;如错误日志、内存转储文件等。使用crash工具可以分析这些信息&#xff…

零基础自学【Web安全/网络渗透】,保姆级快速入门指南(非常详细)

前言 基础真的很简单&#xff0c;是个人稍微认点真都能懂&#xff0c;这就是好多人说的网络安全简单、易懂、好学&#xff0c;然后就是一顿浮夸的言论&#xff0c;误导那些小白&#xff0c;再然后那些小白也就跟着浮夸。这里我就给那些轻浮的人泼一桶冷水&#xff0c;懂跟学会…

香港人才引进只看本科排名,“以本科定终身”是否公平?

2022年10月20日&#xff0c;香港特首在《2022 施政报告》时公布&#xff0c;新推出高端人才通行证计划&#xff0c;简称“高才通”&#xff0c;豪言3年引入10万人才&#xff0c;接受全球百强名校本科毕业的高材生或年收入超过250万港币的高收入群体到香港工作。 香港高才通是目…

【数据结构】链表(C语言实现)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c语言系列专栏&#xff1a;c语言之路重点知识整合 &#x…

丁鹿学堂:vue的脚手架项目基础入门和单文件代码分析

在实际开发中&#xff0c;我们都是通过脚手架创建vue项目的。 默认安装了node&#xff0c;yarn&#xff0c; 1创建项目&#xff1a; yarn create vue为了学习&#xff0c;我们选择最简单的培训&#xff0c;一路下来都选no 2 创建项目以后&#xff0c;只是搭起了架子&#x…

Uniapp一言“一句话接口调用

界面 代码 <template><view ><view class"uni-padding-wrap uni-common-mt"><view class"text-box" scroll-y"true"><text>{{data}}</text></view><view class"uni-btn-v"><butto…

(C语言版)力扣(LeetCode)栈和队列面试题

栈和队列面试题 20. 有效的括号题目解法一&#xff1a;建立栈解决解法二&#xff1a;数组模拟栈解决 225. 用队列实现栈题目解法&#xff1a;两个队列实现栈 232. 用栈实现队列题目解法&#xff1a;两个栈实现队列 622. 设计循环队列题目解法一&#xff1a;数组解法二&#xff…

AcWing算法提高课-1.3.3宠物小精灵之收服

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。 一天&#xff0c;小智和皮卡丘来到了小精灵狩猎场&#xff0c;里面有…