APM32F402R Micro-EVB开发板配有RTC计时器的例程,通过它有助于对RTC性能及其使用的了解。
在未配置显示器件的情况下,它是通过调试用的串口来向外输出信息。
其对调试串口的配置函数为:
void COM_Config(void)
{
USART_Config_T usartConfigStruct;
usartConfigStruct.baudRate = 115200;
usartConfigStruct.wordLength = USART_WORD_LEN_8B;
usartConfigStruct.stopBits = USART_STOP_BIT_1;
usartConfigStruct.parity = USART_PARITY_NONE;
usartConfigStruct.mode = USART_MODE_TX_RX;
usartConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
BOARD_COM_Config(COM1, &usartConfigStruct);
}
通过对该函数的分析,可了解到在使用时该如何设置串口的工作参数。
为使RTC进行工作,其配置函数为:
void RTC_Config(void)
{
RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
PMU_EnableBackupAccess();
RCM_EnableLSI();
while(RCM_ReadStatusFlag(RCM_FLAG_LSIRDY) == RESET);
RCM_ConfigRTCCLK(RCM_RTCCLK_LSI);
RCM_EnableRTCCLK();
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_ConfigPrescaler(50000);
RTC_WaitForLastTask();
RTC_ConfigCounter(0);
RTC_WaitForLastTask();
RTC_EnableInterrupt(RTC_INT_SEC);
RTC_WaitForLastTask();
NVIC_EnableIRQRequest(RTC_IRQn, 0, 0);
}
在RTC工作时,是通过中断处理函数来将计时值由串口发送出来。
其中断服务的函数内容为:
void RTC_Isr(void)
{
if(RTC_ReadIntFlag(RTC_INT_SEC))
{
uint32_t time, hour, minute, second;
time = RTC_ReadCounter();
hour = (time / 3600) % 24;
minute = (time / 60) % 60;
second = time % 60;
printf("%ldh:%ldm:%lds\r\n", hour, minute, second);
OLED_ShowNum(0,2,hour,2,16);
OLED_ShowNum(24,2,minute,2,16);
OLED_ShowNum(48,2,second,2,16);
BOARD_LED_Toggle(LED2);
RTC_ClearIntFlag(RTC_INT_SEC);
}
}
其中的OLED屏显示语句是后期添加的,以取代串口的输出。
经下载测试,其输出内容如图1所示。
图1 测试结果
在添加OLED屏的显示功能后,其主程序为:
int main(void)
{
BOARD_LED_Config(LED2);
COM_Config();
RTC_Config();
BOARD_OLED_Config();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"APM32F402 RTC",16);
OLED_ShowString(0,2," : :",16);
while (1)
{
}
}
经程序的下载测试,其显示效果如图2所示,说明其符合预期目标。
图2 计时效果
|