上面没有使用寄存器方式编程,重新编写
时间: 2024-09-18 14:06:47 浏览: 27
STM32例程-寄存器版本,stm32寄存器编程,C/C++
5星 · 资源好评率100%
在STM32F4中使用库函数而非直接操作寄存器的方式获取RTC的时分秒和毫秒,可以简化程序并避免低级硬件错误。以下是一个基本示例,使用STM32CubeMX生成的RTC驱动:
```c
#include "stm32f4xx_hal.h"
// 获取当前时间
void getTimeInfo(RTC_HandleTypeDef *hrtc)
{
RTC_DateTypeDef date;
RTC_TimeTypeDef time;
// 从RTC模块获取当前时间
HAL_RTC_GetTime(hrtc, &time, NULL);
HAL_RTC_GetDate(hrtc, &date, NULL);
// 时间信息
uint8_t hour = time.hour;
uint8_t minute = time.min;
uint8_t second = time.sec;
// 精确到毫秒
uint32_t systemTime = HAL_GetTick();
int32_t rtcMills = ((uint32_t)systemTime - hrtc->Instance->CNT) / 1000; // 假设RTC未使用闰秒
// 输出或进一步处理获取到的时间信息
printf("Current Time: %d:%02d:%02d.%03d\n", hour, minute, second, rtcMills);
}
int main(void)
{
// 初始化RTC
RTC_HandleTypeDef hrtc;
HAL_RTC_Init(&hrtc);
// 开启RTC闹钟或者时间同步
HAL_RTCEx_BWakeUpTimerConfig(&hrtc, RTC_WAKEUP_TIMERTIMER, RTC_ALARMSourceNone, RTC_WakeUpEventActiveHigh, 5000); // 示例唤醒间隔5秒
HAL_RTC_WakeUpTimerStart(&hrtc);
// 循环获取时间直到应用结束
while (1)
getTimeInfo(&hrtc);
}
```
在这个例子中,我们首先初始化RTC并启动了定时唤醒功能,然后在一个无限循环中调用`getTimeInfo()`获取和打印当前时间。
阅读全文