|
STM32有多個定時器可供使用,且有多種使用方式,包括普通定時、PWM輸出、輸入捕獲、觸發(fā)ADC等。本篇文章主要介紹普通定時中斷的使用。前期準(zhǔn)備: STM32硬件電路板及仿真器(以STM32F072C8單片機為例) Keil v5以上版本(MDK-ARM)
首先新建工程后,配置系統(tǒng)時鐘為48MHz(參考上一篇GPIO使用中的配置步驟)。以TIM1為例,使能TIM1的時鐘源為Internal Clock(即48MHz系統(tǒng)時鐘),設(shè)置定時器的周期、分頻系數(shù)等。假設(shè)定時周期為100ms,則設(shè)置參數(shù)如下圖。
nthuqd2gflp64048946639.jpg (195.24 KB, 下載次數(shù): 1)
下載附件
保存到相冊
nthuqd2gflp64048946639.jpg
2024-10-5 23:00 上傳
其中:預(yù)分頻值,取值范圍為0~65535。計數(shù)模式可以是 向上計數(shù)、向下計數(shù)、中間對齊計數(shù)等。
計數(shù)周期,對于16位定時器,取值范圍為0~65535。時鐘分頻因子, 可以選擇不分頻、二分頻或四分頻。 重復(fù)計數(shù)次數(shù),表示定時器計數(shù)值達到計數(shù)周期n次后才產(chǎn)生中斷。自動重裝,設(shè)置為Enable或Disable。觸發(fā)輸出部分本節(jié)用不到,暫不做說明。定時(溢出)周期 = (預(yù)分頻值+1)*(計數(shù)周期+1)*分頻因子*(重復(fù)計數(shù)次數(shù)+1) / 系統(tǒng)時鐘48MHz,單位為秒。
上圖中(999+1)*(4799+1)*1*1 / 48MHz = 0.1秒,即100ms。定時器設(shè)置完成后,需要在NVIC Setting中打開定時器的溢出中斷,TIM1作為高級定時器,其捕獲比較中斷(capture compare interrupt)和其它中斷是獨立的,而其它的普通定時器只有統(tǒng)一的一個中斷源。這里只用到了溢出(update)中斷,所以只打開溢出中斷即可。
1uzrcnkoqq464048946739.png (20.16 KB, 下載次數(shù): 0)
下載附件
保存到相冊
1uzrcnkoqq464048946739.png
2024-10-5 23:00 上傳
設(shè)置完成后點擊 Generate Code生成代碼。
可以看到定時器的初始化已經(jīng)完成,但是此時中斷還沒有打開,需要自己添加代碼啟動定時器打開中斷。
3no10aozphc64048946840.png (19.88 KB, 下載次數(shù): 1)
下載附件
保存到相冊
3no10aozphc64048946840.png
2024-10-5 23:00 上傳
同時,需要自己編寫中斷回調(diào)函數(shù),假設(shè)程序功能是定時100ms時間到后翻轉(zhuǎn)LED端口,則代碼如下。
41ysk0t4miw64048946940.png (17.79 KB, 下載次數(shù): 0)
下載附件
保存到相冊
41ysk0t4miw64048946940.png
2024-10-5 23:00 上傳
編譯程序后下載到電路板,可以看到相應(yīng)的LED燈按照設(shè)定的周期開始閃爍。定時器的作普通定時用,使用較簡單,后面將介紹PWM模式、輸入捕獲比較、編碼器模式等的使用。 |
|