开发环境:keil MDK V5.10
操作系统:windows 7(32位)
目标硬件:STM32F103C8
问题描述:使用STM32的systick定时器实现RTC功能。具体方法为systick滴答计时器配置为1ms时间间隔的滴答中断,定义一个RTC结构体,包含年、月、日、时、分、秒。在每进一次systick中断服务程序中更新一次RTC的值。主程序通过不停地获取RTC的时钟,每一秒钟使用printf函数输出当前的时间。测试过程发现绝大多数时间系统正常工作,但依然存在部分情况系统无法进行正常的输出。相关代码和测试结果如下:
/**
* @brief 系统滴答定时器中断服务程序,主要功能为更新实时时钟
*
* @note 无
* @param 无
* @retval 无
*/
void systick_isr(void)
{
systick.tick_num++;
rtc.ms++;
rtc_update(&rtc);
}
/**
* @brief 获取系统实时时钟
*
* @note 无
* @param 用于存放当前系统实时时钟数据的结构体的指针
* @retval 无
*/
void get_rtc(time_t *ptime)
{
*ptime = rtc;
}
时钟测试程序片段
while(1)
{
get_rtc(&tprtc);
if(j != tprt