14 #include "stm32f7xx_hal.h" 20 RTC_HandleTypeDef hrtc;
26 RTC_TimeTypeDef sTime;
27 RTC_DateTypeDef sDate;
28 RTC_AlarmTypeDef sAlarm;
30 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
32 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
33 PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
34 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
39 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
40 hrtc.Init.AsynchPrediv = 127;
41 hrtc.Init.SynchPrediv = 255;
42 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
43 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
44 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
52 sTime.TimeFormat = RTC_HOURFORMAT12_AM;
53 sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
54 sTime.StoreOperation = RTC_STOREOPERATION_RESET;
55 HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);
57 sDate.WeekDay = RTC_WEEKDAY_MONDAY;
58 sDate.Month = RTC_MONTH_JANUARY;
61 HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);
65 sAlarm.AlarmTime.Hours = 0;
66 sAlarm.AlarmTime.Minutes = 0;
67 sAlarm.AlarmTime.Seconds = 0;
68 sAlarm.AlarmTime.SubSeconds = 0;
69 sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
70 sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
71 sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
72 sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
73 sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
74 sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
75 sAlarm.AlarmDateWeekDay = 1;
76 sAlarm.Alarm = RTC_ALARM_A;
77 HAL_RTC_SetAlarm(&hrtc, &sAlarm, FORMAT_BCD);
81 sAlarm.Alarm = RTC_ALARM_B;
82 HAL_RTC_SetAlarm(&hrtc, &sAlarm, FORMAT_BCD);
86 HAL_RTCEx_SetWakeUpTimer(&hrtc, 0, RTC_WAKEUPCLOCK_RTCCLK_DIV16);
90 void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
92 if(hrtc->Instance==RTC) {
93 __HAL_RCC_RTC_ENABLE();
97 void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
104 void HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc)
111 static int rtc_register(
struct st_device *dev,
char *param)
119 static int rtc_ioctl(
struct st_device *dev,
unsigned int com,
unsigned int arg,
void *param)
126 RTC_DateTypeDef sDate;
127 RTC_TimeTypeDef sTime;
129 sDate.Year = tp->
year - 2000;
130 sDate.Month = tp->
month;
131 sDate.Date = tp->
day;
134 sTime.TimeFormat = RTC_HOURFORMAT12_AM;
135 sTime.Hours = tp->
hour;
136 sTime.Minutes = tp->
min;
137 sTime.Seconds = tp->
sec;
138 sTime.SubSeconds = 256 - ((tp->
msec * 256) / 1000);
139 sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
140 sTime.StoreOperation = RTC_STOREOPERATION_RESET;
142 HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BIN);
143 HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BIN);
151 RTC_TimeTypeDef gTime;
152 RTC_DateTypeDef gDate;
154 HAL_RTC_GetTime(&hrtc, &gTime, FORMAT_BIN);
155 HAL_RTC_GetDate(&hrtc, &gDate, FORMAT_BIN);
157 DKPRINTF(0x01,
"%04d-%02d-%02d ",
158 2000 + gDate.Year, gDate.Month, gDate.Date);
159 DKPRINTF(0x01,
"%02d:%02d:%02d\n",
160 gTime.Hours, gTime.Minutes, gTime.Seconds);
162 tp->
year = gDate.Year + 2000;
163 tp->
month = gDate.Month;
164 tp->
day = gDate.Date;
167 if(gTime.TimeFormat == RTC_HOURFORMAT12_AM) {
168 tp->
hour = gTime.Hours;
170 tp->
hour = gTime.Hours + 12;
172 tp->
min = gTime.Minutes;
173 tp->
sec = gTime.Seconds;
174 tp->
msec = ((256 - gTime.SubSeconds) * 1000) / 256;
181 SYSERR_PRINT(
"Unknown ioctl(%08lX)\n", com);
190 .explan =
"STM32F7 RTC",
191 .register_dev = rtc_register,
#define IOCMD_RTC_GET
時刻を取得する
#define IOCMD_RTC_SET
時刻を設定する
char dayofweek
曜日 0:日曜日〜6:土曜日
#define DEF_DEV_NAME_RTC
標準リアルタイムクロックデバイス名
char name[MAX_DEVNAMELRN]
デバイス名文字列