iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
1

今天來介紹RTC(Real-time clock)
中文有實時時鐘的稱呼
它的功能其實就是一個電子式的時鐘
運用在長期需要計算時間的電子設備中,例如電腦的自動休眠,冷氣的定時關機等等都是屬於RTC的範疇

RTC block diagram(P.644, 7.4.1 RTC block diagram in Reference manual)

https://ithelp.ithome.com.tw/upload/images/20200929/20120093xy02tFyuua.png

基本上RTC已經算是一個真正的時鐘,預設供給RTC的clock就是1Hz,而且也不須在經過軟體轉換,硬體本身就已經設計內建BCD的日期格式了

來動手把時間日期呼叫出來吧!

跟往常一樣設定RCC -> HSE、LSE為Crystal/Ceramic Resonator
SYS -> Debug Serial Wire 打勾
https://ithelp.ithome.com.tw/upload/images/20200929/2012009380XRXOTfRr.png
接著在左側周邊把RTC-> activate Clock Source打勾
並設置PB0~PB7為GPIO_Output

頻率部分系統頻率32(MHz)
注意在RTC的頻率設定HSE_RTC選擇線500(KHz)
https://ithelp.ithome.com.tw/upload/images/20200929/20120093TgxQIfBJ5J.png
設定完成生成檔案!

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
RTC_DateTypeDef sDate;
RTC_TimeTypeDef sTime;
int i=0;
/* USER CODE END PV */

在宣告變數底下加入
RTC_DateTypeDef sDate;
RTC_TimeTypeDef sTime;
這是宣告RTC的Date(日期)和Time(時間)的資料類別取一個別名
sDate 是我宣告 RTC_Date的別名
sTime 是我宣告 RTC_Time的別名

接著在main中設定初始值

	sTime.TimeFormat =RTC_FORMAT_BIN; //設定輸出為二進制
	sTime.Hours =13;                  //Hour   初始值為13
	sTime.Minutes =43;                //Minutes初始值為43
	sTime.Seconds =00;                //Seconds初始值為00
    
    HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); //儲存設定值
    HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);

取得RTC_Time和Date的數值,將值讀出GPIOB每秒更新一次,觀察變化

while(1){
    HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); //取得時間
    HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); //取得日期
    GPIOB->	ODR=~sTime.Seconds; //將結果輸出到GPIOB
    HAL_Delay(1000); //等待1秒鐘
}

在數了!在數了!
https://media.giphy.com/media/4WoSIZHPAcZeeYEzrC/giphy.gif
我知道,這畫質真是4K啊


相關連結


結語

恩...下次來整合功能好了


上一篇
[Day 13]- 【教師節快樂啦!】感謝一路扶持引導我的各位老師!
下一篇
[Day 15]-【STM32系列】你所不知道的 PWM 脈波寬度調變!
系列文
熟悉Arduino的Maker必看!30天帶你快速入門基於STM32嵌入式開發~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言