stm32定時(shí)器簡(jiǎn)介
stm32的定時(shí)器資源還是相當(dāng)豐富的,連最基礎(chǔ)的stm32f103c8t6都有四個(gè)定時(shí)器,更高級(jí)的zet6,或者f4系列的有十幾個(gè)定時(shí)器,相比arduino來(lái)說(shuō)強(qiáng)大了太多,利用好了可以實(shí)現(xiàn)確定時(shí)間間隔的做某件事情,多個(gè)定時(shí)器中斷可以用來(lái)做多件事情,不使用延時(shí)也能夠?qū)⒊绦驅(qū)崿F(xiàn),而且更快,更靈敏。
STM32F103C8T6 - Black Pill 定時(shí)器資源
STM32F103C8T6 - Black Pill
定時(shí)器資源概覽

定時(shí)器
stm32f103c8t6一共有四個(gè)定時(shí)器,每個(gè)定時(shí)器都可以用來(lái)作為定時(shí)器中斷模式,也可以以將定時(shí)器配置成PWM輸出模式,一個(gè)定時(shí)器可以同時(shí)輸出四路不同的PWM波
cubemx中配置定時(shí)器中斷
選擇芯片過(guò)程不再贅述
RCC: HSE高速總線始終改為外部晶振
在這里插入圖片描述
SYS: DEBUG選擇 SW模式
在這里插入圖片描述
TIMER: Clock Source 選擇 internal Clock 內(nèi)部時(shí)鐘源
加粗樣式
Parameter Settings: 配置分頻72分頻,因?yàn)橹黝l為72MHZ,這樣分了之后定時(shí)器的工作頻率就是1MHZ,計(jì)數(shù)模式向上計(jì)數(shù),計(jì)數(shù)次數(shù)為 1000 ,這里的意思就是 定時(shí)器1MHZ的頻率工作,工作1000個(gè)周期觸發(fā)一次中斷,這樣 定時(shí)器中斷的頻率應(yīng)該為 1000HZ,也就是1/1000 s = 1ms觸發(fā)一次
定時(shí)器分頻設(shè)置
時(shí)鐘樹(shù)配置
時(shí)鐘樹(shù)
工程配置 IDE選擇 MDK V5
project
第一欄里選擇復(fù)制必要的庫(kù)文件 第二欄里勾選將文件分為.c和.h
codegen
最后點(diǎn)擊生成文件
注意 !
工程路徑絕對(duì)不能有中文名,否則會(huì)報(bào)錯(cuò),無(wú)法復(fù)制stm32的庫(kù)文件到你的工程
keil中添加處理函數(shù)
打開(kāi)生成的文件,在main.c中初始化的時(shí)候開(kāi)啟中斷
HAL_TIM_Base_Start_IT(&htim1); //開(kāi)啟定時(shí)器
在下面,或者自己創(chuàng)建一個(gè).c文件 include tim.h ,調(diào)用下面的回調(diào)函數(shù),這個(gè)是hal庫(kù)公用定時(shí)器中斷回調(diào)函數(shù),定時(shí)器1會(huì)在這里面以1ms一次的頻率循環(huán)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM1)
{
//編寫(xiě)用戶函數(shù),1ms執(zhí)行一次
}
}
如果要停用定時(shí)器則使用這個(gè)函數(shù)
HAL_TIM_Base_Stop_IT(&htim1); //停止定時(shí)器
定時(shí)器中斷里面的函數(shù)絕對(duì)不要有延時(shí),時(shí)間控制可以使用累加器來(lái)做比如說(shuō)下面這樣,循環(huán)體里的函數(shù)時(shí)間為1s一次
int counter = 0 ;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&htim1))
{
counter++;
if(counter == 1000)
{
counter = 0;
//這里的循環(huán)頻率為1S
}
}
}