標籤:輕鬆 c_str 計數 呼吸燈 cmd ocm output load clock
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——輸出比較方式