日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32f051 TIM15、16、17 无法出PWM

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32f051 TIM15、16、17 无法出PWM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天調了一塊stm32f051,號稱有11個timers,其中有6個可以產生pwm波。由于項目需要一塊板子帶著5個步進電機,所以需要五個單獨的timer產生PWM,所以上手了這樣一塊板子,TIM2、TIM3和TIM14很輕松實現,結果TIM17怎么調也調不出來,我研究了半天包括網上的資料也很少,寫下來幫助后人踏過這個坑。

首先將TIM2的代碼貼在下面,我用PB10選擇的TIM2_CH3產生PWM1:

void PWM1_Init(int arr,int psc) { GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure ;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //ê1?ü?¨ê±?÷1ê±?óRCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //ê1?üGPIO?£?éê±?óGPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_2);//????PB103éμúèy1|?üòy??GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //TIM2_CH3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(GPIOB, &GPIO_InitStructure);//3?ê??ˉGPIO//3?ê??ˉTIM2TIM_TimeBaseStructure.TIM_Period = arr; //éè???ú??ò????üD?ê??t×°è????ˉμ?×??ˉ??×°????′??÷?ü?úμ??μTIM_TimeBaseStructure.TIM_Prescaler =psc; //éè??ó?à′×÷?aTIMxê±?ó?μ?ê3yêyμ??¤·??μ?μ TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éè??ê±?ó·???:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?òé???êy?£ê?TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //?ù?YTIM_TimeBaseInitStruct?D???¨μ?2?êy3?ê??ˉTIMxμ?ê±???ùêyμ¥??//3?ê??ˉTIM2 Channel PWM?£ê? TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //?????¨ê±?÷?£ê?:TIM??3??í?èμ÷???£ê?2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //±è??ê?3?ê1?üTIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //ê?3???D?:TIMê?3?±è????D???TIM_OCInitStructure.TIM_Pulse = (arr+1)/2; //éè??????±è?a50%TIM_OC3Init(TIM2, &TIM_OCInitStructure); //ê1?üTIM2?úCCR3é?μ??¤×°????′??÷TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); //ê1?üTIM2TIM_ARRPreloadConfig(TIM2, ENABLE);TIM_Cmd(TIM2, ENABLE); }好吧,從萬惡的MDK編輯器里復制過來,中文注釋不見了,再貼一張圖:


好的,我想這個TIM16依葫蘆畫瓢也應該很easy,我用PA6選擇的TIM16_CH1產生PWM編寫代碼如下:

坑爹的情況出現了,這玩意一直給我輸出一個高電平,壓根不是PWM。

我仔細檢查了N遍,debug了無數次,百思不得其解,后來研究了半天,找到了答案。

看下圖:

你沒有看錯,就這玩意有問題了。


咋一看,其實沒看出來什么。其實是TIM15、16、17這個三個定時器和TIM2等不一樣,

結構體 TIM_OCInitTypeDef TIM_OCInitStructure ;

里面有些默認沒有賦值的參數對TIM15、16、17的初始化會影響它產生PWM,所以代碼將結構體申明的時候直接給初始值就好,例如:

TIM_OCInitTypeDef TIM_OCInitStructure = { 0 };

自此完美解決TIM15、16、17無法產生PWM的情況。

總結

以上是生活随笔為你收集整理的stm32f051 TIM15、16、17 无法出PWM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。