- There are different ways to be brave.
勇敢有不同種方式。
一、需求
在單片機上實現RTC的驅動,利用WIFI模塊獲取NTP服務器中的網絡時間,並將其更新至RTC上。
二、實現
- 1、使用STM32CubeMX配置好RTC的驅動。
- 2、通過WIFI模塊從NTP服務器中獲取時間,使用了這篇文章《NTP協議代碼實現》的代碼實現了將獲取的網絡時間存入了單片機內部定義的結構體中。
- 3、利用獲取的網絡時間對RTC的時間進行校正,然後1s一次打印到串口上。具體實現請看大神的這篇文章《RTC時間更新》,下面的代碼也是直接拿來就用了。
/* Get the RTC current Date */
HAL_RTC_GetDate(&hrtc, &sdate_get, RTC_FORMAT_BIN);
/* Get the RTC current Time */
HAL_RTC_GetTime(&hrtc, &stime_get, RTC_FORMAT_BIN);
printf("%d-%02d-%02d %02d:%02d:%02d\n",2000 + sdate_get.Year, sdate_get.Month, sdate_get.Date,\
stime_get.Hours,stime_get.Minutes,stime_get.Seconds);
三、實驗結果
1s輸出一次更新後的數據如下:
四、參考資料
- STM32CubeMX系列教程13:實時時鐘(RTC)
- 《NTP協議代碼實現》
- 《RTC時間更新》
- 《何志傑 – RT-thread入門課程》 – 15.RT-Thread Nano-NTP-獲取網絡時間