用HAL库读写INS5830B

想找一个内置晶体的时钟芯片,在网上搜了下找到了INS5830B并用在了板子上。板子回来了开始调试,却发现网上搜不到相关的驱动,有点小尴尬。

只能自己动手了。我基于手里已有的PCF8563的驱动进行了修改,使之能够用于INS5830B。

首先,INS5830B的地址确定为0x64。

其实,INS5830B的寄存器定义和PCF8563也不一致,需调整。因为目前我只是需要最基本的日历功能,所以只顾及到年月日时分秒的寄存器和控制寄存器。即使是控制寄存器的大部分控制位,我也还没实现其功能。

#define SECOND_DATA_BUF 0x10
#define MINUTE_DATA_BUF 0x11
#define HOUR_DATA_BUF   0x12

#define WEEK_DATA_BUF   0x13
#define DAY_DATA_BUF    0x14
#define MONTH_DATA_BUF  0x15
#define YEAR_DATA_BUF   0x16
#define CTRL_BUF1       0x1E
#define CTRL_BUF2       0x1F

如果只使用日历功能的话,CTRL_BUF1和CTRL_BUF2可以不用管,默认值0就可以了。

WEEK_DATA_BUF这个我没用到,也没有管。

剩下的年月日时分秒寄存器里,需要注意的只有年这个寄存器,INS5830B和PCF8563是不一样的。INS5830B的范围是00-99(2000年以后),而PCF8563则是因为是上世纪的产品,有一位是表示2000年以前还是2000年以后。所以相关函数需要做一些修改。

只改完寄存器定义和年份相关的处理函数,下面的函数就能正常工作了。

void INS5830B_Set_Time(int hour, int minute, int second);
void INS5830B_Get_Time(UBYTE *buf);
void INS5830B_Set_Days(int year, int months, int days);
void INS5830B_Get_Days(UBYTE *buf);

写上一个测试函数,就能成功的设定时间和读取时间了。

void RTC_Init(void)
{
  INS5830B_Init();
  INS5830B_Set_Time(1,2,3);//Time
  INS5830B_Set_Days(2005,6,7);//Days
}
void RTC_polling(void)
{
  uint8_t buf[10];
  INS5830B_Get_Time(buf);
  INS5830B_Get_Days(&buf[3]);
  printf("20%02d Year %d Month %d Day %d:%d:%d\r\n",buf[5],buf[4],buf[3],buf[2],buf[1],buf[0]);
  HAL_Delay(1000);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值