STM32 TIM2通道重映射 PWM 無輸出波形
使用TIM2輸出PWM來驅(qū)動舵機轉(zhuǎn)動,使用TIM2CH3 (PB11引腳)輸出驅(qū)動波形,通過數(shù)據(jù)手冊知道,PB10默認(rèn)的復(fù)用功能為USART3_TX,可以通過重映射作為TIM2_CH3用。
TIM2_CH3按照如下步驟配置為PWM輸出模式:
1、配置時鐘、管腳模式
開啟GPIOB、TIM2、AFIO時鐘,配置PB10為復(fù)用功能推挽輸出模式。
//TIM2_CH3管腳重映射
GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE); //PB10 TIM2_CH3
2、配置TIM2相關(guān)參數(shù)
//配置定時器時鐘分頻、定時周期
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
//配置CH3比較輸出模式、PWM脈寬
TIM_OC3Init(TIM2,&TIM_OCInitStructure); //PB3PWM輸出
//比較輸出預(yù)裝載使能
TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
//定時器自裝載使能
TIM_ARRPreloadConfig(TIM2, ENABLE);
//開中斷
TIM_ITConfig(TIM2, TIM_IT_CC3, ENABLE );
//使能定時器
TIM_Cmd(TIM2, ENABLE);
//配置中斷優(yōu)先級
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
3、中斷服務(wù)程序
TIM_ClearITPendingBit(TIM2,TIM_IT_CC3);
TIM_SetCompare3(TIM2,Pulse_value); //改變PWM占空比
按照以上配置好后,編譯下載沒有看到期望的波形,但先前按照此步驟寫的一個測試程序就能夠正常輸出波形。非常郁悶,比較兩套程序,配置步驟一樣,運行時各個寄存器的配置也完全一樣,但是后來寫的程序就是沒有波形。找了一整天的問題,也沒有發(fā)現(xiàn)問題的原因,下班后無意看到一篇文章的一句話,
STM32 某些通道PWM無法輸出波形解決
如果同時開啟默認(rèn)的復(fù)用功能(USART3_TX)和重映射后的復(fù)用功能(TIM2_CH3)的時鐘,外設(shè)功能會產(chǎn)生沖突,造成工作異常的情況。
檢查工程中與USART3時鐘初始化的代碼,發(fā)現(xiàn)如下語句,
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2|RCC_APB1Periph_USART3, ENABLE);
刪除后,編譯、下載,波形輸出終于出來了。