# BabyOS自动校准时间设计 BabyOS已存在UTC相关代码,bos/utils/b_util_utc.c 主要作用: ① utc和date-time的相互转换 ②设置和获取当前UTC时间戳 最近BabyOS增加了TCP/UDP传输层功能的支持,这样便可以周期性的同步网络时间设置到utc模块。 新增 tcpip服务模块,主要提供网络应用层接口,那同步网络时间作为第一个功能吧。 1. 支持配置3个ntp服务地址,请求失败后切换下一个。 ![img](../_static/ntp_config.png) 默认提供阿里云三个地址,用户可以根据需要决定是否修改。 1. 提供的接口 ``` int bSntpStart(uint32_t interval_s); ``` 用户调用这个接口,指定自动校准的间隔时长即可。 1. 代码介绍 ![UML1](../_static/ntp_code.jpg) 1. 测试代码 ```C // 打印当前时间 void ntp_test() { bUTC_DateTime_t tm; bUTC_t now_utc = bUTC_GetTime(); bUTC2Struct(&tm, now_utc, 8); b_log("%d-%d-%d %d:%d:%d %d\r\n", tm.year, tm.month, tm.day, tm.hour, tm.minute, tm.second, tm.week); } int main(void) { ... bInit(); bNetifAdd(&bMcuNetif, 0, 0, 0); bSntpStart(600); // 10分钟同步一次时间 while (1) { bExec(); BOS_PERIODIC_TASK(ntp_test, 1500); } } ``` 测试代码地址: https://gitee.com/notrynohigh/BabyOS_Example/blob/stm32f107_hal/stm32f107vc/Core/Src/main.c