STM32的通用定時器是一個通過可編程預分頻器(PSC)驅動的16 位自動裝載計數(shù)器(CNT)構成。STM32的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和PWM)等。 使用定時器預分頻器和RCC時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。 STM3的通用TIMx (TIM2、TIM3、TIM4和TIM5)定時器功能包括:
1)16位向上、向下、向上/向下自動裝載計數(shù)器(TIMx_CNT)。
2)16 位可編程(可以實時修改)預分頻器(TIMx_PSC),計數(shù)器時鐘頻率的分頻系數(shù)為1~65535之間的任意數(shù)值。
3)4個獨立通道(TIMx_CH1~4),這些通道可以用來作為:
A.輸入捕獲
B.輸出比較
C.PWM生成(邊緣或中間對齊模式)
D.單脈沖模式輸出
4)可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用1個定時器控制另外
一個定時器)的同步電路。
5)如下事件發(fā)生時產(chǎn)生中斷/DMA:
A.更新:計數(shù)器向上溢出/向下溢出,計數(shù)器初始化(通過軟件或者內部/外部觸發(fā))
B.觸發(fā)事件(計數(shù)器啟動、停止、初始化或者由內部/外部觸發(fā)計數(shù))
C.輸入捕獲
D.輸出比較
E.支持針對定位的增量(正交)編碼器和霍爾傳感器電路
F.觸發(fā)輸入作為外部時鐘或者按周期的電流管理
具體步驟如下:
1)TIM3時鐘使能:TIM3是掛載在APB1之下,所以我們通過APB1總線下的使能使能函數(shù)來使能TIM3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE)
2)初始化定時器參數(shù),設置自動重裝值,分頻系數(shù),計數(shù)方式等
voidTIM_TimeBaseInit(TIM_TypeDef*TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
3)設置TIM3_DIER允許更新中斷
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState)
4)TIM3中斷優(yōu)先級設置
5)允許TIM3工作,也就是使能TIM3
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)
6)編寫中斷服務函數(shù)

看下實例:實現(xiàn)功能,進入一次中斷,led燈亮滅交替一次
先看下timer.c文件

再看下中斷函數(shù)

最后看下主程序,還是比較簡單的
int main()
{
u8 t;
delay_init(72);
led_init();
timer_init(4999,7199);
while(1) ;
}
整個過程清晰明了,主要是進行定時器初始化及中斷初始化等設置,其他的通過我們以前的就很簡單
關鍵字:STM32 定時器中斷 PSC
引用地址:
STM32之八定時器中斷
推薦閱讀最新更新時間:2025-06-07 23:46
stm32 定時器中斷時間計算
分頻值是是指你將系統(tǒng)時鐘的頻率減小,假設時鐘頻率是72Mhz,然后分頻值是7199,現(xiàn)在你的定時器值就是10kHz,表示每計一個數(shù),然后過了1/(10^4)秒,然后你的重裝值就是你的時間了,如果值是9999,就表示定時時間為1s。 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_ClearITPendingBit(TIM3, TIM_IT_Update); TIM_T
[單片機]
【s3c2440】第五課:定時器中斷
s3c2440定時器簡介 OVERVIEW ~ ~~~~~~~~ The S3C2440A has five 16-bit timers. Timer 0, 1, 2, and 3 have Pulse Width Modulation (PWM) function. Timer 4 has an internal timer only with no output pins. The timer 0 has a dead-zone generator, which is used with a large current device. ~ ~~~~~~~~ The timer 0 and 1
[單片機]
MSP430G2553 定時器中斷實例
代碼 #include MSP430G2553.h void led_init(); void timer0_init(); void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //--配置時鐘----- BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ; //--LED初始化---- led_init(); //--定時器0初始化---- timer0_init(); //---開中斷------ _EINT();
[單片機]
PIC16F877定時器0的中斷方式調試
PIC16F877單片機定時器0的中斷方式調試程序 #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); void init(void); uint intnum; void main(void) { init(); while(1) { if(intnum = 20)//1S到時 { intnum = 0; RD0 = !RD0; } } } void init(void) { TRISD = 0; //PORTD引腳為輸出 PORTD = 0; //POR
[單片機]
STM32 虛擬U盤
使用 SRAM 進行簡單測試 Cubemx 設置 USB_OTG_FS 為 Device_Only, USB_DEVICE 設置 Class For FS IP 為 Mass Storage Class, 里面詳細配置使用默認參數(shù)即可. 到 Project Manager 設置棧大小稍微大些, 因為 USB 協(xié)議的函數(shù)調用和局部變量較多, 比如設置成 0x10000. 在 usbd_storage_if.c 中添加如下代碼, 使用 SRAM 作為存儲: #define STORAGE_LUN_NBR 1 #define STORAGE_BLK_NBR 200 /* 內存容量一般來
[單片機]
STM32學習筆記(三)Register Map
本節(jié)與 微處理器原理與應用 課程內容類似 系統(tǒng)架構 CM3內核 基于CM3的MCU Cortex-M3采用了哈佛結構,擁有獨立的指令總線和數(shù)據(jù)總線,可以讓取指與數(shù)據(jù)訪問并行不悖。但是另一方面,指令總線和數(shù)據(jù)總線共享同一個存儲器空間(一個統(tǒng)一的存儲器系統(tǒng)),可尋址空間為 4GB。 Cortex-M3三級流水線 Cortex-M3處理器使用一個3級流水線。流水線的3個級分別是:取指,解碼和執(zhí)行。 STM32系統(tǒng)架構 系統(tǒng)架構圖 閃存存儲器接口 --- FLITF(The Flash memory interface):ICode與Flash的接口。 閃存 --- Flash:系統(tǒng)掉電后也能正常保存,用于存放靜止態(tài)的程序
[單片機]
Arduino IDE下用STM32點亮OLED屏幕
自從在Arduino IDE 下跑通了STM32的閃燈程序之后 (https://www.jianshu.com/p/8a8d4cba910f),點亮OLED屏幕應該也是小CASE,遺憾的是還是折騰了好幾個小時,最終才搞定。 用的STM32F401CxUx芯片,OLED是SSD1306芯片的128x32點陣屏幕 oled_ssd1306.JPG STM32F401.JPG 首先在Arduino IDE下載Wire庫和SSD1306Ascii庫。 SSD1306ASCII_LIB.jpg 代碼如下: // Simple I2C test for ebay 128x32 oled. #include Wire.h
[單片機]
如何在 VScode 創(chuàng)建 stm32 項目?
一、參考來源 VSCode開發(fā)STM32快速搭建開發(fā)環(huán)境零基礎教程!嗶哩嗶哩bilibili 上面的鏈接是主要參考的來源。 二、工具鏈 本次使用的工作有 arm-none-eabi-gcc 來作為編譯器; pyocd 作為燒寫器; vscode 作為編輯器; vscode 的插件 cortex-debug 作為調試工具; STM32cubeMX 作為模板的生成; make 作為構建工具。 三、VScode 的相關插件 CC++ 插件:作為 C 語言的主要插件。 360截圖17700510535946.png Cortex-debug 插件:作為調試的插件。 360截圖177005105359406.png
[單片機]