[活动专区] 【AT-START-F425测评】+ RTC电子时钟

[复制链接]
 楼主| jinglixixi 发表于 2022-3-1 22:45 | 显示全部楼层 |阅读模式
AD, ar, tc
AT32 F425内部配有RTC计时器,用它来计时并在相应函数的配合下可免除计时过程中所遇到的进制处理问题,在使用串口通信的情况下,其执行效果如图1所示。
                              
1.jpg
图1 运行效果
此外,若将RTC与OLED屏结合起来,则可以轻松地实现电子时钟的功能。
实现图2计时效果的主程序为:
  1. int main(void)
  2. {
  3. exint_init_type exint_init_struct;
  4. ertc_time_type time;
  5. uint32_t temp = 0;
  6. system_clock_config();
  7. nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  8. at32_board_init();
  9. uart_print_init(115200);
  10. crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
  11. pwc_battery_powered_domain_access(TRUE);
  12. if (ertc_bpr_data_read(ERTC_DT1) != 0x1234)
  13. {
  14. printf("ertc has not been initialized\r\n\r\n");
  15. ertc_config();
  16. }
  17. else
  18. {
  19. printf("ertc has been initialized\r\n\r\n");
  20. ertc_wait_update();
  21. ertc_flag_clear(ERTC_ALAF_FLAG);
  22. exint_flag_clear(EXINT_LINE_17);
  23. }
  24. exint_default_para_init(&exint_init_struct);
  25. exint_init_struct.line_enable   = TRUE;
  26. exint_init_struct.line_mode     = EXINT_LINE_INTERRUPUT;
  27. exint_init_struct.line_select   = EXINT_LINE_17;
  28. exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE;
  29. exint_init(&exint_init_struct);
  30. nvic_irq_enable(ERTC_IRQn, 0, 1);
  31. app_oled_init();
  32. OLED_Init();
  33. OLED_Clear();
  34. OLED_ShowString(0,0,"AT32F425",16);
  35. OLED_ShowString(0,2,"OLED & RTC",16);
  36. OLED_ShowString(8,4,"20  -  -",16);
  37. OLED_ShowString(24,6,"  :  :",16);
  38. while(1)
  39. {
  40. ertc_calendar_get(&time);
  41. if(temp != time.sec)
  42. {
  43. temp = time.sec;
  44. OLED_ShowNum(24,4,time.year,2,16);
  45. OLED_ShowNum(48,4,time.month,2,16);
  46. OLED_ShowNum(72,4,time.day,2,16);
  47. OLED_ShowNum(24,6,time.hour,2,16);
  48. OLED_ShowNum(48,6,time.min,2,16);
  49. OLED_ShowNum(72,6,time.sec,2,16);
  50. }
  51. }
  52. }

该程序的处理流程为:
首先进行RTC初始化,然后判别识别标志,若未设置初始计时值,则读取程序中的初始值来计时。否则,会在已有的计时值基础上进行计时处理,其显示效果如图2所示。
2.jpg
图2 显示效果
其中RTC初始计时值在该函数中设置或修改:
  1. void ertc_config(void)
  2. {
  3. crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
  4. pwc_battery_powered_domain_access(TRUE);
  5. crm_battery_powered_domain_reset(TRUE);
  6. crm_battery_powered_domain_reset(FALSE);
  7. #if defined (ERTC_CLOCK_SOURCE_LICK)
  8. crm_clock_source_enable(CRM_CLOCK_SOURCE_LICK, TRUE);
  9. while(crm_flag_get(CRM_LICK_STABLE_FLAG) == RESET)
  10. {
  11. }
  12. crm_ertc_clock_select(CRM_ERTC_CLOCK_LICK);
  13. ertc_clk_div_b = 255;
  14. ertc_clk_div_a = 127;
  15. #elif defined (ERTC_CLOCK_SOURCE_LEXT)
  16. crm_clock_source_enable(CRM_CLOCK_SOURCE_LEXT, TRUE);
  17. while(crm_flag_get(CRM_LEXT_STABLE_FLAG) == RESET)
  18. {
  19. }
  20. crm_ertc_clock_select(CRM_ERTC_CLOCK_LEXT);
  21. ertc_clk_div_b = 255;
  22. ertc_clk_div_a = 127;
  23. #endif
  24. crm_ertc_clock_enable(TRUE);
  25. ertc_reset();
  26. ertc_wait_update();
  27. ertc_divider_set(ertc_clk_div_a, ertc_clk_div_b);
  28. ertc_hour_mode_set(ERTC_HOUR_MODE_24);
  29. ertc_date_set(22, 3, 2, 3);
  30. ertc_time_set(12, 0, 0, ERTC_AM);
  31. ertc_alarm_mask_set(ERTC_ALA, ERTC_ALARM_MASK_DATE_WEEK);
  32. ertc_alarm_week_date_select(ERTC_ALA, ERTC_SLECT_DATE);
  33. ertc_flag_clear(ERTC_ALAF_FLAG);
  34. ertc_bpr_data_write(ERTC_DT1, 0x1234);
  35. }

由此可见RTC计时还是十分有用的,并且也十分好用。

sparrow054 发表于 2022-3-2 11:02 | 显示全部楼层
RTC需求还是很多的,
 楼主| jinglixixi 发表于 2022-3-2 14:08 | 显示全部楼层
sparrow054 发表于 2022-3-2 11:02
RTC需求还是很多的,

是呀!!!
xiaoqi976633690 发表于 2022-3-2 21:57 | 显示全部楼层
断电后时间还走吗,没看到单独rtc供电
weifeng90 发表于 2022-3-3 08:00 来自手机 | 显示全部楼层
OLED是板子配的?
 楼主| jinglixixi 发表于 2022-3-3 08:49 | 显示全部楼层
weifeng90 发表于 2022-3-3 08:00
OLED是板子配的?

自己买的
 楼主| jinglixixi 发表于 2022-3-3 08:51 | 显示全部楼层
xiaoqi976633690 发表于 2022-3-2 21:57
断电后时间还走吗,没看到单独rtc供电

没有后备电池,断电哪能走呀。
littlelida 发表于 2022-3-4 14:48 | 显示全部楼层
优秀啊~~
juliestephen 发表于 2022-3-4 19:56 | 显示全部楼层
RTC使用中断了吗   
zerorobert 发表于 2022-3-4 20:16 | 显示全部楼层
楼主分享的帖子真是多呢   
sanxingnote7 发表于 2022-3-4 20:36 | 显示全部楼层
掉电丢失吗   
burgessmaggie 发表于 2022-3-4 20:58 | 显示全部楼层
AT-START-F425支持rtt吗?
 楼主| jinglixixi 发表于 2022-3-5 09:27 | 显示全部楼层

岂敢,多谢支持!
 楼主| jinglixixi 发表于 2022-3-5 09:28 | 显示全部楼层
 楼主| jinglixixi 发表于 2022-3-5 09:28 | 显示全部楼层
 楼主| jinglixixi 发表于 2022-3-5 09:29 | 显示全部楼层
zerorobert 发表于 2022-3-4 20:16
楼主分享的帖子真是多呢

感谢支持!!!
 楼主| jinglixixi 发表于 2022-3-5 09:40 | 显示全部楼层
burgessmaggie 发表于 2022-3-4 20:58
AT-START-F425支持rtt吗?

我所用的版本目前只支持AT32F403及AT32F407
您需要登录后才可以回帖 登录 | 注册

本版积分规则

515

主题

2929

帖子

39

粉丝
快速回复 返回顶部 返回列表