703|0

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【ACM32G103RCT6开发板测评】+ RTC测试 [复制链接]

 

测试ACM32G103RCT6的RTC时钟,设置和读取日期时间,串口和OLED显示。

 

一、RTC时钟内部框图

 

1.1、主要特性

可计算 00~99 年之间的秒、分、时、日、周、月、年
>BCD 时间显示
>自动闰年调整
>数字校准功能:通过调整最小时间单位(最大可调精度 0.95ppm)来进行日历
校准,调校后理论精度+/-0.477ppm
>周期唤醒中断
>闹钟功能
>可从管脚输出 XTLF 时钟信号供用户校准
>RTC 计时器部分不复位
>2 路输入上下沿(侵入)时间戳功能
>16 个 32 位 (共 64 字节) 通用备份寄存器,能够在省电模式下保存数据。当有
外部侵入事件发生时,备份寄存器可复位(可配置)。

 

1.2、内部框图

 

二、程序部分

 

2.1、rtc.c

#include "main.h"

RTC_ConfigTypeDef RTC_Handle;
RTC_TimeTypeDef  temp_Time_Set;
RTC_DateTypeDef  temp_Date_Set;

RTC_WUTimerTypeDef  WuTimer_Handler;
	
	RTC_TimeTypeDef  temp_Time_Get;
	RTC_TimeTypeDef  temp_Time_Get_Again;
	
	RTC_DateTypeDef  temp_Date_Get;

void init_rtc(void)
{
	
	RTC_Handle.ClockSource       = RTC_CLOCK_XTL;
	RTC_Handle.Compensation      = COMPENSATION_INCREASE;    // 开启时钟误差补偿
	RTC_Handle.CompensationValue = 0x05;                     // 开启时钟误差补偿,该参数只针对ACM32G103 LQFP64 Core板XTL电路

	HAL_RTC_Config(&RTC_Handle);
	
	/* Set RTC Time、Date */
	temp_Time_Set.Hour   = 0x08;
	temp_Time_Set.Minute = 0x30;
	temp_Time_Set.Second = 0x00;
	HAL_RTC_SetTime(&temp_Time_Set);

	temp_Date_Set.Year    = 0x24;    // 2024-01-17
	temp_Date_Set.Month   = RTC_MONTH_JANUARY;
	temp_Date_Set.Date    = 0x17;
	temp_Date_Set.WeekDay = RTC_WEEKDAY_WEDNESDAY;
	HAL_RTC_SetDate(&temp_Date_Set);
	
	NVIC_ClearPendingIRQ(RTC_IRQn);
	NVIC_EnableIRQ(RTC_IRQn);
	__HAL_RTC_ENABLE_MIN_IT;

}

void rtc_read(void)
{
	uint32_t fu32_Seconds;
	char date[20];
	char time[20];
	
	HAL_RTC_GetTime(&temp_Time_Get);
	HAL_RTC_GetDate(&temp_Date_Get);
	HAL_RTC_GetTime(&temp_Time_Get_Again);
	if (fu32_Seconds != temp_Time_Get.Second) 
	{
		fu32_Seconds = temp_Time_Get.Second;
			
		printf("Date: 20%x-%x-%x week:%x \r\n", temp_Date_Get.Year, temp_Date_Get.Month, temp_Date_Get.Date, temp_Date_Get.WeekDay);
		printf("Time: %2x:%2x:%02x \r\n", temp_Time_Get.Hour, temp_Time_Get.Minute, temp_Time_Get.Second);
		
		sprintf(date,"20%x/%02x/%02x Week%x",temp_Date_Get.Year,temp_Date_Get.Month,temp_Date_Get.Date,temp_Date_Get.WeekDay);
		sprintf(time,"%02x:%02x:%02x",temp_Time_Get.Hour, temp_Time_Get.Minute, temp_Time_Get.Second);

		OLED_ShowStr(0,0,"ACM32G103RCT6",2);
		OLED_ShowStr(0,2,"RTC-TEST",2);	
		
		OLED_ShowStr(0,4, date, 2);
		OLED_ShowStr(0,6, time, 2);
	}
}

 

2.2、main.c

#include "main.h" 

int main(void)
{
	HAL_Init();  
	SystemClock_Config();    
	usart_init(115200);
	printf("\r\n\r\n====== ACM32G103 MCU is runing ======\r\nSysCoreClk: %dHz, HCLK:%dHz\r\nPCLK1:%dHz, PCLK2:%dHz\r\n\r\n",g_SystemCoreClock, HAL_RCC_GetHCLKFreq(),HAL_RCC_GetPCLK1Freq(),HAL_RCC_GetPCLK2Freq());  
   
	init_led();
	init_tim2();
	init_key();
	I2C_Init();
	//adc_test();
	//eeprom_test();
	//oled_test();
	
	init_rtc();
	
	OLED_Init();
	OLED_Fill(0x00);
	while(1)
	{
		rtc_read();
		//HAL_Delay(500);
		//led1_tog();
		//printf("https://bbs.eeworld.com.cn/\r\n");
	}
}

 

三、程序运行

下载程序后,复位开发板,串口输出

3.2、oled显示

rtc

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表