stm32开发板电子时钟代码
时间: 2024-06-13 22:01:27 浏览: 195
基于stm32的电子时钟
5星 · 资源好评率100%
好的,电子时钟是一种基于STM32开发板的常见项目。实现一个简单的电子时钟需要用到RTC模块和LCD屏幕。下面是一份基于STM32F103C8T6开发板的电子时钟代码:
```c
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_bkp.h"
#include "lcd1602.h"
void RTC_Configuration(void);
void Time_Show(void);
int main(void)
{
LCD1602_Init(); // 初始化LCD
RTC_Configuration(); // 配置RTC
Time_Show(); // 显示时间
while(1);
return 0;
}
void RTC_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); // 使能PWR和BKP时钟
PWR_BackupAccessCmd(ENABLE); // 允许访问BKP区域
if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // 判断是不是第一次启动
{
BKP_DeInit(); // 复位BKP区域
RCC_LSEConfig(RCC_LSE_ON); // 使能LSE
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); // 等待LSE稳定
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 设置RTC时钟源为LSE
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟
RTC_WaitForSynchro(); // 等待RTC寄存器同步
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
RTC_SetPrescaler(32767); // 设置RTC分频器,使得RTC时钟为1Hz
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
BKP_SetRTCCalibrationValue(0); // 设置RTC校准值为0
}
else
{
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟
RTC_WaitForSynchro(); // 等待RTC寄存器同步
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
}
RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能秒中断
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
}
void Time_Show(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
uint8_t str[16];
while(1)
{
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); // 获取当前时间
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); // 获取当前日期
sprintf((char*)str, "%04d-%02d-%02d", 2000 + RTC_DateStruct.RTC_Year, RTC_DateStruct.RTC_Month, RTC_DateStruct.RTC_Date);
LCD1602_ShowString(0, 0, str); // 显示日期
sprintf((char*)str, "%02d:%02d:%02d", RTC_TimeStruct.RTC_Hours, RTC_TimeStruct.RTC_Minutes, RTC_TimeStruct.RTC_Seconds);
LCD1602_ShowString(0, 1, str); // 显示时间
delay_ms(1000); // 延时1秒
}
}
```
在这段代码中,我们首先调用`LCD1602_Init()`函数初始化LCD屏幕,然后调用`RTC_Configuration()`函数配置RTC模块,最后调用`Time_Show()`函数循环显示当前时间。
在`RTC_Configuration()`函数中,我们首先使能PWR和BKP时钟,然后判断是否是第一次启动。如果是第一次启动,则复位BKP区域、使能LSE、等待LSE稳定、设置RTC时钟源为LSE、设置RTC分频器为32767(使得RTC时钟为1Hz)、设置RTC校准值为0;如果不是第一次启动,则直接使能RTC时钟。
在`Time_Show()`函数中,我们首先定义了一个`str`数组用来存储日期和时间的字符串表示。然后进入一个无限循环,在每次循环中,我们调用`RTC_GetTime()`函数获取当前时间和`RTC_GetDate()`函数获取当前日期,并将它们转化成字符串格式存入`str`数组中。最后调用`LCD1602_ShowString()`函数在LCD屏幕上显示日期和时间,并延时1秒。
以上是一个简单的基于STM32开发板的电子时钟代码示例,你可以根据需要进行修改和完善。如果你有任何问题或疑问,请随时提出。下面是三个相关问题:
阅读全文