STM32Cubev6 TIM 定時器中斷
工作環(huán)境:
STM32CubeMXv6
Keil5
????因為定時器和時鐘有關(guān),所以我們需要先配置時鐘,打開左側(cè)的下拉框System Core,點擊RCC選項;

????我選用的是8M的外部高速時鐘(以實際情況為準),在下方的配置框中更改High Speed Clock(HSE)為Crystal/Ceramic Resonator;

????配置HSE為8Mhz,APB1為54Mhz;

? ? 因為我需要配置一個1ms觸發(fā)一次的定時器中斷,我們先通過芯片對應(yīng)的datasheet查到TIM6是在APB1上的,我們通過RCC配置它為54Mhz(最高),根據(jù)公式
Tout = (PSC+1)* (ARR+1)/Tclk
得到預(yù)分頻值為0(實際填入需要-1),自動重載值為54000-1=53999,允許自動重載;

????對應(yīng)datasheet的查找方法


?再打開左側(cè)的下拉框System,點擊NVIC選項;

????可以在Priority Group中選擇中斷優(yōu)先級組;

? ? 勾選TIM6 global interrupt,DAC1 and DAC2 underrun error interrupts開啟中斷;

設(shè)置完成后
點擊Project Manager頁面,輸入工程名和工程位置,選擇工具鏈和IDE為MDK-ARM,版本為5.27;

打開左側(cè)Code Generater菜單勾選Generate peripheral initialization as a pair of'.c/.h'file per peripheral;?

????最后點擊右上角的GENERATE CODE按鈕后生成代碼。
????生成代碼后打開工程文件夾,用Keil5打開工程。

????編譯,為了使得我們的代碼盡可能解耦合,所以我們在工程文件夾中新建一個user_tim.c和對應(yīng)的user_tim.h文件,在這個.c文件中我們寫入以下函數(shù)
????在對應(yīng)頭文件user_uart.h中寫入以下內(nèi)容
????在主函數(shù)的開始include我們的user_uart.h
? ? 然后再在主循環(huán)里加入中斷標志位檢測
好了,現(xiàn)在我們就可以在main里用定時器中斷來完成業(yè)務(wù)了
參考資料:
STM32F7開發(fā)指南-HAL庫版本_V1.1
HAL庫教程8:通用定時器的使用? ? https://yatao.blog.csdn.net/article/details/89165205