STM32外设:专用定时器 IWDG、WWDG、RTC
主要外设:
- 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的配置
引脚分配:无
外设配置:
- 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的配置
引脚分配:无
外设配置:
- 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的配置
引脚分配:无
外设配置:
- 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的更多相关文章
- STM32学习笔记——定时器中断(向原子哥学习)
定时器中断 STM32 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器.在本章中,我们将利 ...
- STM32之旅5——IWDG
STM32之旅5--IWDG stm32有两个看门狗,一个独立看门狗(IWDG).一个窗口看门狗(WWDG):独立看门狗是时钟源是内部的40kHz的低速时钟,即使主频出问题了,独立看门狗也不会受到影响 ...
- STM8S awu及看门狗IWDG WWDG应用(转)
源:STM8S awu及看门狗IWDG WWDG应用 AWU的应用(用库函数完成的) //切记要开启中断 且在中断函数中 AWU_GetFlagStatus(); 来清除中断 void AWU_SET ...
- STM32 TIM高级定时器死区时间的计算
STM32 TIM高级定时器的互补PWM支持插入死区时间,本文将介绍如何计算以及配置正确的死区时间. 文章目录 什么是死区时间? 数据手册的参数 如何计算合理的死区时间? STM32中配置死区时间 什 ...
- STM32 TIM1高级定时器RCR重复计数器的理解
STM32 TIM1高级定时器RCR重复计数器的理解 TIMx_RCR重复计数器寄存器,重复计数器只支持高级定时器TIM1和TIM8,下面看标准外设库的TIM结构体的封装: typedef struc ...
- STM32入门系列-STM32外设地址映射
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...
- STM32时钟和定时器
时钟源 STM32包含了5个时钟源,分别为HSI.HSE.LSI.LSE.PLL. HSI是高速内部时钟.RC振荡器,频率为8MHz: HSE是高速外部时钟,即晶振,可接石英/陶瓷谐振器或接外部时钟源 ...
- 一文打尽PWM协议、PPM协议、PCM协议、SBUS协议、XBUS协议、DSM协议 | STM32的通用定时器TIM3实现PPM信号输出
PWM.PPM.PCM.SBUS.XBUS.DSM都是接收机与其他设备通信的协议. 请注意这里不要将遥控器和接收机之间的协议混淆.遥控器和接收机之间会采用某种协议来互相沟通,这些协议往往各个厂牌各自有 ...
- [stm32] STM32的通用定时器TIMx系统了解
通用定时器(TIMx) 一.TIMx简介 二.TIMx主要功能 三.TIMx功能描述 3.1 时基单元 3.2 计数器模式 3.3 时钟选择 3.4 捕获/比较通道 3.5 输入捕获模式 3.6 PW ...
- Stm32之通用定时器复习
因为毕业设计要用到PWM调光很久都没用到Stm32的定时器,有些内容已经遗忘,为了回顾复习相关内容今天开下通用定时器这一章节的数据手册. 1.时钟 通用定时器一般是TIM2~TIM5,TIM1.TIM ...
随机推荐
- 程序后台运行方法:使用守护进程 或 screen软件
我们常需要SSH远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,在此期间不能关掉窗口或者断开连接,否则这个任务会被杀掉,一切就半途而废了. 可以使用以下两个方法: 方法一:noh ...
- windows访问linux分区文件
正常情况下,linux可以访问windows系统的文件,而要想在windows下访问linux文件,需要借助第三方软件. 常用的有以下几款: 1.Linux Reader 2.Ext2 IFS 3.E ...
- 【opencv】传统图像识别:hog+svm实现图像识别详解
图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息.传统图像识别技术的过程分为信息的获取.预处理.特征抽取和选择.分类器设计和分类决策.本文也是从这四点出发进 ...
- 工具—批量备案信息查询并生成fofa查询语句
描述: 1.可以输入一个或多个公司名或域名或备案号,得到备案信息(备案公司名,备案公司网站url,备案号,域名类型,审核时间) 2.读取生成的信息并转为fofa语句,方便了指定目标的信息收集速度 工具 ...
- 《SQL与数据库基础》03. SQL-DML
目录 DML 数据插入 数据删除 数据更新 本文以 MySQL 为例 DML 数据插入 给指定字段添加数据: INSERT INTO 表(字段1, 字段2, ......, 字段n) VALUES(值 ...
- WPF学习 - 动画基础(1)
1. WPF中的动画(Animation),是一种属性动画.技术上来说,它是让属性从一个值,变化到另一个值的过程.因此,有两条重要的特性: 1.1 只能为依赖属性应用动画(因为第二条特性). 1.2 ...
- 微信小程序隐私保护协议修改方法 uniapp
微信隐私保护协议指南 一天天没事闲的 01 在manifest.json 中添加一行 "__usePrivacyCheck__" : false 02 自定义一个弹窗组件 ...
- 《Hadoop3.X大数据开发实战(视频教学版)》新书来啦!
- KRPano最新官方文档中文版
KRPano最新官方文档中文版: KRPano作为VR全景开发中常用的工具软件,深受广大开发者喜爱,但由于软件本身是国外软件,因此官方的文档都是以英文为主,对于一些国内不太熟悉英文的开发者来说比较不友 ...
- LUA的一些工具备份
table.unpack遇到的问题 做了个中转的服务, socket+json 传递数据, 通过 {...} 封装不定参数然后 json.encode 传递到其他服务器, 然后其他服务器 json.d ...