我在定時器3的例程上面改,改了很久都沒改好,百度看別人說定時器1和定時器8需要額外的指令用于PWM輸出,今天下午硬件的人來要東西了,來不及研究了,于是網上找了個定時器8的4個通道全部可以輸出的例程記錄一下,已經經過本人試驗是OK的。
1.調用:
TIM8_PWM_Init(1439 ,0); //不分頻。PWM頻率=72000000/1440=50Khz
2.函數源碼:
//TIM8 PWM部分初始化 //PWM輸出初始化 //arr:自動重裝值 //psc:時鐘預分頻數 void TIM8_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //使能定時器3時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO外設和AFIO復用功能模塊時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM_CH2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO //初始化TIM8 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(TIM8, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位 //初始化TIM8 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //輸出極性:TIM輸出比較極性高 TIM_OC1Init(TIM8, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM8 OC2 TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable); //使能TIM8在CCR2上的預裝載寄存器 TIM_SetCompare1(TIM8,474); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //輸出極性:TIM輸出比較極性高 TIM_OC2Init(TIM8, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM8 OC2 TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable); //使能TIM8在CCR2上的預裝載寄存器 TIM_SetCompare2(TIM8,700); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //輸出極性:TIM輸出比較極性高 TIM_OC3Init(TIM8, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM8 OC2 TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable); //使能TIM8在CCR2上的預裝載寄存器 TIM_SetCompare3(TIM8,900); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能 TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //輸出極性:TIM輸出比較極性高 TIM_OC4Init(TIM8, &TIM_OCInitStructure); //根據T指定的參數初始化外設TIM8 OC2 TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable); //使能TIM8在CCR2上的預裝載寄存器 TIM_SetCompare4(TIM8,1200); TIM_Cmd(TIM8, ENABLE); //不使能TIM8 TIM_CtrlPWMOutputs(TIM8,ENABLE); }審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
PWM
+關注
關注
114文章
5195瀏覽量
214351 -
STM32
+關注
關注
2270文章
10915瀏覽量
356742 -
定時器
+關注
關注
23文章
3254瀏覽量
115069 -
函數
+關注
關注
3文章
4341瀏覽量
62799
原文標題:stm32的定時器8輸出PWM
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
STM32定時器詳解
結合起來使用的話可以實現非常豐富的功能,可以測量輸入信號的脈沖寬度,可以生產輸出波形。定時器生產 PWM 控制電機狀態是工業控制普遍方法,這方面知識非常有必要深入了解。STM32F4
發表于 08-18 06:17
STM32定時器配置、PWM輸出比較詳解、電機PWM輸出配置 精選資料分享
STM32定時器配置詳解STM32擁有三種定時器基本功能其通用定時器可以被用于:測量輸入信號的脈
發表于 08-19 06:47
STM32單片機如何通過定時器的控制輸出PWM
STM32F103ZET6里共有8個定時器,其中高級定時器有TIM1-TIM5、TIM8,共6個。 我這里
發表于 11-22 15:56
?8303次閱讀
嵌入式單片機基礎篇(九)之通用定時器(二)PWM輸出
,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬度的控制,輸出一個方波。(2)STM32 的定時器
發表于 11-22 17:51
?68次下載
STM32F103C8T6定時器TIM4通道1、2輸出PWM
STM32F103C8T6定時器TIM4通道1、2輸出PWM這美妙的波形,真好,我他喵的終于把你弄出來了。STM32F103C8T6使用
發表于 12-02 18:21
?72次下載
STM32定時器功能和用法詳解
的SysTick,看門狗定時器以后再詳細研究。今天主要是研究剩下的8個定時器。
其中TIM1和TIM8是能夠產生3對PWM互補
發表于 02-11 15:04
?29次下載
評論