STM32F407读写IIC串行接口高精度实时时钟SD2405ALPI以及倒计时中断详细使用

一、倒计时相关寄存器

1、0FH负责写允许

2、10H负责写允许和选择倒计时功能(允许倒计时和选择倒计时中断输出)

3、13H负责设置倒计时时间

4、允许倒计时,需要将10H的INTDE置位

5、允许倒计时,需要将10H的INTS1置位,INTS0置位

6、倒计时选择秒到计时

      11H寄存器的TDS1=1,TDS0=0,表示使用倒计时的秒倒计数功能(因为定时器频率源为1HZ),程序中往13H寄存器中送的数值的单位为秒(最大支持255秒)。

 

 

7、倒计时选择分钟到计时

      11H寄存器的TDS1=1,TDS0=1,表示使用倒计时的分钟倒计数功能(因为定时器频率源为1/60HZ),程序中往13H寄存器中送的数值的单位为分钟(最大支持255分钟)。

8、程序


// 
//写SD2405允许程序
// 
void WriteTimeOn(void)
{		
	I2CStart();
	I2CSendByte(0x64);      
	I2CWaitAck();   
	I2CSendByte(0x10);		//设置写地址10H      
	I2CWaitAck();	
	I2CSendByte(0x80);		//置WRTC1=1      
	I2CWaitAck();
	I2CStop(); 

	I2CStart();
	I2CSendByte(0x64);      
	I2CWaitAck();   
	I2CSendByte(0x0F);		//设置写地址0FH
	I2CWaitAck();	
	I2CSendByte(0x84);		//置WRTC2,WRTC3=1
	I2CWaitAck();
	I2CStop(); 
}



// 
//写SD2405禁止程序
// 
void WriteTimeOff(void)
{		
	I2CStart();
	I2CSendByte(0x64);      
	I2CWaitAck();   
	I2CSendByte(0x0F);		//设置写地址0FH      
	I2CWaitAck();	
	I2CSendByte(0x0) ;		//置WRTC2,WRTC3=0      
	I2CWaitAck();
	I2CSendByte(0x0) ;		//置WRTC1=0(10H地址)      
	I2CWaitAck();
	I2CStop(); 
}



///
//BCD转换成16进制数
// 
uint8_t BCDtoHEX(uint8_t BCD)
{	
	uint8_t tempData;
	
	tempData = (BCD >> 4) * 10 + (BCD & 0x0F);
	return (tempData);
}



///
//16进制数转换成BCD码
// 
uint8_t HEXtoBCD(uint8_t HEX)
{
	uint8_t tempData;
	
	tempData = ((HEX / 10) << 0x04) + (HEX % 10);
	return (tempData);
}


///
//设置倒计时中断(单位:分钟)
// 
void SetDjs(uint8_t djs_Minute) 
{
	WriteTimeOn();
	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck();   
	I2CSendByte(0x10);      	//发送起始地址(0x10=CTR2控制寄存器)
	I2CWaitAck();   
	I2CSendByte(0xF0);      	//清倒计时中断总允许位(INTDE)
	I2CWaitAck();			
	I2CStop();				

	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck();   
	I2CSendByte(0x10);      	//发送起始地址(0x10=CTR2控制寄存器)
	I2CWaitAck();   
	I2CSendByte(0xF4);      	//INT中断选通(INTS1=1,INTS0=1选择倒计时中断),配置倒计时中断总允许位(INTDE=1)
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck();  
	I2CSendByte(0x11);      	//发送起始地址(0x11=CTR3控制寄存器)
	I2CWaitAck(); 
	I2CSendByte(0x30);		//选择定时器频率源(TDS1=1、TDS0=1)为1/60Hz
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck(); 
	I2CSendByte(0x12);      	//发送起始地址(0x12=时间调整寄存器)
	I2CWaitAck(); 	
	I2CSendByte(0x00);		//数字调整寄存器(12H)清0
	I2CWaitAck();
	
	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck(); 
	I2CSendByte(0x13);      	//发送起始地址(0x13=倒计时寄存器)
	I2CWaitAck();	
	I2CSendByte(djs_Minute);		//设置计数初值(单位:分钟)
	I2CWaitAck();
	I2CStop();
	WriteTimeOff();
}



///
//关闭倒计时中断
// 
void ClrDjs(void) 
{
	WriteTimeOn();	
	I2CStart();
	I2CSendByte(0x64);      	//发送SD2400写寄存器命令
	I2CWaitAck();   
	I2CSendByte(0x10);      	//发送起始地址(0x10=CTR2控制寄存器)
	I2CWaitAck();   
	I2CSendByte(0xF0);      	//清倒计时中断总允许位(INTDE)
	I2CWaitAck();		  	
	I2CStop();				
	WriteTimeOff();
}

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: hal stm32f407是指使用HAL库编写的适用于STM32F407系列单片机的驱动程序。而"oled iic 0.96"是指一款0.96英寸OLED显示屏,使用I2C通信协议进行数据传输。 为了在STM32F407上驱动这个OLED显示屏,我们可以使用HAL库提供的函数来配置STM32F407I2C外设,并通过I2C总线来和OLED进行通信。首先,我们需要通过初始化函数来配置STM32F407的GPIO和I2C外设,使其适应OLED的工作要求。然后,我们可以使用HAL库提供的I2C读写函数来向OLED发送命令或数据。 通常,OLED显示屏驱动需要以下步骤: 1. 创建一个I2C_HandleTypeDef结构体,并通过HAL_I2C_Init函数对其进行初始化。 2. 通过HAL_GPIO_Init函数来初始化和配置I2C总线相关的GPIO引脚。 3. 使用HAL_I2C_Master_Transmit函数发送OLED的初始化命令序列,以配置OLED的工作模式和显示设置。 4. 在需要显示内容时,使用HAL_I2C_Master_Transmit函数发送显示数据到OLED,以在屏幕上显示对应的图像或文本。 需要注意的是,具体的初始化命令和数据传输格式可能因OLED显示屏的型号而有所差异,所以在具体应用时需要参考OLED显示屏的驱动手册来进行相关的配置。 总之,通过HAL库的支持,我们可以轻松地在STM32F407上驱动该款OLED显示屏,让它显示我们想要的图像或文本。 ### 回答2: HAL是指用于微控制器芯片的硬件抽象层,可以为芯片的底层硬件提供统一的接口和函数库。STM32F407是意法半导体公司开发的一款32位微控制器芯片,具有高性能和多种接口功能。而0.96是一种OLED显示屏,具有0.96英寸的尺寸。 在STM32F407上,我们可以使用HAL库提供的函数来使用OLED显示屏。采用IIC(Inter-Integrated Circuit)接口来连接STM32F407和OLED 0.96,IIC是一种串行通信协议,适用于短距离通信。这种连接方式可以实现双向通信,方便控制与数据传输。 使用HAL库,我们可以通过配置相应的GPIO管脚作为IIC接口的时钟线SCL(Serial Clock)和数据线SDA(Serial Data)来连接STM32F407与OLED 0.96。然后通过使用HAL_I2C_Master_Transmit和HAL_I2C_Master_Receive函数来发送和接收数据。 在操作过程中,我们可以使用HAL库提供的函数来控制OLED显示屏的亮度、对比度、显示模式等设置。通过调用HAL_Delay函数可以实现延时操作,以控制显示的刷新频率和动画效果。 总之,使用HAL库,我们可以方便地在STM32F407上通过IIC接口驱动OLED 0.96显示屏,实现各种功能和效果,为嵌入式系统开发提供了便利。 ### 回答3: HAL是指STM32的硬件抽象层(Hardware Abstraction Layer),是ST公司为STM32微控制器提供的一组API函数库。通过使用HAL,开发人员可以更方便地操作STM32微控制器的各种外设。 STM32F407是一款高性能的ARM Cortex-M4微控制器,主频达到168MHz,拥有256KB的Flash存储器和SDRAM控制器,适用于各种工业控制、通信、嵌入式音频等应用。 OLED(Organic Light Emitting Diode)是一种有机发光二极管显示技术,具有高对比度、快速响应、低功耗等优点。它可用于制作小尺寸的、超薄的显示屏,广泛应用于手机、手表、电视等设备。 IIC(Inter-Integrated Circuit)是一种串行通信协议,也称为I2C(Inter-IC)总线。它是一种多主设备、多从设备的通信协议,可以连接多个外设与微控制器进行通信。 0.96指的是OLED显示屏的尺寸,即0.96英寸。这个尺寸适用于一些小型的电子设备。 综上所述,"HAL STM32F407 OLED IIC 0.96"意味着使用STM32F407微控制器,通过HAL函数库驱动一个0.96英寸的OLED显示屏,使用IIC总线进行通信。这种硬件组合可以实现在STM32F407上驱动OLED屏幕显示各种信息,例如文本、图形等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值