楚雄市住房和城乡建设局门户网站,怎么做二次元网站源码,简易蜘蛛池网站开发,app设计ppt前言#xff1a; 关于RTC时钟的HAL库配置我也是第一次#xff0c;之前都是用库函数的写法#xff0c;这里写下这篇博客来记录一下自己的学习过程。
STM32Cubemx配置#xff1a; 首先点击左侧的Timers的RTC#xff0c;勾选以下选项 进入时钟树配置 进入时间设置#xff0…前言 关于RTC时钟的HAL库配置我也是第一次之前都是用库函数的写法这里写下这篇博客来记录一下自己的学习过程。
STM32Cubemx配置 首先点击左侧的Timers的RTC勾选以下选项 进入时钟树配置 进入时间设置这里我把时间设置为了2023年3月12日20点20分但是我圈出来的地方一定要注意125✖6000刚好是750Mhz一秒发生一次中断 到此为止我们的STM32Cubemx配置就算是结束了直接点击生成代码接下来就是写代码了。
代码部分 这里有几点需要给大家强调一下获取RTC时间或者日期时必须先获取时间再获取日期顺序不能颠倒会获取失败而且时间和日期调用的时候不能单独调用必须两个同时调用否则出错这是我实践得出的结果即使我也不是太懂为啥。
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;while (1){HAL_RTC_GetTime(hrtc, sTime, RTC_FORMAT_BIN);HAL_RTC_GetDate(hrtc, sDate, RTC_FORMAT_BIN);sprintf((char *)LCD_dispaly,%02d:%02d:%02d--%02d:%02d:%02d,sDate.Year,sDate.Month,sDate.Date,sTime.Hours,sTime.Minutes,sTime.Seconds);LCD_DisplayStringLine(Line9,LCD_dispaly); }
额外功能 暂停功能起始暂停功能我一开始是没有想起来的后来才想到把RTC给关了那不就暂停了吗
__HAL_RCC_RTC_DISABLE(); 恢复计时功能
__HAL_RCC_RTC_ENABLE(); 最终实现效果 设定闹钟 RTC 时钟其中一大功能就是闹钟中断我们在SM32Cubemx中进行如下配置 将闹钟触发的时间设置为20203也就是初始时间的3秒后 然后我们使能中断 代码部分 这里设置闹钟的话就需要对代码进行封装了 我们需要重新写一个GET_Time()函数还有一个SET_Alarm()函数同时要需要重新写一下RTC中断的回调函数 这里一开始我是不打算去写GET_Time函数的我决定直接用前面提到的两个函数不就可以了吗结果报了两个警告保险起见我还是把这两个函数封装一下 GET_Time():
void GET_Time(void)
{HAL_RTC_GetTime(hrtc, sTime, RTC_FORMAT_BIN);HAL_RTC_GetDate(hrtc, sDate, RTC_FORMAT_BIN);
} SET_Alarm()这个函数其实是我复制了MX_RTC_Init()里面的内容然后更改一下就可以了让每次中断的时候读取当前秒数读取到的秒数再加上3就是下一次中断的触发时间。
void SET_Alarm(void)
{RTC_AlarmTypeDef sAlarm {0};sAlarm.AlarmTime.Hours 0x20;sAlarm.AlarmTime.Minutes 0x20;sAlarm.AlarmTime.Seconds sTime.Seconds1;sAlarm.AlarmTime.SubSeconds 0x0;sAlarm.AlarmMask RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES;sAlarm.AlarmSubSecondMask RTC_ALARMSUBSECONDMASK_ALL;sAlarm.AlarmDateWeekDaySel RTC_ALARMDATEWEEKDAYSEL_DATE;sAlarm.AlarmDateWeekDay 0x1;sAlarm.Alarm RTC_ALARM_A;if (HAL_RTC_SetAlarm_IT(hrtc, sAlarm, RTC_FORMAT_BCD) ! HAL_OK){Error_Handler();}if(sAlarm.AlarmTime.Seconds60)sAlarm.AlarmTime.Seconds0;HAL_RTC_SetAlarm_IT(hrtc,sAlarm,RTC_FORMAT_BIN);if (HAL_RTC_SetAlarm_IT(hrtc, sAlarm, RTC_FORMAT_BCD) ! HAL_OK){Error_Handler();}} 之后我们在RTC的回调函数中书写服务函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{GET_Time();SET_Alarm();sprintf(string,%02d:%02d:%02d\n,sTime.Hours,sTime.Minutes,sTime.Seconds);HAL_UART_Transmit(huart1,(unsigned char *)string,strlen(string),50);
}
闹钟的效果实现 每一秒向串口助手发送当前时间