你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【新年开篇】【STM32H723 MacOs stm32CubeIDE】RTC创建流水灯

[复制链接]
lugl 发布时间:2023-1-22 21:54

STM32C0是ST具有出色性价比的32位MCU系列,精简成本而不妥协性能:

✦ 经济适用——通过更有吸引力的价位和优化的BOM帮用户降低成本

✦ 性能可靠——受益于经过验证的STM32的高质量和可靠性

✦ 生态持续——与STM32G0系列引脚兼容,共享相同的技术平台

1、配置GPIO
根据用户手册
LEDs
User LD1: a green user LED is connected to the STM32H7 I/O PB0 (SB39 ON and SB47
OFF) or PA5 (SB47 ON and SB39 OFF) corresponding to the ST Zio D13.
User LD2: a yellow user LED is connected to PE1.
User LD3: a red user LED is connected to PB14.
These user LEDs are on when the I/O is HIGH value, and are off when the I/O is LOW.
配置好PB0PE1PB14为输出模式分别标注为LED1LED2LED3
wps_doc_0.png
2、配置串口3用于打印输出以便于监控
查看用户手开发板板载为USART3接入ST-LINK用于串口转USB串口TXRX分别为PD8PD9
wps_doc_1.png
3、图形化配置如下波特率等其他按默认就OK
wps_doc_2.png
配置RTC按下图示配置启用时钟源日历闹钟AB以及周期唤醒
wps_doc_3.png
再下图设置24小时制日期日期格式为BCD码制同时根据当前设置当前日期以及时间。
wps_doc_4.png
下面是设置周期唤醒中断以及闹钟AB按下面的设置会在每一分钟的第1秒产生闹钟中断
wps_doc_5.png
同理按下图配置闹钟B为每1分钟的第2秒产生中断然后配置每1秒产生唤醒事件。
wps_doc_6.png
配置完后生成工程进入main.c编写周期唤醒事件回调函数以及两个闹钟事件
具体代码如下
  1. /* USER CODE BEGIN 0 */, ]5 l3 N) q. u) V

  2. " Z( |$ d! x2 Z, b# Q; i7 s
  3. /*周期唤醒中断回调函数 */
    ( L/ d( M0 b2 D" [
  4. void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
    ; @& }1 T/ f. K" k! w1 X# N) M8 v
  5. {
    4 A, R8 A9 q1 h# |& d2 Q
  6. RTC_TimeTypeDef sTime;  //用于获取时间: V6 H, e$ H2 y* r+ ?. j
  7. RTC_DateTypeDef sDate; //用于获取日期& v# T( }8 m9 _9 f$ d9 N5 F
  8. static uint8_t led_flash_state = 0b100; //定义三个LED灯的状态
    7 ~" X# N& a; o; d+ y
  9. //读取时间和日期,必须都读出来,否则无法解锁,就不能继续取3 O- _( r; L8 Z2 R
  10. if(HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN) == HAL_OK)
    2 _* _3 c8 Z4 f% K: i
  11. {( S- K3 }! |2 U9 r% [+ s
  12. HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);2 |2 x9 v# J1 d/ e8 v1 i
  13. char str[40] ;! d4 Q; _5 r: N: L& `
  14. sprintf(str, "RTC Date= %4d-%2d-%2d\r\n", 2000+sDate.Year,sDate.Month, sDate.Date);
    0 r# I9 r% t3 x0 f2 x$ i
  15. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);. B- Z% h9 j/ _( i$ S
  16. sprintf(str, "RTC Time= %2d:%2d:%2d\r\n", sTime.Hours,sTime.Minutes, sTime.Seconds);
    & ]- O4 r, T0 T$ i' z$ e
  17. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);7 _% R& n, d+ k$ d' S6 ]3 M
  18. HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, led_flash_state&0b001); //获取LED1的状态 如果是1,测点亮 如果是0则熄灭
    9 r( y1 \/ C1 f
  19. HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, led_flash_state&0b010); //获取LED2的状态 如果是1,测点亮 如果是0则熄灭& u! G1 J: N% f* v& {0 ?
  20. HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, led_flash_state&0b100); //获取LED3的状态 如果是1,测点亮 如果是0则熄灭2 X8 K6 X% D0 U& f* M
  21. led_flash_state = led_flash_state>>1;  //右移一位,形成流水灯0 G: ^0 l. |  K' a  c0 Q. A9 d8 X
  22. if (led_flash_state == 0)              //如果右移到最后,则复位。
    ) d6 q% a; y1 r0 x1 H
  23. led_flash_state = 0b100;5 j7 E' Y" v% ~
  24. }+ _( g3 b4 o) W6 |8 G
  25. }% U7 x) e/ f' T$ I8 h' o

  26. + X1 e2 ^* V  X! P  G# F) \- W
  27. /*  闹钟A中断的回调函数 */: {5 V3 F6 T1 Z: e$ t3 L
  28. void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)4 l  n4 j- q* h
  29. {- ]# m4 w  ]6 ?. e8 J
  30. char str[40] ;
    7 F* T# E) I3 t' W% |
  31. triggerCntA ++;% {* H  t) H8 n/ e/ l6 ~
  32. sprintf(str, "TriggerCntA: %d\r\n", triggerCntA);/ D0 e7 {# U, e
  33. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);
    ; Q6 s  `9 {& q4 ^% R+ G
  34. ; s% b% z9 r3 _$ I
  35. }1 z* g0 p1 b$ G; k2 g! t
  36. 6 ]$ ^1 v. Z: I( e
  37. /*  闹钟中断的回调函数 */
    1 r; r# H' S* P1 @3 r$ ~
  38. void HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc)
    9 Z/ i" o6 w# l* K! c: _
  39. {2 U% [3 M* N5 w; n* J/ ?' {
  40. char str[40] ;9 I! m( ?  O, L6 w' j
  41. triggerCntB++;
    ) S- J$ c! M& A# J
  42. sprintf(str, "TriggerCntB: %d\r\n", triggerCntB);4 V) [' T* w, @" V
  43. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);. V( f: J/ v) J- Y+ n% ?# r
  44. " w; ?* t" L& y
  45. }4 {) \. ]7 S' w6 k6 Y" b
  46. /* USER CODE END 0 */
复制代码
编译后下载到开发板,板载3个LED灯交替亮起来。串口打印出日期以及每秒的计数,每分钟的第1秒打印闹钟A的中断计数,每分钟的第2秒打印出闹钟B的累计次数:
1674395034760.jpg
这样的代码相比于HAL_Delay来实现流水灯,不用占用CPU的运行时间。同时周期性的唤醒,也可以做为低耗等其他的中断唤醒源。
收藏 评论0 发布时间:2023-1-22 21:54

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版