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

【新年开篇】【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 */

  2. /*周期唤醒中断回调函数 */
  3. void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc)
  4. {
  5. RTC_TimeTypeDef sTime;  //用于获取时间
  6. RTC_DateTypeDef sDate; //用于获取日期
  7. static uint8_t led_flash_state = 0b100; //定义三个LED灯的状态
  8. //读取时间和日期,必须都读出来,否则无法解锁,就不能继续取
  9. if(HAL_RTC_GetTime(hrtc, &sTime, RTC_FORMAT_BIN) == HAL_OK)
  10. {
  11. HAL_RTC_GetDate(hrtc, &sDate, RTC_FORMAT_BIN);
  12. char str[40] ;
  13. sprintf(str, "RTC Date= %4d-%2d-%2d\r\n", 2000+sDate.Year,sDate.Month, sDate.Date);
  14. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);
  15. sprintf(str, "RTC Time= %2d:%2d:%2d\r\n", sTime.Hours,sTime.Minutes, sTime.Seconds);
  16. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);
  17. HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, led_flash_state&0b001); //获取LED1的状态 如果是1,测点亮 如果是0则熄灭
  18. HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, led_flash_state&0b010); //获取LED2的状态 如果是1,测点亮 如果是0则熄灭
  19. HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, led_flash_state&0b100); //获取LED3的状态 如果是1,测点亮 如果是0则熄灭
  20. led_flash_state = led_flash_state>>1;  //右移一位,形成流水灯
  21. if (led_flash_state == 0)              //如果右移到最后,则复位。
  22. led_flash_state = 0b100;
  23. }
  24. }

  25. /*  闹钟A中断的回调函数 */
  26. void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
  27. {
  28. char str[40] ;
  29. triggerCntA ++;
  30. sprintf(str, "TriggerCntA: %d\r\n", triggerCntA);
  31. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);

  32. }

  33. /*  闹钟中断的回调函数 */
  34. void HAL_RTCEx_AlarmBEventCallback(RTC_HandleTypeDef *hrtc)
  35. {
  36. char str[40] ;
  37. triggerCntB++;
  38. sprintf(str, "TriggerCntB: %d\r\n", triggerCntB);
  39. HAL_UART_Transmit(&huart3, (uint8_t *)str, strlen(str), 1000);

  40. }
  41. /* USER CODE END 0 */
复制代码
编译后下载到开发板,板载3个LED灯交替亮起来。串口打印出日期以及每秒的计数,每分钟的第1秒打印闹钟A的中断计数,每分钟的第2秒打印出闹钟B的累计次数:
1674395034760.jpg
这样的代码相比于HAL_Delay来实现流水灯,不用占用CPU的运行时间。同时周期性的唤醒,也可以做为低耗等其他的中断唤醒源。
收藏 评论0 发布时间:2023-1-22 21:54

举报

0个回答

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版