RTC

RTC

STM32F103ZET6设置RTC闹钟,当倒计时到来时无法跳出中断程序

回复

问题困惑labas 发起了问题 • 1 人关注 • 0 个回复 • 38 次浏览 • 4 天前 • 来自相关话题

RTC时间不更新

回复

经验分享jialian4213 发起了问题 • 2 人关注 • 0 个回复 • 403 次浏览 • 2019-09-16 15:55 • 来自相关话题

设置RTC闹钟,无法进入中断

问题困惑ytmxuexi2012 回复了问题 • 2 人关注 • 5 个回复 • 2657 次浏览 • 2019-06-11 22:51 • 来自相关话题

STM32F103ZET(基于秉火开发板)+Cubemx(F1 V1.60库)+RTC(修复官方例程日期不更新bug)

经验分享摩天大楼 回复了问题 • 12 人关注 • 7 个回复 • 5148 次浏览 • 2019-06-04 14:27 • 来自相关话题

关于stm32cubemx生成的RTC程序的学习记录,用到RTC/usart/printf/sprintf,基于官方库例子

软件教程admin 发表了文章 • 28 个评论 • 16994 次浏览 • 2014-11-04 10:22 • 来自相关话题

先大略的看了下官方的RTC的例子,
于是准备利用usart的printf输出,启用了stm32cube中的RTC
首先初始化了uart的printf初始化了rtc,
然后随便uart输出一个东西,
发现此时上电后,usart输出好慢,不是立马输出
于是,注释掉MX_RTC_Init();
重新烧录,输出速度正常了......
说明stm32cubemx生成的RTC初始化代码初始RTC时间长啊....不是一般的长,我还没有开始初始定义的说.
好了,2楼继续

好吧,懒得仔细搞了,就大致按照官方的例子弄下算了
过程如下:
设置此时的时间为2:20:00,2014年1月18号
定时时间为:2:20:30秒零56,2014年1月18号,
定时时间到产生中断,使LED灯亮.
ok,就按照这个来做,
下面的图示是stm32cubemx软件的相关RTC设置




















还有GPIO的设置,推挽,上拉,ok
设置完毕后自动生成代码
打开RTc.c文件,更改下面的代码为:
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;

/**Initialize RTC and set the Time and Date
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);

sTime.Hours = 0x02;
sTime.Minutes = 0x20;
sTime.Seconds = 0;
sTime.SubSeconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT12_AM;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x18;
sDate.Year = 0x14;
HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

/**Enable the Alarm A
*/
sAlarm.AlarmTime.Hours = 0x02;
sAlarm.AlarmTime.Minutes = 0x20;
sAlarm.AlarmTime.Seconds = 0x30;
sAlarm.AlarmTime.SubSeconds = 0x56;
sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_None;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
sAlarm.Alarm = RTC_ALARM_A;
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BCD);

}
这个就是刚才第一步时候提到的时间,对号入座....不解释了
返回到main.c文件
在用户代码4的地方写入:
/ USER CODE BEGIN 4 /
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_RTC_AlarmAEventCallback could be implemented in the user file
*/
HAL_GPIO_WritePin (GPIOG,GPIO_PIN_6,GPIO_PIN_RESET );
}
这个是定时中断的返回调用,当中断的时候,使LED亮(我的板子是负驱动)...
ok,测试和官方实例效果一样......
30秒后led亮.....
当然这个事例子......你可以设定时间长一点,比如,好几天之后的某天..
修修补补就可以用了. 查看全部
先大略的看了下官方的RTC的例子,
于是准备利用usart的printf输出,启用了stm32cube中的RTC
首先初始化了uart的printf初始化了rtc,
然后随便uart输出一个东西,
发现此时上电后,usart输出好慢,不是立马输出
于是,注释掉MX_RTC_Init();
重新烧录,输出速度正常了......
说明stm32cubemx生成的RTC初始化代码初始RTC时间长啊....不是一般的长,我还没有开始初始定义的说.
好了,2楼继续

好吧,懒得仔细搞了,就大致按照官方的例子弄下算了
过程如下:
设置此时的时间为2:20:00,2014年1月18号
定时时间为:2:20:30秒零56,2014年1月18号,
定时时间到产生中断,使LED灯亮.
ok,就按照这个来做,
下面的图示是stm32cubemx软件的相关RTC设置

2.png


3.png


4.png


5.png

还有GPIO的设置,推挽,上拉,ok
设置完毕后自动生成代码
打开RTc.c文件,更改下面的代码为:
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;

/**Initialize RTC and set the Time and Date
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);

sTime.Hours = 0x02;
sTime.Minutes = 0x20;
sTime.Seconds = 0;
sTime.SubSeconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT12_AM;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x18;
sDate.Year = 0x14;
HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

/**Enable the Alarm A
*/
sAlarm.AlarmTime.Hours = 0x02;
sAlarm.AlarmTime.Minutes = 0x20;
sAlarm.AlarmTime.Seconds = 0x30;
sAlarm.AlarmTime.SubSeconds = 0x56;
sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_None;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
sAlarm.Alarm = RTC_ALARM_A;
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BCD);

}
这个就是刚才第一步时候提到的时间,对号入座....不解释了
返回到main.c文件
在用户代码4的地方写入:
/ USER CODE BEGIN 4 /
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_RTC_AlarmAEventCallback could be implemented in the user file
*/
HAL_GPIO_WritePin (GPIOG,GPIO_PIN_6,GPIO_PIN_RESET );
}
这个是定时中断的返回调用,当中断的时候,使LED亮(我的板子是负驱动)...
ok,测试和官方实例效果一样......
30秒后led亮.....
当然这个事例子......你可以设定时间长一点,比如,好几天之后的某天..
修修补补就可以用了.

STM32F103ZET6设置RTC闹钟,当倒计时到来时无法跳出中断程序

回复

问题困惑labas 发起了问题 • 1 人关注 • 0 个回复 • 38 次浏览 • 4 天前 • 来自相关话题

RTC时间不更新

回复

经验分享jialian4213 发起了问题 • 2 人关注 • 0 个回复 • 403 次浏览 • 2019-09-16 15:55 • 来自相关话题

设置RTC闹钟,无法进入中断

回复

问题困惑ytmxuexi2012 回复了问题 • 2 人关注 • 5 个回复 • 2657 次浏览 • 2019-06-11 22:51 • 来自相关话题

STM32F103ZET(基于秉火开发板)+Cubemx(F1 V1.60库)+RTC(修复官方例程日期不更新bug)

回复

经验分享摩天大楼 回复了问题 • 12 人关注 • 7 个回复 • 5148 次浏览 • 2019-06-04 14:27 • 来自相关话题

关于stm32cubemx生成的RTC程序的学习记录,用到RTC/usart/printf/sprintf,基于官方库例子

软件教程admin 发表了文章 • 28 个评论 • 16994 次浏览 • 2014-11-04 10:22 • 来自相关话题

先大略的看了下官方的RTC的例子,
于是准备利用usart的printf输出,启用了stm32cube中的RTC
首先初始化了uart的printf初始化了rtc,
然后随便uart输出一个东西,
发现此时上电后,usart输出好慢,不是立马输出
于是,注释掉MX_RTC_Init();
重新烧录,输出速度正常了......
说明stm32cubemx生成的RTC初始化代码初始RTC时间长啊....不是一般的长,我还没有开始初始定义的说.
好了,2楼继续

好吧,懒得仔细搞了,就大致按照官方的例子弄下算了
过程如下:
设置此时的时间为2:20:00,2014年1月18号
定时时间为:2:20:30秒零56,2014年1月18号,
定时时间到产生中断,使LED灯亮.
ok,就按照这个来做,
下面的图示是stm32cubemx软件的相关RTC设置




















还有GPIO的设置,推挽,上拉,ok
设置完毕后自动生成代码
打开RTc.c文件,更改下面的代码为:
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;

/**Initialize RTC and set the Time and Date
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);

sTime.Hours = 0x02;
sTime.Minutes = 0x20;
sTime.Seconds = 0;
sTime.SubSeconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT12_AM;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x18;
sDate.Year = 0x14;
HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

/**Enable the Alarm A
*/
sAlarm.AlarmTime.Hours = 0x02;
sAlarm.AlarmTime.Minutes = 0x20;
sAlarm.AlarmTime.Seconds = 0x30;
sAlarm.AlarmTime.SubSeconds = 0x56;
sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_None;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
sAlarm.Alarm = RTC_ALARM_A;
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BCD);

}
这个就是刚才第一步时候提到的时间,对号入座....不解释了
返回到main.c文件
在用户代码4的地方写入:
/ USER CODE BEGIN 4 /
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_RTC_AlarmAEventCallback could be implemented in the user file
*/
HAL_GPIO_WritePin (GPIOG,GPIO_PIN_6,GPIO_PIN_RESET );
}
这个是定时中断的返回调用,当中断的时候,使LED亮(我的板子是负驱动)...
ok,测试和官方实例效果一样......
30秒后led亮.....
当然这个事例子......你可以设定时间长一点,比如,好几天之后的某天..
修修补补就可以用了. 查看全部
先大略的看了下官方的RTC的例子,
于是准备利用usart的printf输出,启用了stm32cube中的RTC
首先初始化了uart的printf初始化了rtc,
然后随便uart输出一个东西,
发现此时上电后,usart输出好慢,不是立马输出
于是,注释掉MX_RTC_Init();
重新烧录,输出速度正常了......
说明stm32cubemx生成的RTC初始化代码初始RTC时间长啊....不是一般的长,我还没有开始初始定义的说.
好了,2楼继续

好吧,懒得仔细搞了,就大致按照官方的例子弄下算了
过程如下:
设置此时的时间为2:20:00,2014年1月18号
定时时间为:2:20:30秒零56,2014年1月18号,
定时时间到产生中断,使LED灯亮.
ok,就按照这个来做,
下面的图示是stm32cubemx软件的相关RTC设置

2.png


3.png


4.png


5.png

还有GPIO的设置,推挽,上拉,ok
设置完毕后自动生成代码
打开RTc.c文件,更改下面的代码为:
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
RTC_AlarmTypeDef sAlarm;

/**Initialize RTC and set the Time and Date
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
HAL_RTC_Init(&hrtc);

sTime.Hours = 0x02;
sTime.Minutes = 0x20;
sTime.Seconds = 0;
sTime.SubSeconds = 0;
sTime.TimeFormat = RTC_HOURFORMAT12_AM;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, FORMAT_BCD);

sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 0x18;
sDate.Year = 0x14;
HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BCD);

/**Enable the Alarm A
*/
sAlarm.AlarmTime.Hours = 0x02;
sAlarm.AlarmTime.Minutes = 0x20;
sAlarm.AlarmTime.Seconds = 0x30;
sAlarm.AlarmTime.SubSeconds = 0x56;
sAlarm.AlarmTime.TimeFormat = RTC_HOURFORMAT12_AM;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_None;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_MONDAY;
sAlarm.Alarm = RTC_ALARM_A;
HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, FORMAT_BCD);

}
这个就是刚才第一步时候提到的时间,对号入座....不解释了
返回到main.c文件
在用户代码4的地方写入:
/ USER CODE BEGIN 4 /
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
/* NOTE : This function Should not be modified, when the callback is needed,
the HAL_RTC_AlarmAEventCallback could be implemented in the user file
*/
HAL_GPIO_WritePin (GPIOG,GPIO_PIN_6,GPIO_PIN_RESET );
}
这个是定时中断的返回调用,当中断的时候,使LED亮(我的板子是负驱动)...
ok,测试和官方实例效果一样......
30秒后led亮.....
当然这个事例子......你可以设定时间长一点,比如,好几天之后的某天..
修修补补就可以用了.