定時器分為普通定時器和高級定時器。STM32和GD32都有TIMERX_CHX_ON或者TIMERX_CHXN,這種定時器是一種互補定時器,我們同樣可以看到還存在與其名字很像的TIMERX_CHX,TIMERX_CHX,這些都是基本的定時器,按照基本的配置即可產生PWM信號,這里不做介紹 。
下面主要說一下利用互補通道產生PWM信號。
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定時器3時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外設和AFIO復用功能模塊時鐘
TIM_DeInit(TIM1);
TIM_InternalClockConfig(TIM1);
// GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->PB5
//設置該引腳為復用輸出功能,輸出TIM1 的PWM脈沖波形 GPIOB.13
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
//初始化TIM1 Channel2 PWM模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1 ; //選擇定時器模式:TIM脈沖寬度調制模式2
// TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //輸出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; //互補輸出極性
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互補輸出使能
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; //死區后輸出狀態
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set; //死區后互補輸出狀態
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM1 OC2
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR2上的預裝載寄存器
TIM_OC2Init(TIM1, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM1 OC2
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR2上的預裝載寄存器
TIM_OC3Init(TIM1, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM1 OC2
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); //使能TIM1在CCR2上的預裝載寄存器
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; //自動輸出使能
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; //剎車功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_Break_Disable; //剎車輸入極性
TIM_BDTRInitStructure.TIM_DeadTime = 36; //死區時間設置
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF; //鎖定設置
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; //空閑模式下輸出選擇
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; //運行模式下按輸出選擇
TIM_CtrlPWMOutputs(TIM1,ENABLE); //輸出使能必須要有
TIM_Cmd(TIM1, ENABLE); //使能TIM3
}
接下來就是調用硬件驅動接口即可完成對PWM信號的產生與驅動。
如下:
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延時函數初始化
TIM1_PWM_Init(899,0); //不分頻。PWM頻率=72000000/900=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM1,led0pwmval);
}
}
l利用keil測試debug。
魔術棒配置軟件模擬程序運行仿真步驟PB13引腳設置
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2270文章
10900瀏覽量
356046 -
定時器
+關注
關注
23文章
3248瀏覽量
114818 -
PWM信號
+關注
關注
3文章
95瀏覽量
20150
發布評論請先 登錄
相關推薦
STM32CubeIDE下配置STM32F103輸出帶死區的互補PWM波
STM32F103的TIM1和TIM8是高級定時器,可以產生嵌入死區時間的互補PWM波,使用STM32CubeIDE完成相關配置,可以直接生
采用STM32F030K6T6作互補PWM輸出時,互補通道沒有波形輸出是為什么?
各路大神指教,采用STM32F030K6T6作互補PWM輸出時,配置什么的都檢查了基本沒問題,但是只有主通道有輸出,互補
發表于 04-22 07:50
STM32F030K6T6作互補PWM輸出時互補通道沒有波形輸出
各路大神指教,采用STM32F030K6T6作互補PWM輸出時,配置什么的都檢查了基本沒問題,但是只有主通道有輸出,互補
發表于 04-18 07:57
STM32F407高級定時器PWM兩通道互補輸出有何功能
這里寫自定義目錄標題STM32F407高級定時器PWM兩通道互補輸出,帶死區和剎車功能程序代碼,實測有效:STM32F407高級定時器
發表于 01-20 06:18
基于NiosII的多通道PWM信號測量產生器節點設計
針對于列車控制系統半實物仿真平臺測速測距模塊的多通道PWM 信號測量/產生的要求,提出了一種利用NiosII 軟核處理器替代通訊用MCU 的
發表于 11-30 15:46
?13次下載
STM32 TIM 多通道互補PWM波形輸出配置快速入門
platform:stm32f103cb前言在做三相逆變的時候,需要軟件生成SVPWM波形,具體的算法需要產生三對互補的PWM,這樣可以驅動六個開關元件,
發表于 12-07 18:36
?24次下載
評論