stm32f103定时12小时如何更精确的代码,每12小时清零重新计时
时间: 2024-09-23 14:01:39 浏览: 32
STM32F103驱动DS1302程序(带注释)_STM32F103_stm32f103ds1302_ds1302
5星 · 资源好评率100%
在STM32F103微控制器上,要实现12小时定时器,可以使用RTC (实时时钟)功能,因为RTC提供了一个低功耗、高精度的时间基准。以下是一个简单的示例代码片段,它使用了RTC BKP寄存器来设置定时,并在每个12小时周期结束时清零:
```c
#include "stm32f1xx_hal.h"
// 定义RTC结构体变量
RTC_HandleTypeDef hrtc;
void RTCConfig(void)
{
// 初始化RTC
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_Hour_24;
hrtc.Init.AsynchPrediv = 127; // 根据你的系统时钟频率调整这个值,通常12小时需要大约1分钟分频
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OutputState_Enable;
hrtc.Init.OutPutPolarity = RTC_OutputPolarity_Low;
HAL_RTC_Init(&hrtc);
}
void RTC_IRQHandler(void)
{
if(__HAL_RTC_GET_FLAG(&hrtc, RTC_FLAG_OVERFLOW))
{
// 12小时溢出标志触发,清零并更新时间
__HAL_RTC_CLEAR_FLAG(&hrtc, RTC_FLAG_OVERFLOW);
HAL_RTC_SetDate(&hrtc, (__HAL_RTC_DATE_NOW(&hrtc).Hour - 12), __HAL_RTC_DATE_NOW(&hrtc).Minute, __HAL_RTC_DATE_NOW(&hrtc).Second); // 减去12小时
// 你可以在这里添加你的计数或者其他操作
}
}
int main(void)
{
// 其他初始化步骤...
RTCConfig();
// 配置中断
HAL_NVIC_SetPriority(RTC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(RTC_IRQn);
while(1)
{
// 主程序循环
}
}
```
阅读全文