本篇博文最后修改时间:2017年06月02日,21:49。
一、简介
本文以SimpleBLEPeripheral工程为例,介绍如何通过app的指令对设备进行设置时间、读取时间。
二、实验平台
协议栈版本:ble_cc26xx_2_01_00_44423
编译软件:IAR Embedded Workbench for ARM Version 7.40
硬件平台:CC26xxDK开发板
仿真器:XDS100V3(香瓜)
手机平台:小米4S
APP:BLE读写器
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:.NET/feilusia
联系方式:897503845@qq
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜BLE之Android群:541462902
香瓜单片机之STM8/STM32群:164311667
五、基础知识
1、什么是RTC? 答:RTC(Real-time clock),也就是实时时钟。它常被用于设备端的时钟计时。typedef struct
{uint8_t seconds; // 0-59uint8_t minutes; // 0-59uint8_t hour; // 0-23uint8_t day; // 0-30uint8_t month; // 0-11uint16_t year; // 2000+
} UTCTimeStruct;
$PROJ_DIR$/../../../../../../../Projects/ble/common/cc26xx/Time
3)修改UTC_Clock.h
#include <stdint.h>
不增加这个头文件的话,会报错,缺少uint8等数据类型的定义。 //******************************************************************************
//name: GUA_RTC.c
//introduce: 香瓜自定义的RTC驱动
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
#include "GUA_RTC.h"//******************************************************************************
//name: GUA_RTC_Init
//introduce: 香瓜的RTC初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
void GUA_RTC_Init(void)
{//初始化UTC.UTC_init();
}
//******************************************************************************
//name: GUA_RTC_Set
//introduce: 香瓜的RTC设置时间函数
//parameter: pGUA_Timer:传入的时间
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
void GUA_RTC_Set(UTCTimeStruct *pGUA_Timer)
{UTCTimeStruct SetTime; UTCTime SetTime_seconds; //转换数据ar = pGUA_Timer->year; h = pGUA_Timer->month - 1; SetTime.day = pGUA_Timer->day - 1; SetTime.hour = pGUA_Timer->hour - 1; SetTime.minutes = pGUA_Timer->minutes; SetTime.seconds = pGUA_Timer->seconds; //将时间转换为秒SetTime_seconds = UTC_convertUTCSecs(&SetTime);//设置时间UTC_setClock(SetTime_seconds);
}//******************************************************************************
//name: GUA_RTC_Get
//introduce: 香瓜的RTC获取时间函数
//parameter: pGUA_Timer:传入的时间
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
void GUA_RTC_Get(UTCTimeStruct *pGUA_Timer)
{UTCTimeStruct GetTime;//获取当前数据UTC_convertUTCTime(&GetTime, UTC_getClock());//抓换数据pGUA_Timer->year = ar; pGUA_Timer->month = h + 1; pGUA_Timer->day = GetTime.day + 1; pGUA_Timer->hour = GetTime.hour + 1; pGUA_Timer->minutes = GetTime.minutes; pGUA_Timer->seconds = GetTime.seconds;
}
//******************************************************************************
//name: GUA_RTC.h
//introduce: 香瓜自定义的RTC驱动头文件
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
#ifndef _GUA_RTC_H_
#define _GUA_RTC_H_/*********************头文件************************/
#include "UTC_Clock.h"/*********************函数声明************************/
extern void GUA_RTC_Init(void);
extern void GUA_RTC_Set(UTCTimeStruct *pGUA_Timer);
extern void GUA_RTC_Get(UTCTimeStruct *pGUA_Timer);#endif
$PROJ_DIR$/../../../Source/Application/GUA
如果已添加过,就不用添加了。 #include "GUA_RTC.h"
//香瓜RTC初始化GUA_RTC_Init();
初始化RTC,否则时钟不会计数。 //******************************************************************************
//name: GUA_CharValueChangeEvt
//introduce: 应用层香瓜服务的处理函数
//parameter: paramID:特征值ID
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq
//QQ group 香瓜BLE之CC2640(557278427)
//changetime: 2016.09.04
//******************************************************************************
#define GUA_COMMAND_GET_TIME 0x01
#define GUA_COMMAND_SET_TIME 0x02
static void GUA_CharValueChangeEvt(uint8_t paramID)
{ uint16 notify_Handle; uint8 bBuf[20] = {0}; uint8 *p = bBuf; UTCTimeStruct GUA_Timer;switch(paramID) { //char1case GUAPROFILE_CHAR1: { //读出特征值数据GUAProfile_GetParameter(GUAPROFILE_CHAR1, p);//根据通信协议进行事件分发,功能码+年(2字节)+月+日+时+分+秒switch(p[0]){//读当前时间case GUA_COMMAND_GET_TIME:{//获取当前时间GUA_RTC_Get(&GUA_Timer);//整理发送缓冲区memset(p, 0xff, GUAPROFILE_CHAR1_LEN); p[0] = GUA_COMMAND_GET_TIME;p[1] = ar >> 8;p[2] = ar & 0xff; p[3] = h; p[4] = GUA_Timer.day;p[5] = GUA_Timer.hour; p[6] = GUA_Timer.minutes;p[7] = GUA_Timer.seconds; //发送GAPRole_GetParameter(GAPROLE_CONNHANDLE, ¬ify_Handle); GUAprofile_Notify(GUAPROFILE_CHAR1, notify_Handle, p, 20); break;}//设置当前时间case GUA_COMMAND_SET_TIME:{//读出要设置的时间ar = p[1];ar <<= 8;ar |= p[2]; h = p[3]; GUA_Timer.day = p[4];GUA_Timer.hour = p[5]; GUA_Timer.minutes = p[6];GUA_Timer.seconds = p[7];//设置当前时间 GUA_RTC_Set(&GUA_Timer);//获取当前时间GUA_RTC_Get(&GUA_Timer);//整理发送缓冲区memset(p, 0xff, GUAPROFILE_CHAR1_LEN); p[0] = GUA_COMMAND_SET_TIME;p[1] = ar >> 8;p[2] = ar & 0xff; p[3] = h; p[4] = GUA_Timer.day;p[5] = GUA_Timer.hour; p[6] = GUA_Timer.minutes;p[7] = GUA_Timer.seconds; //发送GAPRole_GetParameter(GAPROLE_CONNHANDLE, ¬ify_Handle); GUAprofile_Notify(GUAPROFILE_CHAR1, notify_Handle, p, 20); break;} //其他default:break; }break; }default:break; }
}
利用香瓜服务的char1,增加了两条指令:读RTC时间指令、设置RTC时间指令。
本文发布于:2024-01-27 21:20:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063616272707.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |