资源简介
S-35390A RTC读写程序,STM32单片机代码,包含程序和头文件。
代码片段和文件信息
#include “rtc.h“
#include “delay.h“
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
uint8_t data;
void RTC_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOC_CLK_ENABLE(); //使能GPIOC时钟
//PC23初始化设置
GPIO_Initure.Pin=GPIO_PIN_2|GPIO_PIN_3;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOC&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;
GPIO_Initure.Mode=GPIO_MODE_INPUT;
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
HAL_GPIO_Init(GPIOC&GPIO_Initure);
RTC_SDA=1;
RTC_SCL=1;
}
//产生IIC起始信号
void RTC_Start(void)
{
RTC_SDA_OUT();
RTC_SCL=1;
delay_us(5);
RTC_SDA=0;//START:when CLK is highDATA change form high to low
delay_us(5);
}
//产生IIC停止信号
void RTC_Stop(void)
{
RTC_SDA_OUT();
RTC_SCL=1;
delay_us(5);
RTC_SDA=1;
delay_us(4);
}
//等待应答信号到来
void RTC_Write_Ack(void)
{
RTC_SDA_IN();
RTC_SCL=0;
delay_us(5);
RTC_SCL=1;
delay_us(5);
RTC_SCL=0;
delay_us(5);
RTC_SDA=0;
RTC_SDA_OUT();
delay_us(5);
}
//产生ACK应答
void RTC_Read_Ack(void)
{
RTC_SDA_OUT();
delay_us(5);
RTC_SDA=0;
delay_us(5);
RTC_SCL=1;
delay_us(5);
RTC_SCL=0;
delay_us(5);
RTC_SDA_IN();
delay_us(2);
}
//IIC发送一个字节
void RTC_Send_Byte(u8 txd)
{
u8 t;
RTC_SDA_OUT();
RTC_SCL=0;
delay_us(5);
for(t=0;t<8;t++)
{
RTC_SCL=0;
delay_us(5);
if(txd&0x01)RTC_SDA=1;
else RTC_SDA=0;
txd>>=1;
delay_us(5);
RTC_SCL=1;
delay_us(5);
}
RTC_Write_Ack();
}
//读1个字节
u8 RTC_Read_Byte(u8 data)
{
unsigned char ireceive=0;
RTC_SDA_IN();
for(i=0;i<8;i++ )
{
RTC_SCL=1;
delay_us(5);
RTC_SCL=0;
receive>>=1;
if(READ_RTC_SDA)receive|=0x80;
delay_us(5);
}
return receive;
}
void Clock_init(void)
{
RTC_Init();
RTC_Start();
RTC_Send_Byte(W_RTC_STATUS);
RTC_Send_Byte(W_RTC_24H);
RTC_Stop();
}
void CLOCK_SetDate(u8 *Buffer)
{
u8 iClock_RTC_Buffer[7];
for (i=0;i<3;i++)
{
Clock_RTC_Buffer[i]=((Buffer[i]/10)<<4)|(Buffer[i]%10);
Clock_RTC_Buffer[i+4]=((Buffer[i+3]/10)<<4)|(Buffer[i+3]%10);
}
Clock_RTC_Buffer[3]=Buffer[6];//((Buffer[6]/10)<<4)|(Buffer[6]%10);
RTC_Start();
RTC_Send_Byte(W_RTC_YEAR);
//DISPLAY_HEX_CODE(708(unsigned char *)&Clock_RTC_Buffer[0]1);
for (i=0;i<7;i++) RTC_Send_Byte(Clock_RTC_Buffer[i]);
RTC_Stop();
}
void CLOCK_SetTime(u8 *Buffer)
{
u8 iClock_RTC_Buffer[3]
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4058 2019-01-16 21:37 rtc.c
文件 1835 2019-01-16 21:38 rtc.h
- 上一篇:IE一键设置
- 下一篇:PIX2.4.6原理图及PCB-EAGLE版本.rar
评论
共有 条评论