這篇文章將詳細(xì)介紹 STM32,cubeMX 定時(shí)器的配置和使用。
前言
- 實(shí)驗(yàn)開發(fā)板:STM32F103C8T6。
- 所需軟件:keil5 , cubeMX 。
- 實(shí)驗(yàn)?zāi)康模毫私?cubeMX 定時(shí)器 的配置和使用。
- 實(shí)驗(yàn):使用定時(shí)器控制 led 閃爍。
一、定時(shí)器基礎(chǔ)知識(shí)
STM32的定時(shí)器是用于時(shí)間測(cè)量和事件生成的復(fù)雜工具??梢允褂脙?nèi)部或外部時(shí)鐘源。時(shí)鐘源和分頻設(shè)置將決定定時(shí)器計(jì)數(shù)的速度。
定時(shí)器可以配置為在特定事件(如溢出或匹配特定值)上觸發(fā)中斷。這使得它能夠周期性地執(zhí)行代碼片段,例如讀取傳感器數(shù)據(jù)或刷新顯示。
定時(shí)器的主要組件:
- 計(jì)數(shù)器:定時(shí)器的核心部分,可以配置向上/向下 計(jì)數(shù)。
- 預(yù)分頻器:分頻定時(shí)器的輸入時(shí)鐘改變計(jì)數(shù)器的計(jì)數(shù)速率。如果時(shí)鐘速度是72MHz,并使用預(yù)分頻值為7199,那么計(jì)數(shù)器的計(jì)數(shù)速度將是10kHz。(72MHz / 7199)
- 自動(dòng)重載寄存器(ARR, Auto-reload register):定義了計(jì)數(shù)器重置的值。
二、cubeMX 配置
-
選擇芯片。
-
配置仿真。
-
配置時(shí)鐘,選擇 HSE, 高速時(shí)鐘。
-
配置時(shí)鐘樹。選擇最大 72 MHZ, 然后雙擊 enter 即可。系統(tǒng)會(huì)自動(dòng)配置最合適的時(shí)鐘。
-
設(shè)置工程名,路徑和工具鏈。
-
自動(dòng)生成 .c / .h 文件。
-
將 led 引腳設(shè)置輸出。
-
讓 led 引腳默認(rèn)輸出高電平。因?yàn)?根據(jù)實(shí)際電路當(dāng)引腳是低電平時(shí),led 點(diǎn)亮。
-
這里我使用 定時(shí)器2 , 并使用 內(nèi)部時(shí)鐘源。
-
使能定時(shí)器中斷。
-
設(shè)置 定時(shí)器參數(shù)(分頻系數(shù),向上計(jì)數(shù),自動(dòng)重裝載值)。
-
創(chuàng)建工程。
三、定時(shí)時(shí)長(zhǎng)
定時(shí)時(shí)長(zhǎng) = (計(jì)數(shù)器自動(dòng)重載值 + 1 )*( 分頻系數(shù) + 1 )/ 定時(shí)器時(shí)鐘頻率
(為什么重裝載值和分頻系數(shù)不置為整數(shù)? 原因:精越定時(shí))
這里 我想要設(shè)置 定時(shí)時(shí)長(zhǎng)為 1ms ,那么首先設(shè)置相關(guān)參數(shù):
- 定時(shí)器時(shí)鐘頻率 : 72 MHZ。
- 分頻系數(shù) (PSC): 選擇 72 分頻。
- 計(jì)數(shù)器自動(dòng)重載值(ARR):可控制定時(shí)器的定時(shí)時(shí)間,改變定時(shí)時(shí)長(zhǎng)。
因?yàn)?分頻系數(shù) / 定時(shí)器時(shí)鐘頻率 = 計(jì)數(shù)器的計(jì)數(shù)速率
, 所以 72 / 72MHZ = 1us 。則每 1 us 計(jì)數(shù)一次。當(dāng)計(jì)數(shù)到 1000 (ARR) 時(shí), 發(fā)生定時(shí)器的溢出中斷. 即 ARR 從 0 增加到 1000 ,每 1 us 增加一次,則 定時(shí)時(shí)長(zhǎng)為 1000 * 1 us = 1 ms .
四、自動(dòng)生成代碼講解
自動(dòng)生成的 定時(shí)器的代碼在 tim.c 文件中。
- 首先還是 先定義一個(gè) 定時(shí)器對(duì)象,這是一個(gè)結(jié)構(gòu)體。
- 初始化這個(gè)結(jié)構(gòu)體中的相關(guān)參數(shù)。
- 調(diào)用
HAL_TIM_Base_Init(&htim2)
對(duì)其初始化。 - 之后自動(dòng)調(diào)轉(zhuǎn)到
HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
執(zhí)行。
5.__HAL_RCC_TIM2_CLK_ENABLE( )
; 開啟定時(shí)器 2 -
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
設(shè)置優(yōu)先級(jí)HAL_NVIC_EnableIRQ(TIM2_IRQn);
使能中斷
五、實(shí)驗(yàn)程序
開啟定時(shí)器中斷:
HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
定時(shí)器中斷回調(diào)函數(shù):
/* 發(fā)生定時(shí)器中斷后調(diào)用定時(shí)器中斷回調(diào)函數(shù) */
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
定時(shí)器控制 led 閃爍:文章來源:http://www.zghlxwxcb.cn/news/detail-721906.html
static int i=0;
/* 根據(jù)cubeMX 配置的參數(shù)確定多久觸發(fā)定時(shí)器中斷,這里 是每 1 ms 觸發(fā)一次中斷即調(diào)用該函數(shù) */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim2)
{
if(++i == 1000) // 當(dāng) i 加到 1000 時(shí),則時(shí)間到達(dá) 1 s, 翻轉(zhuǎn) led 電平
{
i=0;
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_4);
}
}
}
總結(jié)
下篇文章為大家介紹 串口 的相關(guān)知識(shí)。文章來源地址http://www.zghlxwxcb.cn/news/detail-721906.html
到了這里,關(guān)于最詳細(xì)STM32,cubeMX 定時(shí)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!