提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、RT-Thread工程創建
- 1.硬件RTC配置
- 2.軟件RTC配置
- 3.RTC鬧鐘配置
- 總結
前言
本章是基于RT-Thread studio實現RTC硬件和軟件下的日歷時鐘功能,開發板是正點原子的STM32F4探索者,使用的RT-Thread驅動是5.1.0。
有關于RTC的介紹和cubemx配置參數含義可以看看這篇文章
基于STM32F4的cubemx關于RTC配置說明
一、RT-Thread工程創建
從以前文章得到驅動5.1.0不報錯工程
1.硬件RTC配置
先按照/* RTC CONFIG BEGIN */的STEP的1、2、3配置一下。注意先不要使用軟件模擬RTC,先使用硬件模式。如果你目前的開發板沒有硬件RTC,那么也先這么操作。
如果不出意外,你將會得到以下的報錯和警告
第一處錯誤,對于5.1.0版本來說,RT_WEAK改成了小寫rt_weak,我們改過來。吐槽一下,RT-Thread studio的編譯,報錯信息一點都不準。
改正后,報錯減少。這里的錯誤是參數類型不匹配的錯誤。
結構體參數如下
struct rt_rtc_ops
{rt_err_t (*init)(void);rt_err_t (*get_secs)(time_t *sec);rt_err_t (*set_secs)(time_t *sec);rt_err_t (*get_alarm)(struct rt_rtc_wkalarm *alarm);rt_err_t (*set_alarm)(struct rt_rtc_wkalarm *alarm);rt_err_t (*get_timeval)(struct timeval *tv);rt_err_t (*set_timeval)(struct timeval *tv);
};
報錯函數參數如下
static rt_err_t stm32_rtc_get_secs(void *args)
static rt_err_t stm32_rtc_set_secs(void *args)
static rt_err_t stm32_rtc_get_timeval(void *args)
可以看到形參不匹配,把函數形參改過來就行
static rt_err_t stm32_rtc_get_secs(time_t *args)
static rt_err_t stm32_rtc_set_secs(time_t *args)
static rt_err_t stm32_rtc_get_timeval(struct timeval *args)
這樣,就沒有報錯和警告了。接下來按照手冊上函數**set_date()和set_time()**來設置日期和時間也不會有問題。
下載后,可以看到硬件RTC正常工作。
2.軟件RTC配置
去設置里面打開軟件RTC。編譯有一個警告說結構體rtc_sync_work沒有使用,這不影響。
下載下去,msh控制臺反饋報錯,我們可以看到報錯文件時drv_rtc,內容是rtc創建錯誤。
我們找到報錯語句,可以看到,這里是設備名稱時 “RTC”,但是現在使用軟件模擬RTC,那么設備名稱將變成 “soft_rtc”,更改一下,發現下載后控制臺不報錯。可以和硬件定時器一樣正常使用
3.RTC鬧鐘配置
目前RT-Thread好像并沒有晚上鬧鐘alarm的配置,我也嘗試著自己配置了一下,但是一直不成功。確實,之前裸機操作時也沒有關心過RTC,對RTC的硬件基礎理解不夠,有些地方無從下手了。在RT-Thread的論壇有很多博主有關于這方面的文章,實在有需要可以看看他們的。
總結
本章是基于RT-Thread studio實現RTC硬件和軟件下的日歷時鐘功能,對于鬧鐘功能還未實現,哪天實現了,再補充。