[APM32F4] 【APM32F402R Micro-EVB开发板测评】+RTC电子时钟

[复制链接]
 楼主| jinglixixi 发表于 2025-7-22 18:17 | 显示全部楼层 |阅读模式

APM32F402R Micro-EVB开发板配有RTC计时器的例程,通过它有助于对RTC性能及其使用的了解。
在未配置显示器件的情况下,它是通过调试用的串口来向外输出信息。
其对调试串口的配置函数为:
  1. void COM_Config(void)
  2. {
  3. USART_Config_T usartConfigStruct;
  4. usartConfigStruct.baudRate = 115200;
  5. usartConfigStruct.wordLength = USART_WORD_LEN_8B;
  6. usartConfigStruct.stopBits = USART_STOP_BIT_1;
  7. usartConfigStruct.parity = USART_PARITY_NONE;
  8. usartConfigStruct.mode = USART_MODE_TX_RX;
  9. usartConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  10. BOARD_COM_Config(COM1, &usartConfigStruct);
  11. }

通过对该函数的分析,可了解到在使用时该如何设置串口的工作参数。
为使RTC进行工作,其配置函数为:
  1. void RTC_Config(void)
  2. {
  3. RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
  4. PMU_EnableBackupAccess();
  5. RCM_EnableLSI();
  6. while(RCM_ReadStatusFlag(RCM_FLAG_LSIRDY) == RESET);
  7. RCM_ConfigRTCCLK(RCM_RTCCLK_LSI);
  8. RCM_EnableRTCCLK();
  9. RTC_WaitForSynchro();
  10. RTC_WaitForLastTask();
  11. RTC_ConfigPrescaler(50000);
  12. RTC_WaitForLastTask();
  13. RTC_ConfigCounter(0);
  14. RTC_WaitForLastTask();
  15. RTC_EnableInterrupt(RTC_INT_SEC);
  16. RTC_WaitForLastTask();
  17. NVIC_EnableIRQRequest(RTC_IRQn, 0, 0);
  18. }

在RTC工作时,是通过中断处理函数来将计时值由串口发送出来。
其中断服务的函数内容为:
  1. void RTC_Isr(void)
  2. {
  3. if(RTC_ReadIntFlag(RTC_INT_SEC))
  4. {
  5. uint32_t time, hour, minute, second;
  6. time = RTC_ReadCounter();
  7. hour = (time / 3600) % 24;
  8. minute = (time / 60) % 60;
  9. second = time % 60;
  10. printf("%ldh:%ldm:%lds\r\n", hour, minute, second);
  11. OLED_ShowNum(0,2,hour,2,16);
  12. OLED_ShowNum(24,2,minute,2,16);
  13. OLED_ShowNum(48,2,second,2,16);
  14. BOARD_LED_Toggle(LED2);
  15. RTC_ClearIntFlag(RTC_INT_SEC);
  16. }
  17. }

其中的OLED屏显示语句是后期添加的,以取代串口的输出。
经下载测试,其输出内容如图1所示。
3d09637cb811f78ec9a2e40a173659e4
图1 测试结果

在添加OLED屏的显示功能后,其主程序为:
  1. int main(void)
  2. {
  3. BOARD_LED_Config(LED2);
  4. COM_Config();
  5. RTC_Config();
  6. BOARD_OLED_Config();
  7. OLED_Init();
  8. OLED_Clear();
  9. OLED_ShowString(0,0,"APM32F402 RTC",16);
  10. OLED_ShowString(0,2," : :",16);
  11. while (1)
  12. {
  13. }
  14. }

经程序的下载测试,其显示效果如图2所示,说明其符合预期目标。
6d1830139f775e57c09d941b49dba402
图2 计时效果



HeartbeatEcho 发表于 2025-7-22 23:16 | 显示全部楼层
嗯嗯 竟然把OLED显示的事件放到了RTC中断里面啊
 楼主| jinglixixi 发表于 2025-7-22 23:53 | 显示全部楼层
HeartbeatEcho 发表于 2025-7-22 23:16
嗯嗯 竟然把OLED显示的事件放到了RTC中断里面啊

可以的
HeartbeatEcho 发表于 2025-7-23 10:33 | 显示全部楼层
看着是先写了时间,后画了标题。
为什么标题没有被刷掉啊
 楼主| jinglixixi 发表于 2025-7-23 11:04 | 显示全部楼层
HeartbeatEcho 发表于 2025-7-23 10:33
看着是先写了时间,后画了标题。
为什么标题没有被刷掉啊

定位显示时间值,所以其它位置的内容不会受影响。
HeartbeatEcho 发表于 2025-8-6 20:05 | 显示全部楼层
只是清除了待显示的区域的buffer呗。
我还以为是全局刷新呢
 楼主| jinglixixi 发表于 2025-8-7 01:12 | 显示全部楼层
HeartbeatEcho 发表于 2025-8-6 20:05
只是清除了待显示的区域的buffer呗。
我还以为是全局刷新呢

是这样
旧时光放映机 发表于 2025-8-7 10:09 | 显示全部楼层
这个开发板的RTC功能确实强大,通过串口输出和OLED显示都能直观地看到时间变化,非常实用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部