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


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,待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM