427|0

6111

帖子

4

TA的资源

版主

楼主
 

【NUCLEO H533RE】之五 时钟功能测试 [复制链接]

本帖最后由 damiaa 于 2024-8-4 18:57 编辑
               【NUCLEO H533RE】之五 时钟功能测试
 
 
一、打开stm32cubeide,配置时钟
RCC配置HSE和LSE 外部晶体
 
RTC选择Activate Clock Source(时钟源)和 Activate Calendar(日历)
 
检查时钟配置(Clock Config) 选LSE
 
时钟和日历,可以在这里配置,也可以在运行时设置
 
加入闹钟,下面就会出现闹钟的一些参数,可以在这里配置,也可以在运行时设置
 
闹钟的中断也可以选择
 
32.768的外部时钟就连接到RTC了,时钟日历也配置好了。
 
二、生成代码介绍
选择后保存产生代码。
main.c中就有了
rtc结构句柄
RTC_HandleTypeDef hrtc;
 
rtc初始化函数
static void MX_RTC_Init(void)
{

  /* USER CODE BEGIN RTC_Init 0 */

  /* USER CODE END RTC_Init 0 */

  RTC_PrivilegeStateTypeDef privilegeState = {0};
  RTC_TimeTypeDef sTime = {0};
  RTC_DateTypeDef sDate = {0};
  RTC_AlarmTypeDef sAlarm = {0};

  /* USER CODE BEGIN RTC_Init 1 */

  /* USER CODE END RTC_Init 1 */

  /** Initialize RTC Only
  */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 127;
  hrtc.Init.SynchPrediv = 255;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  hrtc.Init.OutPutPullUp = RTC_OUTPUT_PULLUP_NONE;
  hrtc.Init.BinMode = RTC_BINARY_NONE;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    Error_Handler();
  }
  privilegeState.rtcPrivilegeFull = RTC_PRIVILEGE_FULL_NO;
  privilegeState.backupRegisterPrivZone = RTC_PRIVILEGE_BKUP_ZONE_NONE;
  privilegeState.backupRegisterStartZone2 = RTC_BKP_DR0;
  privilegeState.backupRegisterStartZone3 = RTC_BKP_DR0;
  if (HAL_RTCEx_PrivilegeModeSet(&hrtc, &privilegeState) != HAL_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN Check_RTC_BKUP */

  /* USER CODE END Check_RTC_BKUP */

  /** Initialize RTC and set the Time and Date
  */
  sTime.Hours = 0x0;
  sTime.Minutes = 0x0;
  sTime.Seconds = 0x0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 0x1;
  sDate.Year = 0x0;

  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }

  /** Enable the Alarm A
  */
  sAlarm.AlarmTime.Hours = 0x8;
  sAlarm.AlarmTime.Minutes = 0x30;
  sAlarm.AlarmTime.Seconds = 0x0;
  sAlarm.AlarmTime.SubSeconds = 0x0;
  sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 0x1;
  sAlarm.Alarm = RTC_ALARM_A;
  if (HAL_RTC_SetAlarm(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN RTC_Init 2 */

  /* USER CODE END RTC_Init 2 */

}

 

如果勾了报警中断 xxxxx_it.c就有报警中断的添加 这样还需要加报警的回调函数,这里没用到。
 
rtc的其他调用函数都在stm32h5xx_hal_rtc.h中可以看到。
 
三、加入代码
因为选择了报警中断A,如果要处理这个中断主程序中就要添加这个回调函数(选择了其他中断就要加入其他中断的回调函数)。
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
}
如果选择了报警B或其他中断也是和这类似的处理。
关于回调函数,ST还提供了一个HAL_RTC_RegisterCallback来注册自己的回调函数,但还要配置USE_HAL_RTC_REGISTER_CALLBACKS 为1 .这个麻烦。还不如使用同名的回调函数省事。其实其他中断也有这操作 比如串口什么的。
关于时间和日历的设置,初始化里面有了,可以搬来照抄。
如何读出时间和日历,这个我们在stm32H5xx_hal_rtc.c里面都可以找到它们的原型。
在串口函数中处理设置和读写时间的命令。
 
   
main函数中处理命令:
   
如上在主程序中加代码
  1. 初始化中就设置了时间,日期,报警等等.
  2. 做一个串口读的命令解析:
    读时间getdt +回车(0x0d)
    设置时间sett 12 30 09 +回车(0x0d)
    设置日期setd 2 08 02 2024 +回车(0x0d)
    设置报警seta 11 35 00 1+回车(0x0d)
  3. 回调函数中加入读命令解析程序,如果有读命令,做个标记。
  4. 主程序中处理串口数据
  5. 发现有数据回应串口数据应答。
  6.  
四、编译下载调试,实验验证:
 
试用串口调试软件发送命令和接收数据,具体看下面视频:
9aa916874e8380e516b5bbba39e2400d

 
                                                                                    谢谢
此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表