在N32G430片内具有RTC计时器,通过其例程可经验其性能,其运行效果如图1所示。 图1 RTC测试 通过对程序的分析可知,其主要的处理过程为; 1)使用以默认数据来设置RTC输出值,其语句为:RTC_Date_And_Time_Default_Value(); 2)选取RTC时钟源,其语句为:RTC_CLKSource_Config(RTC_CLK_LSE,RTC_CLK_FIRST_CONFIG); 3)禁止RTC日历调节,其语句为:RTC_Calendar_Config(DISABLE); 4)配置PA7引脚中断,其语句为:EXTI_PA7_Configuration(); 5)清除PA7中断状态,其语句为:EXTI_Interrupt_Status_Clear(EXTI_LINE7); 6)配置RTC校准输出模式,其语句为:RTC_Calibration_Output_Config(RTC_CALIB_OUTPUT_1HZ); 7)配置RTC输出模式,其语句为:RTC_Output_Mode_Config(RTC_OUTPUT_PUSHPULL); 那么RTC的时间值是如何输出的呢? 原来它是通过PA7每秒发出一次中断来调用对日期和时间的显示输出,其内容如下: void EXTI9_5_IRQHandler(void)
{
if (EXTI_Interrupt_Status_Get(EXTI_LINE7) != RESET)
{
/* Display the current Date on the Hyperterminal */
RTC_Date_Show();
RTC_Time_Show();
/* Clear the UP Button EXTI line pending bit */
EXTI_Interrupt_Status_Clear(EXTI_LINE7);
}
}
这样,在配有OLED屏的基础上,只需修改相应的显示函数即可实现RTC的显示。 修改后,实现时间值显示的函数为; void RTC_Time_Show(void)
{
RTC_Time_Get(RTC_FORMAT_BIN, &RTC_TimeStructure);
LCD_ShowNum(20,50, RTC_TimeStructure.Hours,2,YELLOW);
LCD_ShowNum(44,50, RTC_TimeStructure.Minutes,2,YELLOW);
LCD_ShowNum(68,50, RTC_TimeStructure.Seconds,2,YELLOW);
(void)RTC->DATE;
}
实现图2和图3显示效果的主程序为: int main(void)
{
RTC_Date_And_Time_Default_Value();
RTC_CLKSource_Config(RTC_CLK_LSE, RTC_CLK_FIRST_CONFIG);
RTC_Calendar_Config(DISABLE);
EXTI_PA7_Configuration();
EXTI_Interrupt_Status_Clear(EXTI_LINE7);
RTC_Calibration_Output_Config(RTC_CALIB_OUTPUT_1HZ);
RTC_Output_Mode_Config(RTC_OUTPUT_PUSHPULL);
RTC_Calibration_Output_Enable();
LCD_Initialize();
Lcd_Init();
LCD_Clear(BLACK);
LCD_ShowString(20,10,"N32G430 TEST",RED);
LCD_ShowString(20,30,"OLED & RTC ",YELLOW);
LCD_ShowString(20,50," : :",YELLOW);
SysTick_Delay_Ms(1000);
while (1);
}
经程序的编译下载,即可达到如下的显示效果。 图2 计时效果 图3计时效果
此外,如何使该电子时钟加以校时功能,可使用板载的按键来配置一个时间设置程序来替代函数RTC_Date_And_Time_Default_Value()的处理。
|