今天來介紹RTC(Real-time clock)
中文有實時時鐘的稱呼
它的功能其實就是一個電子式的時鐘
運用在長期需要計算時間的電子設備中,例如電腦的自動休眠,冷氣的定時關機等等都是屬於RTC的範疇
基本上RTC已經算是一個真正的時鐘,預設供給RTC的clock就是1Hz,而且也不須在經過軟體轉換,硬體本身就已經設計內建BCD的日期格式了
跟往常一樣設定RCC -> HSE、LSE為Crystal/Ceramic Resonator
SYS -> Debug Serial Wire 打勾
接著在左側周邊把RTC-> activate Clock Source打勾
並設置PB0~PB7為GPIO_Output
頻率部分系統頻率32(MHz)
注意在RTC的頻率設定HSE_RTC選擇線500(KHz)
設定完成生成檔案!
/* 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秒鐘
}
在數了!在數了!我知道,這畫質真是4K啊
- STM32 Nucleo-64 boards (MB1136)資料手冊
https://www.st.com/resource/en/user_manual/dm00105823-stm32-nucleo-64-boards-mb1136-stmicroelectronics.pdf- STM32L053R8 datasheet
https://www.st.com/resource/en/datasheet/stm32l053r8.pdf- RM0367 Reference manual Ultra-low-power STM32L0x3 advanced Arm®-based 32-bit MCUs
https://www.st.com/resource/en/reference_manual/dm00095744-ultra-low-power-stm32l0x3-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf- ARM Mbed官網介紹 - NUCLEO-L053R8
https://os.mbed.com/platforms/ST-Nucleo-L053R8/- STM32 官網介紹 - STM32L053R8
https://www.st.com/en/microcontrollers-microprocessors/stm32l053r8.html#overview
- 此開發板售價在臺幣1000元以下,讀者可於以下網站購得:
https://www.mouser.tw/
https://www.digikey.tw/
恩...下次來整合功能好了