主要外设:

  • IWDG:Independent Watch DoG 独立看门狗
  • WWDG:Window Watch DoG 窗口看门狗
  • RTC: Real-Time Clock 实时时钟

IWDG

主要功能:监控MCU的程序,当程序发生故障或超时,使MCU自动重启

LSI(内部RC振荡器~40KHz)→8位预分频系数PR→装值RLR、12位递减计数器→IWDG复位

  • 递减计数器:计数值从RLR减到0,IWDG会产生一个复位信号,系统复位重新启动
  • 避免产生看门狗复位,则需在计数值减到0之前将重装值写入到计数器即“喂狗”
  • 当程序出错时没有刷新计数器,计数器递减到0,系统复位重新启动
  • 使用"独立"的内部RC振荡器作为时钟源,CM内核使用主时钟,在停机和待机模式可工作
  • 最多PR/40KHZ*RLR时间不刷新IWDG则系统复位

硬件设计

32分频/40kHz*1000=800ms 不刷新IWDG则系统复位

CubeMX的配置

  1. 引脚分配:无

  2. 外设配置:

  • System Core-IWDG →模式→ 勾选Actived
  • System Core-IWDG →参数设置(时钟)→IWDG计数器时钟预分频系数=32、IWDG递减计数器重载值1000

用户代码

//USBR CODE3:后台程序(无限循环)
HAL_IWDG_Refresh(&hiwdg);//喂狗

WWDG

主要功能:保证MCU运行时间是否精准

PCLK1→4096分频→分频器系数CFR→重载值CR (TR)、窗口值CFR(WR)、7位递减计数器

  • 递减计数器:从TR→WR→0x40:在IWDG的基础上画了一道线WR
  • 只能在WR→0x40窗口上限和窗口下限之间可以"喂狗"(从而保证在一定时间内执行)
  • TR→WR之间"喂狗"会产生复位
  • 最小超时时间为WR→0x40:4096预分频值(TR-WR)/APB1时钟
  • 最大超时时间为TR→0x40:4096预分频值(TR-0x39)/APB1时钟
  • 早期预警中断Early wakeup interrupt:WWDG复位并不代表程序出错或死机,在MCU复位前,进行收尾工作(eg.保存数据)、
  • 与CM内核共用主时钟

硬件设计

TR=127、WR=84、APB1=50MHz

(4096 * 8)(127-63)/ 50MHz =41.94ms

(4096 * 8)
(127-84)/ 50MHz =28.18ms

CubeMX的配置

  1. 引脚分配:无

  2. 外设配置:

  • System Core-WWDG →模式→ 勾选Actived
  • System Core-WWDG →参数设置(看门狗时钟)→WWDG计数器时钟预分频系数=8、WWDG窗口值84、WWDG自运行递减计数器值127
  • System Core-WWDG →参数设置(看门狗中断)→Early wakeup interrupt使能
  • System Core-NVIC-NVIC中断表 → Window watchdog Interrupt → 勾选使能、并设置抢占优先级和子优先级

用户代码

//USBR CODE3:后台程序(无限循环)
HAL_Delay(35);//等待29ms~40ms喂狗的窗口时间
HAL_WWDG_Refresh(&hwwdg);//喂狗 //USER CODE4:定义中断回调函数
void HAL_WWDG_EarlyWakeupCallback(WWDG_HandleTypeDef *hwwdg){
//在MCU复位前,进行收尾工作(eg.保存数据),不在此处喂狗
}

RTC

主要功能:系统实时时间(日历时钟、闹钟中断)、低功耗模式下的唤醒定时器

32.768kHz→20位预分频器→1s的时间基准→32位计数器CNT、闹钟值ALR→闹钟中断

闹钟中断:当CNT = ALR时

DS1302芯片是按年月日时分秒的分组寄存器

RTC使用32位计数器每1s计数器+1(最多可计时136年)、以1970-01-01 00:00:00为起点的时间戳

在系统复位或从待机模式唤醒后RTC的设置和事件维持不变

后备寄存器:10个16bit的SRAM类型的寄存器(包括RTC的时间、用户数据等)、断电后丢失、需要备用电池供电

时钟源

  • 内部RC振荡40KHz→LSI:可能发生温漂、精确度低
  • 外接32.768KHz石英晶体晶振→GPIO AF→引脚OSC32_IN、OSC32_OUT→LSE:为补偿天然晶体的偏差,512Hz信号进行校准
  • HSE→128分频

系统实时时间:

  • 备用电池(3V纽扣电池通过VBAT引脚接入MCU):一般情况由VDD给RTC和后备寄存器供电,当断电后由VBAT供电

CubeMX的配置

  1. 引脚分配:无

  2. 外设配置:

  • Timers-RTC →模式→ 勾选Activate Clock source、Active Calendar、选择AlarmA为内部时钟
  • Timers-RTC →参数设置(日历时间)→日期格式=二进制数据格式、小时0、分钟0、秒0
  • Timers-RTC →参数设置(日历日期)→日期格式=二进制数据格式、星期五、1月、1日 、21年
  • Timers-RTC →参数设置(AlarmA)→小时0、分钟0、秒30

用户代码

//USER CODE PV:变量定义variables
RTC_DateTypeDef GetDate;
RTC_TimeTypeDef GetTime; //USER CODE2:外设启动
//手动设置时间、日期、闹钟
RTC_TimeTypeDef sTime = {0};
sTime.Hours = 0;
sTime.Minutes = 0;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK){
Error_Handler();
} RTC_DateTypeDef sDate = {0};
sDate.WeekDay = RTC_WEEKDAY_SATURDAY;
sDate.Month = RTC_MONTH_MAY;
sDate.Date = 1;
sDate.Year = 21;
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK){
Error_Handler();
} RTC_AlarmTypeDef sAlarm = {0};
sAlarm.AlarmTime.Hours = 17;
sAlarm.AlarmTime.Minutes = 19;
sAlarm.AlarmTime.Seconds = 30;
sAlarm.AlarmTime.SubSeconds = 0;
sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
sAlarm.AlarmDateWeekDay = 29;
sAlarm.Alarm = RTC_ALARM_A;
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK){
Error_Handler();
} //USBR CODE3:后台程序(无限循环)
//打印当前时间
HAL_RTC_GetTime(&hrtc,&GetTime,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc,&GetDate,RTC_FORMAT_BIN);
printf("DateTime:%02d-%02d-%02d %02d:%02d:%02d\r\n",2000+GetDate.Year,GetDate.Month,GetDate.Date,GetTime.Hours,GetTime.Minutes,GetTime.Seconds); //USER CODE4:定义中断回调函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc){
//闹钟触发
}

STM32外设:专用定时器 IWDG、WWDG、RTC的更多相关文章

  1. STM32学习笔记——定时器中断(向原子哥学习)

    定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...

  2. STM32之旅5——IWDG

    STM32之旅5--IWDG stm32有两个看门狗,一个独立看门狗(IWDG).一个窗口看门狗(WWDG):独立看门狗是时钟源是内部的40kHz的低速时钟,即使主频出问题了,独立看门狗也不会受到影响 ...

  3. STM8S awu及看门狗IWDG WWDG应用(转)

    源:STM8S awu及看门狗IWDG WWDG应用 AWU的应用(用库函数完成的) //切记要开启中断 且在中断函数中 AWU_GetFlagStatus(); 来清除中断 void AWU_SET ...

  4. STM32 TIM高级定时器死区时间的计算

    STM32 TIM高级定时器的互补PWM支持插入死区时间,本文将介绍如何计算以及配置正确的死区时间. 文章目录 什么是死区时间? 数据手册的参数 如何计算合理的死区时间? STM32中配置死区时间 什 ...

  5. STM32 TIM1高级定时器RCR重复计数器的理解

    STM32 TIM1高级定时器RCR重复计数器的理解 TIMx_RCR重复计数器寄存器,重复计数器只支持高级定时器TIM1和TIM8,下面看标准外设库的TIM结构体的封装: typedef struc ...

  6. STM32入门系列-STM32外设地址映射

    片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...

  7. STM32时钟和定时器

    时钟源 STM32包含了5个时钟源,分别为HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟.RC振荡器,频率为8MHz: HSE是高速外部时钟,即晶振,可接石英/陶瓷谐振器或接外部时钟源 ...

  8. 一文打尽PWM协议、PPM协议、PCM协议、SBUS协议、XBUS协议、DSM协议 | STM32的通用定时器TIM3实现PPM信号输出

    PWM.PPM.PCM.SBUS.XBUS.DSM都是接收机与其他设备通信的协议. 请注意这里不要将遥控器和接收机之间的协议混淆.遥控器和接收机之间会采用某种协议来互相沟通,这些协议往往各个厂牌各自有 ...

  9. [stm32] STM32的通用定时器TIMx系统了解

    通用定时器(TIMx) 一.TIMx简介 二.TIMx主要功能 三.TIMx功能描述 3.1 时基单元 3.2 计数器模式 3.3 时钟选择 3.4 捕获/比较通道 3.5 输入捕获模式 3.6 PW ...

  10. Stm32之通用定时器复习

    因为毕业设计要用到PWM调光很久都没用到Stm32的定时器,有些内容已经遗忘,为了回顾复习相关内容今天开下通用定时器这一章节的数据手册. 1.时钟 通用定时器一般是TIM2~TIM5,TIM1.TIM ...

随机推荐

  1. WorkManager的用法

    一.WorkManager的作用 绝大部分应用程序都有后台执行任务的需求,根据需求的不同,Android为后台任务提供了多种解决方案,如JobShedule,Loader,Service等.如果这些a ...

  2. css面试题一

    1.继承 css的继承:就是给父级设置一些属性,子级继承了父级的该属性,这就是我们css中的继承.官方的解释,继承是一种规则,它允许样式不仅应用于特定的html标签元素,而且应用于其后代元素. a.有 ...

  3. Pycharm远程连接到服务器运行错误can‘t open file ‘tmp

    Pycharm远程连接到服务器运行错误can't open file '/tmp/.../a.py': [Errno 2] No such file or directory 问题描述 win11 P ...

  4. zxy 简单 dp 大讲堂

    讲课讲得非常清楚啊,我绝赞膜拜.节奏可以,思路清晰,解法自然,为讲师点赞. 第一个题是 loj3282 / joisc2020 - Treatment Project.原问题由 \(\left(S, ...

  5. Machine Learning for NetFlow Anomaly Detection With Human-Readable Annotations 笔记

    Machine Learning for NetFlow Anomaly Detection With Human-Readable Annotations 关键摘要 我们开发了一个复杂企业网络中的异 ...

  6. QQ机器人整理合集

    QQ机器人有什么用呢? QQ机器人可以实现包括自动回复.定时推送.发送图片QQ机器人,营销圈用的比较多,可以开发各种自动功能等等.用其制作的QQ机器人程序 机器人框架+插件 小栗子机器人 官网:htt ...

  7. android 中service的简单事例

    源码 public class ServiceDemoActivity extends Activity { private static final String TAG = "Servi ...

  8. MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-2

    本文主要记录57版本升级80版本的过程,供参考. ■ 57版本升级80版本注意事项 默认字符集由latin1变为utf8mb4 MyISAM系统表全部换成InnoDB表 sql_mode参数默认值变化 ...

  9. linux知识点 ROM,RAM,SRAM,DRAM,Flash

    参考视频:https://www.bilibili.com/video/BV13L4y1b7So?spm_id_from=333.337.search-card.all.click SRAM,DRAM ...

  10. 快速展示原型之Minimal API开发

    Minimal API官网地址: https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis/security?vi ...