stm32f103c8t6数字时钟程序
时间: 2023-08-26 17:07:12 浏览: 90
STM32(F103)Systick时钟程序.rar
5星 · 资源好评率100%
下面是一个基于STM32F103C8T6的数字时钟程序,使用了RTC(实时时钟)模块和OLED显示屏,代码中有详细注释,可以根据自己的需要进行修改和调整。
```c
#include "stm32f10x.h"
#include "oled.h"
RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStruct;
ErrorStatus HSEStartUpStatus;
void RTC_Configuration(void);
void RTC_TimeShow(void);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
OLED_GPIO_Config();
/* RTC configuration */
RTC_Configuration();
RTC_TimeShow();
while (1)
{
}
}
void RTC_Configuration(void)
{
/* RTC clock source configuration */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
RTC_SetTime(RTC_Format_BCD, &RTC_TimeStruct);
}
void RTC_TimeShow(void)
{
uint8_t hour, minute, second;
while (1)
{
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
hour = RTC_TimeStruct.RTC_Hours;
minute = RTC_TimeStruct.RTC_Minutes;
second = RTC_TimeStruct.RTC_Seconds;
OLED_ShowString(0, 0, "TIME:");
OLED_ShowNum(48, 0, hour, 2, 16);
OLED_ShowString(64, 0, ":");
OLED_ShowNum(72, 0, minute, 2, 16);
OLED_ShowString(88, 0, ":");
OLED_ShowNum(96, 0, second, 2, 16);
OLED_Refresh_Gram();
}
}
```
注意事项:
1. 代码中使用了OLED显示屏的库文件,需要自己添加和配置。
2. RTC模块需要连接外部低速晶振,本例中使用了32.768KHz的晶振。
3. 在使用RTC模块之前,需要先对RTC模块进行配置和初始化。本例中使用了STM32F10x标准库提供的RTC库函数进行配置和初始化。
4. 在主函数中调用了`RTC_TimeShow`函数来显示当前时间,可以根据自己的需要进行修改和调整。
阅读全文