一、定時器概述(了解)
1.1,軟件定時原理
使用純軟件(CPU死等)的方式實現定時(延時)功能
1.2,定時器定時原理
使用精準的時基,通過硬件的方式,實現定時功能
1.3,STM32定時器分類
1.4,STM32定時器特性表
1.5,STM32基本、通用、高級定時器的功能整體區(qū)別
二、基本定時器(掌握)
2.1,基本定時器簡介(了解)
2.2,基本定時器框圖(熟悉)
2.3,定時器計數模式及溢出條件(熟悉)
遞增計數模式實例說明
中心對齊模式實例說明
2.4,定時器中斷實驗相關寄存器(了解)
TIM6 和TIM7 控制寄存器 1(TIMx_CR1)
TIM6 和TIM7 DMA/中斷使能寄存器(TIMx_DIER)TIM6 和TIM7 狀態(tài)寄存器(TIMx_SR)
TIM6 和TIM7 計數器(TIMx_CNT)
TIM6 和TIM7 預分頻器(TIMx_PSC)
TIM6 和TIM7 自動重裝載寄存器(TIMx_ARR)
2.5,定時器溢出時間計算方法(掌握)
2.6,定時器中斷實驗配置步驟(掌握)
HAL_TIM_Base_Init()
HAL_TIM_Base_MspInit() //配置NVIC、CLOCK等
HAL_TIM_Base_Start_IT()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
TIMx_IRQHandler()等、HAL_TIM_IRQHandler()
HAL_TIM_PeriodElapsedCallback()
相關HAL庫函數介紹
關鍵結構體介紹
2.7,編程實戰(zhàn):定時器中斷實驗(掌握)![在這里插入圖
使用定時器6,實現500ms定時器更新中斷,在中斷里翻轉LED0
btim.c
#include "./BSP/LED/led.h"
#include "./BSP/TIMER/btim.h"
TIM_HandleTypeDef g_timx_handle; /* 定時器句柄 */
/**
* @brief 基本定時器TIMX定時中斷初始化函數
* @note
* 基本定時器的時鐘來自APB1,當PPRE1 ≥ 2分頻的時候
* 基本定時器的時鐘為APB1時鐘的2倍, 而APB1為36M, 所以定時器時鐘 = 72Mhz
* 定時器溢出時間計算方法: Tout = ((arr + 1) * (psc + 1)) / Ft us.
* Ft=定時器工作頻率,單位:Mhz
*
* @param arr: 自動重裝值。
* @param psc: 時鐘預分頻數
* @retval 無
*/
void btim_timx_int_init(uint16_t arr, uint16_t psc)
{
g_timx_handle.Instance = BTIM_TIMX_INT; /* 通用定時器X */
g_timx_handle.Init.Prescaler = psc; /* 設置預分頻系數 */
g_timx_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 遞增計數模式 */
g_timx_handle.Init.Period = arr; /* 自動裝載值 */
HAL_TIM_Base_Init(&g_timx_handle);
HAL_TIM_Base_Start_IT(&g_timx_handle); /* 使能定時器x及其更新中斷 */
}
/**
* @brief 定時器底層驅動,開啟時鐘,設置中斷優(yōu)先級
此函數會被HAL_TIM_Base_Init()函數調用
* @param htim:定時器句柄
* @retval 無
*/
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if (htim->Instance == BTIM_TIMX_INT)
{
BTIM_TIMX_INT_CLK_ENABLE(); /* 使能TIM時鐘 */
HAL_NVIC_SetPriority(BTIM_TIMX_INT_IRQn, 1, 3); /* 搶占1,子優(yōu)先級3,組2 */
HAL_NVIC_EnableIRQ(BTIM_TIMX_INT_IRQn); /* 開啟ITM3中斷 */
}
}
/**
* @brief 定時器TIMX中斷服務函數
* @param 無
* @retval 無
*/
void BTIM_TIMX_INT_IRQHandler(void)
{
HAL_TIM_IRQHandler(&g_timx_handle); /* 定時器中斷公共處理函數 */
}
/**
* @brief 定時器更新中斷回調函數
* @param htim:定時器句柄
* @retval 無
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == BTIM_TIMX_INT)
{
LED1_TOGGLE(); /* LED1反轉 */
}
}
btim.h
#ifndef __BTIM_H
#define __BTIM_H
#include "./SYSTEM/sys/sys.h"
/******************************************************************************************/
/* 基本定時器 定義 */
/* TIMX 中斷定義
* 默認是針對TIM6/TIM7
* 注意: 通過修改這4個宏定義,可以支持TIM1~TIM8任意一個定時器.
*/
#define BTIM_TIMX_INT TIM6
#define BTIM_TIMX_INT_IRQn TIM6_DAC_IRQn
#define BTIM_TIMX_INT_IRQHandler TIM6_DAC_IRQHandler
#define BTIM_TIMX_INT_CLK_ENABLE() do{ __HAL_RCC_TIM6_CLK_ENABLE(); }while(0) /* TIM6 時鐘使能 */
/******************************************************************************************/
void btim_timx_int_init(uint16_t arr, uint16_t psc); /* 基本定時器 定時中斷初始化函數 */
#endif
main.c
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/TIMER/btim.h"
int main(void)
{
HAL_Init(); /* 初始化HAL庫 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */
delay_init(72); /* 延時初始化 */
usart_init(115200); /* 串口初始化為115200 */
led_init(); /* 初始化LED */
btim_timx_int_init(5000 - 1, 7200 - 1); /* 10Khz的計數頻率,計數5K次為500ms */
while (1)
{
LED0_TOGGLE();
delay_ms(200);
}
}
三、通用定時器(掌握)
3.1,通用定時器簡介(了解)
3.2,通用定時器框圖(熟悉)
3.3,計數器時鐘源(掌握)
計數器時鐘源寄存器設置方法(F1為例)
外部時鐘模式1
外部時鐘模式2
使用一個定時器作為另一個定時器的預分頻器(F1為例)
解讀通用定時器中斷實驗
3.4,通用定時器PWM輸出實驗(掌握)
3.4.1,通用定時器輸出比較部分框圖介紹(熟悉)
捕獲/比較通道1的主電路—輸出部分
捕獲/比較通道的輸出部分(通道1)
3.4.2,通用定時器輸出PWM原理(掌握)
3.4.3,PWM模式(熟悉)
3.4.4,通用定時器PWM輸出實驗配置步驟(掌握)
HAL_TIM_PWM_Init()
HAL_TIM_PWM_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_PWM_ConfigChannel()
HAL_TIM_PWM_Start()
__HAL_TIM_SET_COMPARE()
__HAL_TIM_ENABLE_OCxPRELOAD()
相關HAL庫函數介紹
關鍵結構體介紹
3.4.5,編程實戰(zhàn):通用定時器PWM輸出實驗(掌握)
3.5,通用定時器輸入捕獲實驗(掌握)
3.5.1,通用定時器輸入捕獲部分框圖介紹(熟悉)
捕獲/比較通道的輸入部分(通道1)
3.5.2,通用定時器輸入捕獲脈寬測量原理(掌握)
3.5.3,通用定時器輸入捕獲實驗配置步驟(掌握)
HAL_TIM_IC_Init()
HAL_TIM_IC_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_IC_ConfigChannel()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
__HAL_TIM_ENABLE_IT()
HAL_TIM_IC_Start_IT()
TIMx_IRQHandler()等、 HAL_TIM_IRQHandler()
HAL_TIM_PeriodElapsedCallback()、HAL_TIM_IC_CaptureCallback()
相關HAL庫函數介紹
關鍵結構體介紹
3.5.4,編程實戰(zhàn):通用定時器輸入捕獲實驗(掌握)
通過定時器5通道1來捕獲按鍵高電平脈寬時間,通過串口打印出來
3.6,通用定時器脈沖計數實驗(掌握)
3.6.1,脈沖計數實驗原理(熟悉)
外部時鐘模式1
3.6.2,通用定時器脈沖計數實驗配置步驟(掌握)
HAL_TIM_IC_Init()
HAL_TIM_IC_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_SlaveConfigSynchro()
HAL_TIM_IC_Start()
__HAL_TIM_GET_COUNTER()
__HAL_TIM_SET_COUNTER()
相關HAL庫函數介紹
關鍵結構體介紹
3.6.3,編程實戰(zhàn):通用定時器脈沖計數實驗(掌握)
將定時器2通道1輸入的高電平脈沖作為定時器2的時鐘,并通過串口打印脈沖數
四、高級定時器(掌握)
4.1,高級定時器簡介(了解)
4.2,高級定時器框圖(熟悉)
4.3,高級定時器輸出指定個數PWM實驗(掌握)
4.3.1,重復計數器特性(熟悉)
計數器每次上溢或下溢都能使重復計數器減1,減到0時,再發(fā)生一次溢出就會產生更新事件
如果設置RCR為N,
更新事件將在N+1
次溢出時發(fā)生
4.3.2,高級定時器輸出指定個數PWM實驗原理(掌握)
4.3.3,高級定時器輸出指定個數PWM實驗配置步驟(掌握)
HAL_TIM_PWM_Init()
HAL_TIM_PWM_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_PWM_ConfigChannel()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
__HAL_TIM_ENABLE_IT()
HAL_TIM_PWM_Start()
TIMx_IRQHandler()等、HAL_TIM_IRQHandler()
HAL_TIM_PeriodElapsedCallback()
相關HAL庫函數介紹
關鍵結構體介紹
4.3.4,編程實戰(zhàn):高級定時器輸出指定個數PWM實驗(掌握)
通過定時器8通道1實現指定個數PWM輸出,用于控制LED1的亮滅
4.4,高級定時器輸出比較模式實驗(掌握)
4.4.1,高級定時器輸出比較模式實驗原理(掌握)
4.4.2,高級定時器輸出比較模式實驗配置步驟(掌握)
HAL_TIM_OC_Init()
HAL_TIM_OC_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_OC_ConfigChannel()
__HAL_TIM_ENABLE_OCxPRELOAD()
HAL_TIM_OC_Start()
__HAL_TIM_SET_COMPARE()
相關HAL庫函數介紹
關鍵結構體介紹
4.4.3,編程實戰(zhàn):高級定時器輸出比較模式實驗(掌握)
通過定時器8通道1/2/3/4輸出相位分別為25%、50%、75%、100%的PWM
4.5,高級定時器互補輸出帶死區(qū)控制實驗(掌握)
4.5.1,互補輸出,還帶死區(qū)控制,什么意思?(了解)
4.5.2,帶死區(qū)控制的互補輸出應用之H橋(了解)
4.5.3,捕獲/比較通道的輸出部分(通道1至3)(熟悉)
4.5.4,死區(qū)時間計算(掌握)
舉個栗子(F1為例):DTG[7:0]=250
250,即二進制:1111 1010,選第四條
DT = (32+26)1655.56 ns=51.55968us
4.5.5,剎車(斷路)功能(熟悉)
發(fā)生剎車后,會怎么樣?
4.5.6,高級定時器互補輸出帶死區(qū)控制實驗配置步驟(掌握)
HAL_TIM_PWM_Init()
HAL_TIM_PWM_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_PWM_ConfigChannel()
HAL_TIMEx_ConfigBreakDeadTime()
HAL_TIM_PWM_Start()
HAL_TIMEx_PWMN_Start()
相關HAL庫函數介紹
關鍵結構體介紹
4.5.7,編程實戰(zhàn):高級定時器互補輸出帶死區(qū)控制實驗(掌握)
通過定時器1通道1輸出頻率為1KHz,占空比為70%的PWM,使用PWM模式1
使能互補輸出并設置死區(qū)時間控制:設置DTG為100(5.56us),進行驗證死區(qū)時間是否正確
使能剎車功能:剎車輸入信號高電平有效,配置輸出空閑狀態(tài)等,最后用示波器驗證
4.6,高級定時器PWM輸入模式實驗(掌握)
4.6.1,PWM輸入模式工作原理(熟悉)
4.6.2,PWM輸入模式時序(熟悉)
4.6.3,高級定時器PWM輸入模式實驗配置步驟(掌握)
HAL_TIM_IC_Init()
HAL_TIM_IC_MspInit() //配置NVIC、CLOCK、GPIO等
HAL_TIM_IC_ConfigChannel()
HAL_TIM_SlaveConfigSynchro()
HAL_NVIC_SetPriority()、 HAL_NVIC_EnableIRQ()
HAL_TIM_IC_Start_IT()、 HAL_TIM_IC_Start()
TIMx_IRQHandler()等、HAL_TIM_IRQHandler()
HAL_TIM_IC_CaptureCallback()
相關HAL庫函數介紹
關鍵結構體介紹文章來源:http://www.zghlxwxcb.cn/news/detail-834158.html
4.6.4,編程實戰(zhàn):高級定時器PWM輸入模式實驗(掌握)
文章來源地址http://www.zghlxwxcb.cn/news/detail-834158.html
到了這里,關于stm32——hal庫學習筆記(定時器)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!