資料介紹
首先熟悉一下定時器的PWM相關(guān)部分??磮D最明白:其實PWM就是定時器的一個比較功能而已。CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產(chǎn)生相應(yīng)的動作。這點和AVR單片機(jī)很類似。既然這樣,我們要產(chǎn)生需要的PWM信號,就需要設(shè)定PWM的頻率和PWM的占空比。首先說頻率的確定。由于通用定時器的時鐘來源是PCLK1,而我又喜歡用固件庫的默認(rèn)設(shè)置,那么定時器的時鐘頻率就這樣來確定了,如下:AHB(72MHz)→APB1分頻器(默認(rèn)2)→APB1時鐘信號(36MHz)→倍頻器(*2倍)→通用定時器時鐘信號(72MHz)。這里為什么是這樣,在RCC模塊學(xué)習(xí)記錄里有詳細(xì)記載,不多說。因此圖中的CK_PSC就是72MHz了。下面的資料也是網(wǎng)上一搜一大把,我就羅列了:STM32的PWM輸出有兩種模式,模式1(PWM1)和模式2(PWM2),由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區(qū)別如下:110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNT=TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。111:PWM模式2-在向上計數(shù)時,一旦TIMx_CNT=TIMx_CCR1時通道1為有效電平,否則為無效電平。由此看來,模式1和模式2正好互補(bǔ),互為相反,所以在運(yùn)用起來差別也并不太大。我用的是模式一,因此后面的設(shè)定都是按照模式一來設(shè)定的。PWM的周期是就是由定時器的自動重裝值和CNT計數(shù)頻率決定的。而CNT的計數(shù)時鐘是CK_PSC經(jīng)分頻器PSC得到,因此CNT的時鐘就是CK_PSC/分頻系數(shù)。這個分頻系數(shù)在TIM_TimeBaseStructure.TIM_Prescaler確定。成都網(wǎng)站設(shè)計我設(shè)置的值是72,因此CNT的計數(shù)頻率也就是CK_CNT的頻率為1MHz。下一步就是確定定時器自動重裝值。因為CNT每自加到ARR寄存器的值時就會自動清零,當(dāng)然前提是設(shè)定為為向上計數(shù)模式,而就是根據(jù)這個溢出事件來改變PWM的周期。所以PWM信號的頻率由ARR的值來確定。我設(shè)置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。接下來就要確定PWM的占空比了。因為CNT在自加到ARR值的過程中會不斷和CRRX的值相比較,一旦二者相等就產(chǎn)生匹配事件,但要注意CNT不會理會這件事,它會繼續(xù)++直到等于ARR。而CRRX的值我設(shè)定為400-1,那么占空比就隨之確定為40%。好了,下面就是庫函數(shù)的配置了。TIMER輸出PWM實現(xiàn)步驟1.設(shè)置RCC時鐘;2.設(shè)置GPIO;3.設(shè)置TIMx定時器的相關(guān)寄存器;4.設(shè)置TIMx定時器的PWM相關(guān)寄存器。首先是main函數(shù)和全局變量申明,很簡單,不作說明GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TimOCInitStructure;int main(void){rcc_cfg();gpio_cfg();tim2_cfg();pwm_cfg();//while (1){GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_SET);delay();GPIO_WriteBit(GPIOA, GPIO_Pin_8, Bit_RESET);delay();}}下面是IO口的配置:void gpio_cfg(){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);}此處要注意的是PWM輸出口要配置為復(fù)用推挽輸出,原因我也不知道,反正照搬就是了。下面是TIM配置函數(shù),注釋很清楚了,不作說明:void tim2_cfg(){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_DeInit(TIM2);TIM_InternalClockConfig(TIM2);//預(yù)分頻系數(shù)為72,這樣計數(shù)器時鐘為72MHz/72 = 1MHzTIM_TimeBaseStructure.TIM_Prescaler = 72;//設(shè)置時鐘分割TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置計數(shù)器模式為向上計數(shù)模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置計數(shù)溢出大小,每計1000個數(shù)就產(chǎn)生一個更新事件TIM_TimeBaseStructure.TIM_Period = 1000-1;//將配置應(yīng)用到TIM2中TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//禁止ARR預(yù)裝載緩沖器TIM_ARRPreloadConfig(TIM2, DISABLE);TIM_Cmd(TIM2, ENABLE);//使能TIMx外設(shè)}接下來是關(guān)鍵的PWM的配置函數(shù):void pwm_cfg(){//設(shè)置缺省值TIM_OCStructInit(&TimOCInitStructure);//PWM模式1輸出TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//設(shè)置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100%TimOCInitStructure.TIM_Pulse = 400-1;//TIM輸出比較極性高TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//使能輸出狀態(tài)TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM2的CH2輸出TIM_OC2Init(TIM2, &TimOCInitStructure);//設(shè)置TIM2的PWM輸出為使能TIM_CtrlPWMOutputs(TIM2,ENABLE);}stm32固件庫的輸出比較單元結(jié)構(gòu)體與定時器的時基單元是分開定義的,而PWM模式只是輸出比較結(jié)構(gòu)體成員TimOCInitStructure.TIM_OCMode的一個取值,當(dāng)把此結(jié)構(gòu)體填充完后,還要映射到某個定時器,用TIM_OCXInit函數(shù)實現(xiàn),我用了一個X,說明不止一個這樣的函數(shù),事實上,stm32的通用定時器都有四個通道,每個通道對應(yīng)一個初始化函數(shù),這里真夠糾結(jié)的!最后還要使能該定時器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數(shù)要注意,是outputs而不是output,說明TIM2不止一個通道嘛!夠復(fù)雜,夠繁瑣的!下面是輸出比較單元的結(jié)構(gòu)體原型:typedef struct{uint16_t TIM_OCMode;uint16_t TIM_OutputState;uint16_t TIM_OutputNState;uint16_t TIM_Pulse;
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32單片機(jī)PWM輸出學(xué)習(xí)
- 基于STM32單片機(jī)的小車PWM調(diào)速系統(tǒng) 40次下載
- STM32單片機(jī)網(wǎng)絡(luò)遠(yuǎn)程升級固件的源碼下載 77次下載
- STM32單片機(jī)與linux系統(tǒng)單片機(jī)串行通信資料下載
- 實現(xiàn)STC單片機(jī)PWM輸出的程序免費下載 90次下載
- 使用STM32F103RB單片機(jī)實現(xiàn)PWM呼吸燈實驗的資料免費下載 8次下載
- 單片機(jī)的PWM控制技術(shù)學(xué)習(xí)課件免費下載 29次下載
- 使用STM32F1單片機(jī)實現(xiàn)PWM輸出的源代碼和工程文件免費下載 32次下載
- 使用51單片機(jī)輸出PWM波形的程序免費下載
- 使用單片機(jī)PWM實現(xiàn)電壓輸出的程序免費下載
- 51單片機(jī)中斷的簡單學(xué)習(xí)資料免費下載
- 51單片機(jī)的入門學(xué)習(xí)資料免費下載
- 51單片機(jī)和STM32單片機(jī)有哪些區(qū)別
- 如何使用51單片機(jī)通過定時器模擬輸出多路PWM程序免費下載
- 51單片機(jī)的PWM程序資料免費下載 75次下載
- 單片機(jī)的輸出比較是小思考 1.1k次閱讀
- 詳解STM32單片機(jī)和51單片機(jī)的區(qū)別 4w次閱讀
- 普通單片機(jī)與STM32單片機(jī)中堆棧的區(qū)別 3.8k次閱讀
- STM32單片機(jī)寄存器的功能解析 6.3k次閱讀
- 51單片機(jī)實現(xiàn)PWM輸出功能的兩種方法解析 2.3w次閱讀
- MCS-51系列單片機(jī)實現(xiàn)PWM輸出功能的方法解析 2.4k次閱讀
- 如何學(xué)習(xí)STC單片機(jī)詳細(xì)STC單片機(jī)資料說明 1.3w次閱讀
- 如何采用STM32單片機(jī)來產(chǎn)生PWM輸出 2.3w次閱讀
- 淺談STM32單片機(jī)命名規(guī)則和體系架構(gòu) 1.3w次閱讀
- 新手學(xué)習(xí)單片機(jī)的首選:51單片機(jī) 9.6k次閱讀
- STM32單片機(jī)--PWM輸出 1.5w次閱讀
- 詳細(xì)圖文剖析STM32單片機(jī)串口一鍵下載電路與操作方法 4.8w次閱讀
- 詳細(xì)的STM32單片機(jī)學(xué)習(xí)筆記 1.6w次閱讀
- 單片機(jī)初學(xué)者必看:這些單片機(jī)學(xué)習(xí)心得要牢記 1.5w次閱讀
- 主流32位單片機(jī)攻略連載:為什么要學(xué)STM32? 8.1w次閱讀
下載排行
本周
- 1MDD品牌三極管BC807數(shù)據(jù)手冊
- 3.00 MB | 次下載 | 免費
- 2MDD品牌三極管BC817數(shù)據(jù)手冊
- 2.51 MB | 次下載 | 免費
- 3MDD品牌三極管D882數(shù)據(jù)手冊
- 3.49 MB | 次下載 | 免費
- 4MDD品牌三極管MMBT2222A數(shù)據(jù)手冊
- 3.26 MB | 次下載 | 免費
- 5MDD品牌三極管MMBTA56數(shù)據(jù)手冊
- 3.09 MB | 次下載 | 免費
- 6MDD品牌三極管MMBTA92數(shù)據(jù)手冊
- 2.32 MB | 次下載 | 免費
- 7STM32G474 HRTIME PWM 丟波問題分析與解決
- 1.00 MB | 次下載 | 3 積分
- 8新能源電動汽車高壓線束的銅鋁連接解決方案
- 2.71 MB | 次下載 | 2 積分
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 3PC5502負(fù)載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 22次下載 | 免費
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論