4.看门狗、定时器、触摸电容

系统复位方式:
1. NRST引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位

 

IWDG简介 :独立看门狗
本质:能产生系统复位信号的计数器
特性:递减的计数器;时钟由独立的RC振荡器提供(可在待机和停止模式下运行);看门狗被激活后,当递减计数器计数到0x000时产生复位
喂狗:在计数器计数到0之前,重装载计数器的值,防止复位:IWDG有什么作用
作用:主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题
独立看门狗是异常处理的最后手段,不可依赖,应在设计时尽量避免异常的发生

IWDG溢出时间计算:
IWDG溢出时间计算公式(HAL库):Tout =(psc∗𝑟𝑙𝑟)/f𝐼𝑊𝐷𝐺
  Tout:溢出时间
  f𝐼𝑊𝐷𝐺:时钟源频率
  psc:预分频系数
  rlr:重装载值
寄存器设置分频系数的方法:"psc" =4∗2^prer
  prer是IWDG_PR 的值
IWDG溢出时间计算公式(寄存器):Tout =((4∗2^prer)∗𝑟𝑙𝑟)/f𝐼𝑊𝐷𝐺

IWDG配置步骤:
1,使能IWDG,设置预分频系数和重装载值等(IWDG_PR/RL/KR):HAL_IWDG_Init()
2,把重装载寄存器的值重载到计数器中,喂狗(IWDG_KR):HAL_IWDG_Refresh()

分频系数(参考手册17.3.3):

重装载值:


"f" 𝐼𝑊𝐷𝐺是看门狗的时钟源频率:1MHz=10000

WWDG简介 :窗口看门狗
本质:能产生系统复位信号和提前唤醒中断的计数器
特性:递减的计数器;窗口期,可以喂狗,非窗口期,喂狗则会复位(W[6:0] ≥窗口期>0x3F)
喂狗:在窗口期内重装载计数器的值,防止复位
作用:用于监测单片机程序运行时效是否精准,主要检测软件异常

WWDG超时时间计算:T𝑜𝑢𝑡 =(4096∗2^WDGTB∗(T[5:0]+1))/Fwwdg

    T𝑜𝑢𝑡:超时时间(没喂狗)
    Fwwdg:时钟源频率
    4096:固定的预分频系数
    2^𝑊𝐷𝐺𝑇𝐵:预分频系数值
    T[5:0]:计数器低6位(计数器值-窗口值)

WWDG配置步骤:
1,使能WWDG,设置预分频系数和窗口值等(WWDG_CR/WWDG_CFR):HAL_WWDG_Init()
2,WWDG MSP回调函数:HAL_WWDG_MspInit()    配置NVIC、CLOCK等
  设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
3,编写中断服务函数:WWDG_IRQHandler() HAL_WWDG_IRQHandler
4,重定义提前唤醒回调函数:HAL_WWDG_EarlyWakeupCallback()
  在窗口期内喂狗,重装载计数器(WWDG_CR):HAL_WWDG_Refresh()

软件定时原理:使用纯软件(CPU死等)的方式实现定时(延时)功能
缺点:1,延时不精准;2,CPU死等
定时器定时原理:使用精准的时基,通过硬件的方式,实现定时功能
定时器核心就是计数器

STM32定时器分类:
常规定时器:
    基本定时器
    通用定时器
    高级定时器
专用定时器:
    独立看门狗
    窗口看门狗
    实时时钟
    低功耗定时器
内核定时器:
    SysTick定时器

定时器类型:
基本定时器:没有输入输出通道,常用作时基,即定时功能
通用定时器:具有多路独立通道,可用于输入捕获/输出比较,也可用作时基
高级定时器:除具备通用定时器所有功能外,还具备带死区控制的互补信号输出、刹车输入等功能(可用于电机控制、数字电源设计等)

基本定时器:TIM6/TIM7
主要特性:16位递增计数器(计数值:0~65535)
  16位预分频器(分频系数:1~65536)
  可用于触发DAC
  在更新事件(计数器溢出)时,会产生中断/DMA请求

定时器溢出时间计算方法:𝑇out =((𝐴𝑅𝑅+1)∗(𝑃𝑆𝐶+1))/𝐹𝑡
    𝑇out:溢出时间
    𝐹𝑡:时钟源频率
    𝐴𝑅𝑅:自动重装载寄存器的值
    𝑃𝑆𝐶:预分频器寄存器的值

定时器中断实验配置步骤(atim.c):
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_Base_Init()
2,使能更新中断并启动计数器(DIER、CR1):HAL_TIM_Base_Start_IT()
3,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_Base_MspInit()     配置NVIC、CLOCK等
  设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
4,定时器中断处理公用函数,处理各种中断(SR):TIMx_IRQHandler()等    HAL_TIM_IRQHandler()
5,定时器更新中断回调函数,由用户重定义:HAL_TIM_PeriodElapsedCallback()

通用定时器:
    TIM2/TIM3 /TIM4 /TIM5
    主要特性:16位递增、递减、中心对齐计数器(计数值:0~65535)
    16位预分频器(分频系数:1~65536)
    可用于触发DAC、ADC
    在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求
    4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式
    使用外部信号控制定时器且可实现多个定时器互连的同步电路
    支持编码器和霍尔传感器电路等

通用定时器PWM输出实验配置步骤(gtim.c):
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_PWM_Init()
  配置PWM模式、比较值、输出极性等(CCMRx、CCRx、CCER):HAL_TIM_PWM_ConfigChannel()
  使能输出比较并启动计数器(CCER、CR1):HAL_TIM_PWM_Start()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_PWM_MspInit()     配置NVIC、CLOCK、GPIO等
3,修改比较值控制占空比(CCRx可选):__HAL_TIM_SET_COMPARE()
4,使能通道预装载(CCER可选):__HAL_TIM_ENABLE_OCxPRELOAD()

通用定时器输入捕获实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_IC_Init()
  配置通道映射、捕获边沿、分频、滤波等(CCMRx、CCER):HAL_TIM_IC_ConfigChannel()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_IC_MspInit()     配置NVIC、CLOCK、GPIO等
  设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
3,定时器中断处理公用函数,处理各种中断(SR):TIMx_IRQHandler()等    HAL_TIM_IRQHandler()
4,编写更新中断和捕获回调函数:
  定时器输入捕获回调函数,由用户重定义:HAL_TIM_IC_CaptureCallback()
  定时器更新中断回调函数,由用户重定义:HAL_TIM_PeriodElapsedCallback() 
5,使能
  使能更新中断等(DIER):__HAL_TIM_ENABLE_IT()
  使能输入捕获、捕获中断并启动计数器(CCER、DIER、CR1):HAL_TIM_IC_Start_IT()


通用定时器脉冲计数实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_IC_Init()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_IC_MspInit()     配置NVIC、CLOCK、GPIO等
3,配置定时器从模式、触发选择、分频、滤波等(SMCR、CCMRx、CCER):HAL_TIM_SlaveConfigSynchro()
4,使能输入捕获、启动计数器(CCER、CR1):HAL_TIM_IC_Start()
5,获取计数器当前值(CNT):__HAL_TIM_GET_COUNTER()
6,设置计数器的值(CNT):__HAL_TIM_SET_COUNTER()

高级定时器:TIM1/TIM8 
主要特性:
    16位递增、递减、中心对齐计数器(计数值:0~65535)
    16位预分频器(分频系数:1~65536)
    可用于触发DAC、ADC
    在更新事件、触发事件、输入捕获、输出比较时,会产生中断/DMA请求
    4个独立通道,可用于:输入捕获、输出比较、输出PWM、单脉冲模式
    使用外部信号控制定时器且可实现多个定时器互连的同步电路
    支持编码器和霍尔传感器电路等
    重复计数器
    死区时间带可编程的互补输出
    断路输入,用于将定时器的输出信号置于用户可选的安全配置中

高级定时器输出指定个数PWM实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_PWM_Init()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_PWM_MspInit()
3,配置PWM模式、比较值、输出极性等(CCMRx、CCRx、CCER):HAL_TIM_PWM_ConfigChannel()
4,设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
5,使能更新中断等(CCER):__HAL_TIM_ENABLE_IT()
6,使能输出、主输出、启动计数器(CCER、CR1):HAL_TIM_PWM_Start()
7,定时器中断处理公用函数,处理各种中断(SR):TIMx_IRQHandler()等->HAL_TIM_IRQHandler()
8,定时器更新中断回调函数,由用户重定义:HAL_TIM_PeriodElapsedCallback()

通过软件产生事件(EGR):HAL_TIM_GenerateEvent()
启动计数器(CR1):__HAL_TIM_ENABLE()

高级定时器输出比较模式实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_OC_Init()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_OC_MspInit()   配置NVIC、CLOCK、GPIO等
3,设置输出比较模式、比较值、输出极性等(CCMRx、CCRx、CCER):HAL_TIM_OC_ConfigChannel()
4,使能通道预装载(CCMRx):__HAL_TIM_ENABLE_OCxPRELOAD()
5,使能输出比较、主输出、启动计数器(CR1、CCER、BDTR):HAL_TIM_OC_Start()
6,修改捕获/比较寄存器的值(CCRx):__HAL_TIM_SET_COMPARE()

死区时间计算:
1,确定t𝐷𝑇𝑆的值:𝑓𝐷𝑇𝑆=Ft/(2^𝐶𝐾𝐷[1:0])
2,判断DTG[7:5],选择计算公式
3,代入选择的公式计算

高级定时器互补输出带死区控制实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_PWM_Init()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_PWM_MspInit()    
3,配置PWM模式、比较值、输出极性等(CCMRx、CCRx、CCER):HAL_TIM_PWM_ConfigChannel()
4,配置刹车功能、死区时间等(BDTR):HAL_TIMEx_ConfigBreakDeadTime()
5,使能输出、主输出、启动计数器(CCER、CR1):HAL_TIM_PWM_Start()
6,使能互补输出、主输出、启动计数器(CCER、CR1):HAL_TIMEx_PWMN_Start()

高级定时器PWM输入模式实验配置步骤:
1,初始化定时器基础参数(CR1、ARR、PSC):HAL_TIM_IC_Init()
2,存放NVIC、CLOCK、GPIO初始化代码:HAL_TIM_IC_MspInit()     
3,配置通道映射、捕获边沿、分频、滤波等(CCMRx、CCER):HAL_TIM_IC_ConfigChannel()
4,配置从模式、触发源、触发边沿等(SMCR、CCER):HAL_TIM_SlaveConfigSynchro()
5,设置优先级,使能中断:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
6,使能输入捕获、捕获中断并启动计数器(CCER、DIER、CR1):HAL_TIM_IC_Start_IT()、 HAL_TIM_IC_Start()
7,定时器中断处理公用函数,处理各种中断(SR):TIMx_IRQHandler()等-> HAL_TIM_IRQHandler()
8,定时器输入捕获回调函数,由用户重定义:HAL_TIM_IC_CaptureCallback()

检测电容触摸按键过程:
1、TPAD引脚设置为推挽输出,输出低电平,实现电容放电到地
2、TPAD引脚设置为浮空输入(IO复位后的状态),电容开始充电
3、同时开启TPAD引脚的输入捕获功能,开始捕获高电平
4、等待充电过程中,上升沿触发(充电到Vth(上升沿的电压值))
5、计算充电时间(定时器捕获/比较寄存器获取)

 

 

 

 

 

 

--





 

posted @   阿Q熊  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示