STM32使用TIM閃爍LED 輸出比較方式

2022-03-07 20:27:54 字數 2455 閱讀 2855

stm32定時器輸出比較器可以直接操作對應的gpio,在計數器值等於比較暫存器的值時,對應的gpio可以有以下四種動作

無動作啟用

取消啟用

翻轉啟用電平由輸出極性暫存器決定

將led置於定時器輸出比較對應的gpio上,對它的操作將非常方便,完全由硬體完成,不消耗cpu時間,無需中斷,每個定時器都對應有4個輸出比較,可以輕鬆實現4個led的流水燈效果

巨集定義部分如下

#define user_tim_psc        36000-1

#define user_tim_period 1000-1

#define user_tim_pulsea 0

#define user_tim_pulseb 500

#define user_tim tim2

#define user_tim_rcc rcc_apb1periph_tim2

#define user_tim_rcc_cmd rcc_apb1periphclockcmd

#define user_tim_gpio gpioa

#define user_tim_gpio_rcc rcc_apb2periph_gpioa

#define user_tim_pina gpio_pin_1

#define user_tim_pinb gpio_pin_0

定時器配置如下

tim_timebaseinittypedef tim_timebase_struct;

tim_ocinittypedef tim_oc_struct;

gpio_inittypedef gpio_struct;

gpio_rcc_cmd(user_tim_gpio_rcc, enable);

user_tim_rcc_cmd(user_tim_rcc, enable);

gpio_struct.gpio_mode =gpio_mode_af_pp;

gpio_struct.gpio_speed =gpio_speed_2mhz;

gpio_struct.gpio_pin = user_tim_pina |user_tim_pinb;

gpio_init(user_tim_gpio, &gpio_struct);

tim_timebasestructinit(&tim_timebase_struct);

tim_timebase_struct.tim_countermode =tim_countermode_up;

tim_timebase_struct.tim_prescaler =user_tim_psc;

tim_timebase_struct.tim_period =user_tim_period;

tim_timebase_struct.tim_clockdivision =tim_ckd_div1;

tim_timebaseinit(user_tim, &tim_timebase_struct);

tim_ocstructinit(&tim_oc_struct);

tim_oc_struct.tim_ocmode =tim_ocmode_active;

tim_oc_struct.tim_ocpolarity =tim_ocpolarity_low;

tim_oc_struct.tim_outputstate =tim_outputstate_enable;

tim_oc_struct.tim_pulse =user_tim_pulsea;

tim_oc2init(user_tim, &tim_oc_struct);

tim_oc_struct.tim_pulse =user_tim_pulseb;

tim_oc1init(user_tim, &tim_oc_struct);

tim_oc2preloadconfig(user_tim, tim_ocpreload_disable);

tim_oc1preloadconfig(user_tim, tim_ocpreload_disable);

tim_arrpreloadconfig(user_tim, enable);

tim_cmd(user_tim, enable);

本工程使用的野火mini開發板只有兩個led燈且都不在定時器的輸出比較對應gpio上,所以本工程使用了tim2的ch1和ch2實現兩個led的流水燈效果,一次流水完為1秒,通過杜邦線將輸出引到led,可以觀察到效果

定時器的輸出比較功能對gpio的啟用和取消啟用功能的應用場景不知道是怎樣的,因為只要第一次啟用或者取消啟用,後續它的狀態將保持,所以在這裡用於操作led是不方便的,但是確實可以觀察到明顯的一次流水效果。它們的功能有待後續發掘

在實現了單個led的閃爍,多個led的流水燈效果,還可以用定時器的pwm模式實現呼吸燈效果,玩轉led,待續

STM32使用TIM閃爍LED 中斷方式

最簡單的閃爍led的方式莫過於在主函式的while迴圈中使用短暫延時並不斷開啟和關斷led,此處不做討論 該簡單工程執行在野火mini開發板上,板上有兩顆led d4,d5 可以通過巨集定義的方式控制led開關 define led d4 on gpio resetbits led gpio,led...

STM32使用TIM閃爍LED PWM方式

這次實驗實現乙個呼吸燈的效果,led在第一秒內漸亮,在第二秒內漸暗,如此反覆 控制led的pwm波形階梯數為100,即2秒內pwm的占空比從0 到100 範圍內先遞增後遞減且遞增 遞減的幅度為1 在設計stm32時,將定時器時鐘7200分頻後得到的10k時鐘作為計數器時鐘,並且設定週期為100,這樣...

利用stm32定時器實現LED燈閃爍

本文採用晶元為stm32f103rc,定時器為systick。systick 系統定時器是屬於 cm3 核心中的乙個外設,內嵌在 nvic 中。系統定時器 是乙個 24bit 的向下遞減的計數器,計數器每計數一次的時間為 1 sysclk,一般我們設定系統時鐘 sysclk 等於 72m。當重裝載數...