蓝牙BLE芯片PHY6222之设置时间戳

蓝牙BLE芯片PHY6222之设置时间戳

个人建议使用外部32K作为RTC的时钟源,精度相对6222内部32K高很多,内部32K看官方资料是±500ppm的时钟精度

驱动

在app_datetime.c中加以下驱动

#if(time_test)

UTCTime appUTC_time;
UTCTimeStruct appUTC_timeStruct;
#define UNIX_2000 946656000
UTCTimeStruct user_get_utc(void);
void user_set_utc(UTCTimeStruct *m_UtcStr);
void my_dump_byte_reverse(uint8_t* pData, int dlen);

void app_set_time(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minutes, uint8 seconds)
{

    UTCTimeStruct test_time;

    test_time.year    = year;
    test_time.month   = month - 1;
    test_time.day     = day - 1;
    test_time.hour    = hour;
    test_time.minutes = minutes;
    test_time.seconds = seconds;
    user_set_utc(&test_time);
}

void get_current_systerm_time(datetime_t * rtc_time)
{
    UTCTimeStruct convet_timestamp_unit;
    UTCTimeStruct cnt;
    UTCTime utc_timecnt;

    cnt = user_get_utc();



    rtc_time->year      = cnt.year;
    rtc_time->month     = cnt.month;
    rtc_time->day       = cnt.day;
    rtc_time->hour      = cnt.hour;
    rtc_time->minutes   = cnt.minutes;
    rtc_time->seconds   = cnt.seconds;



    convet_timestamp_unit.year      = cnt.year;
    convet_timestamp_unit.month     = cnt.month - 1;
    convet_timestamp_unit.day       = cnt.day - 1;
    convet_timestamp_unit.hour      = cnt.hour;
    convet_timestamp_unit.minutes   = cnt.minutes;
    convet_timestamp_unit.seconds   = cnt.seconds;

    utc_timecnt = osal_ConvertUTCSecs(&convet_timestamp_unit) + 94665600;

    LOG("#timestamp=%d\r\n", utc_timecnt);
    LOG("#%4d:%02d:%02d--%02d:%02d:%02d\r\n", rtc_time->year, rtc_time->month, rtc_time->day,
        rtc_time->hour, rtc_time->minutes, rtc_time->seconds);

}

void user_set_utc(UTCTimeStruct *m_UtcStr)
{
    appUTC_time = osal_ConvertUTCSecs(m_UtcStr);
    osal_setClock(appUTC_time - UNIX_2000);
}
void timestamp_get_time(datetime_t * rtc_time)
{
    UTCTimeStruct cnt;

    cnt = user_get_utc();
    rtc_time->year      = cnt.year;
    rtc_time->month     = cnt.month;
    rtc_time->day       = cnt.day;
    rtc_time->hour      = cnt.hour;
    rtc_time->minutes   = cnt.minutes;
    rtc_time->seconds   = cnt.seconds;

    LOG("#%4d:%02d:%02d--%02d:%02d:%02d\r\n", rtc_time->year, rtc_time->month, rtc_time->day,
        rtc_time->hour, rtc_time->minutes, rtc_time->seconds);
}


void user_set_utc_timestamp_set_time(UTCTime utc_timecnt)
{
  
    osal_setClock(utc_timecnt - UNIX_2000);
}

UTCTimeStruct user_get_utc(void)
{
    UTCTimeStruct tmp_utcStr;

    appUTC_time = osal_getClock();
    appUTC_time += UNIX_2000;

    osal_ConvertUTCTime(&appUTC_timeStruct, appUTC_time);
    tmp_utcStr = appUTC_timeStruct;

    tmp_utcStr.day += 1;
    tmp_utcStr.month += 1;

    return tmp_utcStr;
}

#endif

在app_datetime.h中加入以下声明

#define time_test 	1
#if(time_test)

#include "OSAL_Clock.h"
#include "comdef.h"

#include "OSAL.h"

#define time_set_timestamp	0		//使用时间设置时间戳

#define timestamp_set_time 	1		//使用timestamp设置时间


void timestamp_get_time(datetime_t * rtc_time);
void user_set_utc_timestamp_set_time(UTCTime utc_timecnt);

void app_set_time(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minutes, uint8 seconds);
void get_current_systerm_time(datetime_t * rtc_time);

#endif

初始化

#if(time_test)
		if(time_set_timestamp)
		{
		app_set_time(2024, 4, 2, 13, 55, 56);
		
		}
		else if(timestamp_set_time){
			user_set_utc_timestamp_set_time(1712038396);
		}
		osal_start_reload_timer(simpleBLEPeripheral_TaskID, SBP_ADD_RL_EVT, 5000);
#endif

定时5s获取时间

    if ( events & SBP_ADD_RL_EVT )
    {
#if(time_test)
		datetime_t  ttdatetime;
		if(time_set_timestamp){
		
		get_current_systerm_time(&ttdatetime);
		}
		else if(timestamp_set_time)
		{
			timestamp_get_time(&ttdatetime);
		}
		
#endif
        return ( events ^ SBP_ADD_RL_EVT );
    }

在这里插入图片描述

PS:个人学习笔记demo传送门提取码:j4ny

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值