zoukankan      html  css  js  c++  java
  • STM32F4闹钟

    比较F1的片子对于F4的RTC来说有很大提升,F4的RTC提供了日历时钟和两个可编程闹钟中断,一个周期性可编程唤醒标志。这样很方便设置系统时间,并不会像F1的RTC那样要自己计算年月日时分秒。F4的RTC是一个独立的BCD定时计数器,系统可以自动将月份天数补偿为28、29(闰年)、30、31天。并且还可以进行夏令时补偿。

    这里主要说明FAL库闹钟配置结构体

    /**
      * @brief  RTC Time structure definition
      */
    typedef struct
    {
      uint8_t Hours; //设置小时,如果选择RTC_HourFormat_12,取值范围【0-12】,如果选择RTC_HourFormat_24,取值范围【0-23】,HourFormat在RTC初始化中设置
      uint8_t Minutes; //设置分钟,范围【0-59】          
      uint8_t Seconds; //设置秒钟,范围【0-59】         
      uint8_t TimeFormat; //格式设置,选择RTC_HOURFORMAT12_AM(代表AM或24小时格式)/RTC_HOURFORMAT12_PM(代表:PM)      
      uint32_t SubSeconds; //亚秒设置    
      uint32_t SecondFraction; //亚秒因子
      uint32_t DayLightSaving; //夏令时接口,已弃用
      uint32_t StoreOperation; //夏令时接口,已弃用
    }RTC_TimeTypeDef;
    
    /**
      * @brief  RTC Alarm structure definition
      */
    typedef struct
    {
      RTC_TimeTypeDef AlarmTime; //设置时间
       
      uint32_t AlarmMask; //闹钟掩码设置 
      //RTC_ALARMMASK_NONE,闹钟比较时匹配所有比较项目,包括日期(日/星期)、时、分、秒,完全匹配才会产生闹钟中断/事件
      //RTC_ALARMMASK_DATEWEEKDAY,屏蔽日期(日/星期),闹钟比较时将不关心日期(日/星期)
      //RTC_ALARMMASK_HOURS,屏蔽时钟,闹钟比较时将不关心小时数
      //RTC_ALARMMASK_MINUTES,屏蔽分钟,闹钟比较时将不关心分钟数
      //RTC_ALARMMASK_SECONDS,屏蔽秒钟,闹钟比较时将不关心秒钟数
      //RTC_ALARMMASK_ALL,屏蔽所有,设置后将不会产生闹钟中断/事件
    
      uint32_t AlarmSubSecondMask; //亚秒掩码设置
      //在RTC_Alarm_Sub_Seconds_Masks_Definitions中设置亚秒匹配规则
    
      uint32_t AlarmDateWeekDaySel; //日期(日/星期)选择,此位只有当AlarmMask中不设置RTC_ALARMMASK_DATEWEEKDAY时才有效
      //RTC_ALARMDATEWEEKDAYSEL_DATE,选择匹配日期
      //RTC_ALARMDATEWEEKDAYSEL_WEEKDAY,选择匹配星期
    
      uint8_t AlarmDateWeekDay; //日期(日/星期)设置,此位只有当AlarmMask中不设置RTC_ALARMMASK_DATEWEEKDAY时才有效
      //如果AlarmDateWeekDaySel选择RTC_ALARMDATEWEEKDAYSEL_DATE,该值范围【1-31】,代表设置一个月当中的第几号
      //如果AlarmDateWeekDaySel选择RTC_ALARMDATEWEEKDAYSEL_WEEKDAY,该值范围在RTC_WeekDay_Definitions定义,代表设置一周当中的星期几
    
      uint32_t Alarm; //设置闹钟
      //RTC_ALARM_A,选择闹钟A
      //RTC_ALARM_B,选择闹钟B
    
    }RTC_AlarmTypeDef;

    比如设置一个闹钟,在每个月10号,10点10分10秒时产生闹钟事件,则设置如下:

    RTC_AlarmTypeDef sAlarm = {0};
    
    sAlarm.AlarmTime.Hours = 10;
    sAlarm.AlarmTime.Minutes = 10;
    sAlarm.AlarmTime.Seconds = 10;
    sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
    sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
    sAlarm.AlarmMask = RTC_ALARMMASK_NONE; //不屏蔽日期比较
    sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE; //选择匹配日期
    sAlarm.AlarmDateWeekDay = 10; //设置10号
    sAlarm.Alarm = RTC_ALARM_A;
    
    HAL_RTC_SetAlarm_IT(&RTC_Handler, &sAlarm, RTC_FORMAT_BIN);
    

      

    比如设置一个闹钟,在每周星期五,10点10分10秒时产生闹钟事件,则设置如下:

    RTC_AlarmTypeDef sAlarm = {0};
    
    sAlarm.AlarmTime.Hours = 10;
    sAlarm.AlarmTime.Minutes = 10;
    sAlarm.AlarmTime.Seconds = 10;
    sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
    sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
    sAlarm.AlarmMask = RTC_ALARMMASK_NONE; //不屏蔽日期比较
    sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY; //选择匹配星期
    sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_FRIDAY; //设置星期五
    sAlarm.Alarm = RTC_ALARM_A;
    
    HAL_RTC_SetAlarm_IT(&RTC_Handler, &sAlarm, RTC_FORMAT_BIN);
    

      

    比如设置一个闹钟,在每天10点10分10秒时产生闹钟事件,则设置如下:

    RTC_AlarmTypeDef sAlarm = {0};
    
    sAlarm.AlarmTime.Hours = 10;
    sAlarm.AlarmTime.Minutes = 10;
    sAlarm.AlarmTime.Seconds = 10;
    sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
    sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
    sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY; //屏蔽日期/星期比较
    sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_WEEKDAY; //日期/星期设置无关
    sAlarm.AlarmDateWeekDay = RTC_WEEKDAY_FRIDAY; //日期/星期设置无关
    sAlarm.Alarm = RTC_ALARM_A;
    
    HAL_RTC_SetAlarm_IT(&RTC_Handler, &sAlarm, RTC_FORMAT_BIN);
  • 相关阅读:
    解决deepin没有ll等命令的办法
    解决客户端Redis中文乱码问题
    Redis 常用命令操作
    Redis常用数据类型
    Redis 入门
    Ubuntu18.04 安装netstat
    Ubuntu18.04 安装redis
    常用sql:按照表中的某一列对数据进行分组,统计数据条数
    date( ) 日期函数
    tp5 apache 转 nginx 需要配置的伪静态
  • 原文地址:https://www.cnblogs.com/yeshenmeng/p/15498681.html
Copyright © 2011-2022 走看看