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()
typedef struct
{
IWDG_TypeDef *Instance; /* IWDG 暫存器基地址 */
IWDG_InitTypeDef Init; /* IWDG 初始化引數 */
}IWDG_HandleTypeDef;
2,把重灌載暫存器的值過載到計數器中,餵狗(IWDG_KR):HAL_IWDG_Refresh()
typedef struct
{
uint32_t Prescaler; /* 預分頻係數 */
uint32_t Reload; /* 重灌載值 */
} IWDG_InitTypeDef;
WWDG簡介 :視窗看門狗
本質:能產生系統復位訊號和提前喚醒中斷的計數器
特性:遞減的計數器;視窗期,可以餵狗,非視窗期,餵狗則會復位(W[6:0] ≥視窗期>0x3F)
餵狗:在視窗期內重灌載計數器的值,防止復位
作用:用於監測微控制器程式執行時效是否精準,主要檢測軟體異常
WWDG超時時間計算:T𝑜𝑢𝑡 =(4096∗2^WDGTB∗(T[5:0]+1))/Fwwdg
WWDG配置步驟:
1,使能WWDG,設定預分頻係數和視窗值等(WWDG_CR/WWDG_CFR):HAL_WWDG_Init()
typedef struct
{
WWDG_TypeDef *Instance; /* WWDG 暫存器基地址 */
WWDG_InitTypeDef Init; /* WWDG 初始化引數 */
}WWDG_HandleTypeDef;
2,WWDG Msp初始化:HAL_WWDG_MspInit() 配置NVIC、CLOCK等
3,設定優先順序,使能中斷:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
4,編寫中斷服務函式:WWDG_IRQHandler() HAL_WWDG_IRQHandler
5,重定義提前喚醒回撥函式:HAL_WWDG_EarlyWakeupCallback()
6,在視窗期內餵狗,重灌載計數器(WWDG_CR):HAL_WWDG_Refresh()
typedef struct
{
uint32_t Prescaler; /* 預分頻係數 */
uint32_t Window; /* 視窗值 */
uint32_t Counter; /* 計數器值 */
uint32_t EWIMode; /* 提前喚醒中斷使能 */
}WWDG_InitTypeDef;
軟體定時原理:使用純軟體(CPU死等)的方式實現定時(延時)功能
缺點:1,延時不精準;2,CPU死等
定時器定時原理:使用精準的時基,透過硬體的方式,實現定時功能
定時器核心就是計數器
定時器型別:
基本定時器:沒有輸入輸出通道,常用作時基,即定時功能
通用定時器:具有多路獨立通道,可用於輸入捕獲/輸出比較,也可用作時基
高階定時器:除具備通用定時器所有功能外,還具備帶死區控制的互補訊號輸出、剎車輸入等功能(可用於電機控制、數字電源設計等)
基本定時器:TIM6/TIM7
主要特性:16位遞增計數器(計數值:0~65535)
16位預分頻器(分頻係數:1~65536)
可用於觸發DAC
在更新事件(計數器溢位)時,會產生中斷/DMA請求
定時器中斷實驗配置步驟:
1,初始化定時器基礎引數(CR1、ARR、PSC):HAL_TIM_Base_Init()
2,存放NVIC、CLOCK、GPIO初始化程式碼:HAL_TIM_Base_MspInit() 配置NVIC、CLOCK等
3,使能更新中斷並啟動計數器(DIER、CR1):HAL_TIM_Base_Start_IT()
4,設定優先順序,使能中斷:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
5,定時器中斷處理公用函式,處理各種中斷(SR):TIMx_IRQHandler()等 HAL_TIM_IRQHandler()
6,定時器更新中斷回撥函式,由使用者重定義:HAL_TIM_PeriodElapsedCallback()
通用定時器PWM輸出實驗配置步驟:
1,初始化定時器基礎引數(CR1、ARR、PSC):HAL_TIM_PWM_Init()
2,存放NVIC、CLOCK、GPIO初始化程式碼:HAL_TIM_PWM_MspInit() 配置NVIC、CLOCK、GPIO等
3,配置PWM模式、比較值、輸出極性等(CCMRx、CCRx、CCER):HAL_TIM_PWM_ConfigChannel()
4,使能輸出比較並啟動計數器(CCER、CR1):HAL_TIM_PWM_Start()
5,修改比較值控制佔空比(CCRx可選):__HAL_TIM_SET_COMPARE()
6,使能通道預裝載(CCER可選):__HAL_TIM_ENABLE_OCxPRELOAD()
通用定時器輸入捕獲實驗配置步驟:
1,初始化定時器基礎引數(CR1、ARR、PSC):HAL_TIM_IC_Init()
2,存放NVIC、CLOCK、GPIO初始化程式碼:HAL_TIM_IC_MspInit() 配置NVIC、CLOCK、GPIO等
3,配置通道對映、捕獲邊沿、分頻、濾波等(CCMRx、CCER):HAL_TIM_IC_ConfigChannel()
4,設定優先順序,使能中斷:HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
5,使能更新中斷等(DIER):__HAL_TIM_ENABLE_IT()
6,使能輸入捕獲、捕獲中斷並啟動計數器(CCER、DIER、CR1):HAL_TIM_IC_Start_IT()
7,定時器中斷處理公用函式,處理各種中斷(SR):TIMx_IRQHandler()等 HAL_TIM_IRQHandler()
8,編寫更新中斷和捕獲回撥函式:
定時器更新中斷回撥函式,由使用者重定義:HAL_TIM_PeriodElapsedCallback() 、
定時器輸入捕獲回撥函式,由使用者重定義:HAL_TIM_IC_CaptureCallback()
通用定時器脈衝計數實驗配置步驟:
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()
高階定時器輸出指定個數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、計算充電時間(定時器捕獲/比較暫存器獲取)
--