H2S stm32F407ZET stm32F407ZGT
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
H2S/Code/base/Inc/ds1302.h

80 lines
3.0 KiB

#ifndef DS1302_H_
#define DS1302_H_
#include <stddef.h>
#include <stdint.h>
// #include "config.h"
#include "time_clock.h"
#include "stm32f4xx.h"
/*
ds1302_get_time_s 获得BCD 并转时间戳 ds1302_read_bytes(&ds1302,DS1302_CMD_MASK|DS1302_CMD_REG_MASK,DS1302_REG_ADDR_ALL,time_bcd,8),
时间戳转 time_clock_date , time_clock_time_to_date(uint64_t time_s,struct time_clock_date *date,int8_t time_zone)
将time_clock_date 转时间戳 ,time_clock_date_to_time(struct time_clock_date *date,int8_t time_zone)
ds1302_set_time_s 将时间戳写入ds1302
获得时间字符串 uint32_t time_clock_get_time_str(char *buf,int8_t time_zone); 字符串写入buf, 返回字符串长度
*/
#define Bit_SET SET
#define Bit_RESET RESET
#define GPIO_WriteBit HAL_GPIO_WritePin
#define GPIO_ReadInputDataBit HAL_GPIO_ReadPin
#define DS1302_CMD_MASK (0x80)
#define DS1302_CMD_READ_MASK (0x01)
#define DS1302_CMD_WRITE_MASK (0x00)
#define DS1302_CMD_REG_MASK (0x00)
#define DS1302_CMD_RAM_MASK (0x40)
#define DS1302_REG_SECONDS_CH_MASK (0x80)
#define DS1302_REG_HOUR_12_N24_MASK (0x80)
#define DS1302_REG_HOUR_NAM_PM_MASK (0x20)
#define DS1302_REG_CONTROL_WP_MASK (0x80)
enum ds1302_reg_addr
{
DS1302_REG_ADDR_SECONDS=0x00,
DS1302_REG_ADDR_MINUTES=0x01,
DS1302_REG_ADDR_HOUR=0x02,
DS1302_REG_ADDR_DATE=0x03,
DS1302_REG_ADDR_MONTH=0x04,
DS1302_REG_ADDR_DAY=0x05,
DS1302_REG_ADDR_YEAR=0x06,
DS1302_REG_ADDR_CONTROL=0x07,
DS1302_REG_ADDR_TRICKLE_CHARGER=0x08,
DS1302_REG_ADDR_ALL=0x1f
};
enum ds1302_trickle_charger_tcs{
DS1302_TRICKLE_CHARGER_TCS_OFF=0x00,
DS1302_TRICKLE_CHARGER_TCS_ON=0xa0
};
enum ds1302_trickle_charger_ds{
DS1302_TRICKLE_CHARGER_DS_1=0x04,
DS1302_TRICKLE_CHARGER_DS_2=0x08
};
enum ds1302_trickle_charger_rs{
DS1302_TRICKLE_CHARGER_RS_NONE=0x00,
DS1302_TRICKLE_CHARGER_RS_2K=0x01,
DS1302_TRICKLE_CHARGER_RS_4K=0x02,
DS1302_TRICKLE_CHARGER_RS_8K=0x03
};
struct ds1302
{
struct time_clock_time time_base;
GPIO_TypeDef *gpio_ce;
GPIO_TypeDef *gpio_sclk;
GPIO_TypeDef *gpio_io;
uint16_t pin_ce;
uint16_t pin_sclk;
uint16_t pin_io;
};
struct ds1302* ds1302_init(struct ds1302 *ds1302,GPIO_TypeDef *gpio_ce,GPIO_TypeDef *gpio_sclk,GPIO_TypeDef *gpio_io,uint16_t pin_ce,uint16_t pin_sclk,uint16_t pin_io);
int ds1302_write_bytes(struct ds1302 *ds1302,uint8_t cmd,uint8_t addr,const uint8_t *bytes,uint8_t num);
int ds1302_read_bytes(struct ds1302 *ds1302,uint8_t cmd,uint8_t addr,uint8_t *bytes,uint8_t num);
int ds1302_write_disable(struct ds1302 *ds1302);
int ds1302_write_enable(struct ds1302 *ds1302);
uint64_t ds1302_get_time_s(struct ds1302 *ds1302);
int ds1302_set_time_s(struct ds1302 *ds1302,uint64_t time_s);
int ds1302_read_ram(struct ds1302 *ds1302,uint8_t addr,uint8_t *bytes,uint8_t num);
int ds1302_write_ram(struct ds1302 *ds1302,uint8_t addr,uint8_t *bytes,uint8_t num);
int ds1302_set_charger(struct ds1302 *ds1302,enum ds1302_trickle_charger_tcs tcs,enum ds1302_trickle_charger_ds ds,enum ds1302_trickle_charger_rs rs);
#endif