stm32-DS1302时钟模块驱动

这篇具有很好参考价值的文章主要介绍了stm32-DS1302时钟模块驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DS1302是时钟芯片

1. DS1302芯片简介

DS1302的寄存器地址定义如下:

 文章来源地址https://www.toymoban.com/news/detail-432094.html

stm32-DS1302时钟模块驱动

单字节读写时序如下图,均为上升沿触发:

stm32-DS1302时钟模块驱动

 由于DS1302时钟芯片不是常用的SPI协议,与SPI协议很像,所以需要初始化普通GPIO口手工实现该协议通信。

2. cubemx设置

设置分别连接DS1302的CE、SCLK、Data口的GPIO,PB8\PB9\PB10:

stm32-DS1302时钟模块驱动

3. keil开发

打开gpio.h文件,定义结构体和预处理:

#define W_SECOND 0x80
#define W_MINUTE 0x82
#define W_HOUR   0x84
#define W_DAY    0x86
#define W_MONTH  0x88
#define W_WEEK   0x8A
#define W_YEAR   0x8C
#define W_CONTR  0x8E

#define R_SECOND 0x81
#define R_MINUTE 0x83
#define R_HOUR   0x85
#define R_DAY    0x87
#define R_MONTH  0x89
#define R_WEEK   0x8B
#define R_YEAR   0x8D
#define R_CONTR  0x8F

#define RST_L     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET)
#define RST_H     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET)
#define CLK_L     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET)
#define CLK_H     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET)
#define DATA_L    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET)
#define DATA_H    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET)

#define DATA_READ HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)

typedef struct {
	uint8_t year;
	uint8_t week;
	uint8_t month;
	uint8_t day;
	uint8_t hour;
	uint8_t minute;
	uint8_t second;
}timeNow_t;

由于数据发送和接受是共用PB10,编写数据写GPIO和读GPIO的初始化:

static void DS1302_Data_Write_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	  /*Configure GPIO pin : PB10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
static void DS1302_Data_Read_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	  /*Configure GPIO pin : PB10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

定义读和写寄存器的操作函数:

void DS1302_Single_Byte_Write(uint8_t data)
{
	DS1302_Data_Write_Init();
	CLK_L;
	for(int i=0;i<8;i++)
	{
		CLK_L;
		if((data&0x01)==0x01)
			DATA_H;
		else
			DATA_L;
		data>>=0x01;
		CLK_H;
	}
}
void DS1302_Write_Register(uint8_t regAddress,uint8_t regData)
{
	RST_L;
	CLK_L;
	RST_H;
	DS1302_Single_Byte_Write(regAddress);
	DS1302_Single_Byte_Write(regData);
	RST_H;
}
uint8_t DS1302_Read_Register(uint8_t regAddress)
{
	RST_L;
	CLK_L;
	uint8_t regData=0x00;
	RST_H;
	DS1302_Single_Byte_Write(regAddress);
	DS1302_Data_Read_Init();
	for(int i=0;i<8;i++)
	{
		regData>>=0x01;
		CLK_H;
		CLK_L;
		HAL_Delay(1);
		if(DATA_READ==GPIO_PIN_SET)
			regData=regData|0x80;
	}
	RST_H;
	return regData;
}

 设置和读取时间函数:

void DS1302_Set_Time(uint8_t year,uint8_t week,uint8_t month,uint8_t day,uint8_t hour,uint8_t minute,uint8_t second)
{
	DS1302_Write_Register(W_CONTR,0x00);
	DS1302_Write_Register(W_YEAR,year);
	DS1302_Write_Register(W_WEEK,week);
	DS1302_Write_Register(W_MONTH,month);
	DS1302_Write_Register(W_DAY,day);
	DS1302_Write_Register(W_HOUR,hour);
	DS1302_Write_Register(W_MINUTE,minute);
	DS1302_Write_Register(W_SECOND,second);
	DS1302_Write_Register(W_CONTR,0x80);
}
timeNow_t DS1302_Read_Time(void)
{
	timeNow_t timeNow;
	timeNow.year=DS1302_Read_Register(R_YEAR);
	timeNow.week=DS1302_Read_Register(R_WEEK);
	timeNow.month=DS1302_Read_Register(R_MONTH);
	timeNow.day=DS1302_Read_Register(R_DAY);
	timeNow.hour=DS1302_Read_Register(R_HOUR);
	timeNow.minute=DS1302_Read_Register(R_MINUTE);
	timeNow.second=DS1302_Read_Register(R_SECOND);
	return timeNow;
}

显示时间:

void DS1302_Print_Time(void)
{
	timeNow_t timeNow=DS1302_Read_Time();
	printf("20%02X-%02X-%02X %02X:%02X:%02X\n",timeNow.year,timeNow.month,timeNow.day,timeNow.hour,timeNow.minute,timeNow.second);
	
}

在main函数中测试是否成功实现时钟显示:

	DS1302_Set_Time(0x22,0x07,0x08,0x07,0x11,0x36,0x09);

  while (1)
  {
		HAL_Delay(1000);
		DS1302_Print_Time();
  }

成功显示时钟:

stm32-DS1302时钟模块驱动

 

到了这里,关于stm32-DS1302时钟模块驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mcuclub】时钟模块DS1302

      编号 名称 功能 1 VCC2 双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电 2 X1 32.768kHz晶振引脚 3 X2 4 GND 电源地 5 CE 使能引脚。输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第

    2024年04月09日
    浏览(38)
  • 【51单片机系列】DS1302时钟模块

    本文是关于DS1302时钟芯片的相关介绍。 DS1302是DALLAS公司推出的涓流充电时钟芯片,内部含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。该芯片是3线SPI接口。 实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天

    2024年02月03日
    浏览(67)
  • STM32初学-外部RTC时钟芯片DS3231

             RTC(Real_Time Clock) 即实时时钟,它是电子产品中不可或缺的东西。其最直接的作用就是时钟功能。细心的朋友可以发现,当我们的电脑或者手机没联网时,仍然可以正常显示日期与时钟,这就是RTC的功劳。         RTC的运行无需网络连接,只需一个频率固定的振

    2024年02月09日
    浏览(41)
  • FPGA通过读写突发对DS1302时钟的配置&驱动

    环境: 1、Quartus18.0 2、vscode 3、板子型号:EP4CE6F17C8 4、实时时钟模块:DS1302 要求: 使用 EP4CE6F17C8开发板驱动 实时时钟模块(DS1302 ),并将配置完后的时钟传回到上位机。我们上电后直接对实时时钟进行配置,在按键按下后,向上位机发送我们的时钟数据。 这里我们会先对

    2024年02月04日
    浏览(43)
  • 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:以下是本篇文章正文内容,下面案例可供参考 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作

    2024年02月02日
    浏览(65)
  • 基于普中A2实验板,ds18b20温度传感器与ds1302时钟芯片的冲突现象的探讨

    在普中板上进行写较综合的项目时,是否会出现温度传感器经常出错的问题,明明是严格按照时序图所编写的程序就是无法读出正确的值(全为0),或许温度底层在其他工程里能正常运行,而到了某些工程中却总是出错。这些就是我经常遇到的问题。 那么问题的根源是什么

    2024年02月11日
    浏览(38)
  • 36、基于STM32的电子闹钟(DS1302)

          本设计由STM32单片机+液晶1602+按键+DS1302时钟模块+声光报警模组成。 1、采用STM32F103最小系统。 2、利用DS1302芯片提供时钟信号 3、液晶1602实时显示年月日、时分秒、星期等信息。 4、四个按键可实现年月日、时分秒的设定,闹钟的时分设置。按键功能分别为:设置时间键

    2024年02月03日
    浏览(38)
  • 实时时钟芯片DS1307的使用及驱动代码

    DS1307实时时钟芯片的介绍及驱动代码 目录 一、DS1307是什么? 二、DS1307的功能 三、DS1307的寄存器 四、代码 1.读出数据 2.写入数据 3.时间初始化设置 4.获取当前时间 五、注意事项 总结 DS1307是一款基于IIC总线接口的实时时钟芯片,可以独立于MCU工作,芯片具有备用电源自动切

    2024年02月05日
    浏览(37)
  • DS1302教程及proteus仿真(51和stm32)

    DS1302是一款时钟芯片,能精确对年月日时分秒进行计算,并且能自动校准闰年和每个月的不同天数,下面从51和stm32两款单片机介绍其用法 DS1302采用三线SPI通信 ,下图详细说明了各引脚的接线方式  DS1302使用的并不是标准的SPI通信,它的数据输入输出为同一根线。通信时序图

    2024年02月05日
    浏览(130)
  • DS1302实时时钟

    实时时钟就是一个可以用来计时的芯片,Y3是一个晶振,提供一个时钟基准给DS1302,让DS1302每一秒走时一次。有的实时时钟不需要外接晶振,直接在内部集成了,但蓝桥杯板载的有。 使用的是3线SPI协议,与前面的单总线和IIC协议不一样 VCC1:备用电源,可以在板子断电是依然

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包