阅读资料了解 STM32F103的RTC(实时时钟)原理,使用带SPI或IIC接口的OLED屏显模块实现以下功能:
RTC (Real Time Clock)即实时时钟。它可以提供时钟、日历的功能;并且可以使用外部电池供电,在极低的功耗下保持计数,使得断电之后还能够计算时间,所以名为实时时钟。
STM32f103的RTC,本质上是一个32位的计数器,在断电后,由电池供电还能保持计数;要使用时间时,需要将计数器的值换算成日期和时间。
此外,stm32的RTC还具备后备存储区,可以利用电池供电,保存10个16bit的数据。
RTC实质是一个掉电后还继续运行的定时器,从定时器的角度来看,相对于通用定时器TIM外设,它的功能十分简单,只有计时功能(也可以触发中断)。但其高级指出也就在于掉电之后还可以正常运行。
两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。
上电复位后,所有RTC寄存器都会受到保护,以防止可能的非正常写访问。
无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC使不会停止工作。
● 可编程的预分频系数:分频系数高为220。
● 32位的可编程计数器:可用于较长时间段的测量。
● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟 频率的四分之一以上)。
可以选择以下三种RTC的时钟源:
● HSE时钟除以128;
● LSE振荡器时钟;
● LSI振荡器时钟
2个的复位类型:
● APB1接口由系统复位;
● RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位
3个专门的可屏蔽中断:
● 1.闹钟中断,用来产生一个软件可编程的闹钟中断。
●2.秒中断,用来产生一个可编程的周期性中断信号(长可达1秒)。
● 3.溢出中断,指示内部可编程计数器溢出并回转为0的状态。
RTC时钟源:
三种不同的时钟源可被用来驱动系统时钟(SYSCLK):
● HSI振荡器时钟
● HSE振荡器时钟
● PLL时钟
这些设备有以下2种二级时钟源:
● 40kHz低速内部RC,可以用于驱动看门狗和通过程序选择驱动RTC。 RTC用于从停机/待机模式下自动唤醒系统。
● 32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。
参考博客:https://www.cnblogs.com/xiaobaibai2021/p/15716909.html
下面新建项目,点击“ACCESS TO MCU SELECTOR”进入新建项目
在搜索框输入“STM32F103C8T6”,之后双击对应选项
设置RCC为“Cystal/Ceramic Resonator”
配置SRS
开启RTC,勾选时钟源、日历,以及RTC OUT
(注意这里选择RTC OUT输出时,固定是PC13引脚,如果我们之前的工程中设置了PC13引脚,要先设为reset模式,再选RTC OUT)
配置串口,并选择异步,可以看到串口的相关参数,波特率为115200,1位停止位,无检验位
在NVIC中勾选出串口1即USART1
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
该函数用于获取时间
hrtc:包含的时钟源
sTime:将获取的时间存储到变量
Format:添“RTC_FORMAT_BIN”或“RTC_FORMAT_BCD”
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
该函数用于获取日期:
hrtc:包含的时钟源
sTime:将获取的日期存储到变量
Format:添“RTC_FORMAT_BIN”或“RTC_FORMAT_BCD”
定义结构体用于存储获取到的时钟和日期
/* USER CODE BEGIN PD */
RTC_DateTypeDef GetData;//获取日期结构体
RTC_TimeTypeDef GetTime;//获取时间结构体
/* USER CODE END PD */
重定义fputc
/* USER CODE BEGIN PM */
int fputc(int ch,FILE *f)//重定向
{
uint8_t temp[1]={
ch};
HAL_UART_Transmit (&huart1 ,temp,1,2);
return ch;
}
/* USER CODE END PM */
while(1):
while (1)
{
/* USER CODE END WHILE */
HAL_RTC_GetTime (&hrtc ,&GetTime ,RTC_FORMAT_BIN );
HAL_RTC_GetDate (&hrtc
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务