資料介紹
首先熟悉一下定時器的PWM相關(guān)部分。看圖最明白:其實PWM就是定時器的一個比較功能而已。CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產(chǎn)生相應(yīng)的動作。這點和AVR單片機很類似。既然這樣,我們要產(chǎn)生需要的PWM信號,就需要設(shè)定PWM的頻率和PWM的占空比。首先說頻率的確定。由于通用定時器的時鐘來源是PCLK1,而我又喜歡用固件庫的默認設(shè)置,那么定時器的時鐘頻率就這樣來確定了,如下:AHB(72MHz)→APB1分頻器(默認2)→APB1時鐘信號(36MHz)→倍頻器(*2倍)→通用定時器時鐘信號(72MHz)。這里為什么是這樣,在RCC模塊學習記錄里有詳細記載,不多說。因此圖中的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正好互補,互為相反,所以在運用起來差別也并不太大。我用的是模式一,因此后面的設(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寄存器的值時就會自動清零,當然前提是設(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輸出口要配置為復用推挽輸出,原因我也不知道,反正照搬就是了。下面是TIM配置函數(shù),注釋很清楚了,不作說明:void tim2_cfg(){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_DeInit(TIM2);TIM_InternalClockConfig(TIM2);//預分頻系數(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預裝載緩沖器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的一個取值,當把此結(jié)構(gòu)體填充完后,還要映射到某個定時器,用TIM_OCXInit函數(shù)實現(xiàn),我用了一個X,說明不止一個這樣的函數(shù),事實上,stm32的通用定時器都有四個通道,每個通道對應(yīng)一個初始化函數(shù),這里真夠糾結(jié)的!最后還要使能該定時器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數(shù)要注意,是outputs而不是output,說明TIM2不止一個通道嘛!夠復雜,夠繁瑣的!下面是輸出比較單元的結(jié)構(gòu)體原型:typedef struct{uint16_t TIM_OCMode;uint16_t TIM_OutputState;uint16_t TIM_OutputNState;uint16_t TIM_Pulse;
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32單片機PWM輸出學習
- 單片機軟件模擬PWM調(diào)光程序下載 62次下載
- 基于STM32單片機的小車PWM調(diào)速系統(tǒng) 40次下載
- STM32單片機網(wǎng)絡(luò)遠程升級固件的源碼下載 70次下載
- STM32單片機與linux系統(tǒng)單片機串行通信資料下載
- 實現(xiàn)STC單片機PWM輸出的程序免費下載 81次下載
- 使用STM32F103RB單片機實現(xiàn)PWM呼吸燈實驗的資料免費下載 7次下載
- 單片機的PWM控制技術(shù)學習課件免費下載 29次下載
- 使用STM32F1單片機實現(xiàn)PWM輸出的源代碼和工程文件免費下載 32次下載
- 使用51單片機輸出PWM波形的程序免費下載
- 使用單片機PWM實現(xiàn)電壓輸出的程序免費下載
- 51單片機中斷的簡單學習資料免費下載
- 51單片機的入門學習資料免費下載
- 如何使用51單片機通過定時器模擬輸出多路PWM程序免費下載
- 51單片機的PWM程序資料免費下載 74次下載
- 單片機的輸出比較是小思考 396次閱讀
- 詳解STM32單片機和51單片機的區(qū)別 3.7w次閱讀
- 普通單片機與STM32單片機中堆棧的區(qū)別 3032次閱讀
- STM32單片機寄存器的功能解析 5185次閱讀
- 51單片機實現(xiàn)PWM輸出功能的兩種方法解析 2.1w次閱讀
- MCS-51系列單片機實現(xiàn)PWM輸出功能的方法解析 1868次閱讀
- 如何學習STC單片機詳細STC單片機資料說明 1.1w次閱讀
- 如何采用STM32單片機來產(chǎn)生PWM輸出 2.1w次閱讀
- 淺談STM32單片機命名規(guī)則和體系架構(gòu) 1.1w次閱讀
- 新手學習單片機的首選:51單片機 8536次閱讀
- STM32單片機--PWM輸出 1.3w次閱讀
- 詳細圖文剖析STM32單片機串口一鍵下載電路與操作方法 4.6w次閱讀
- 詳細的STM32單片機學習筆記 1.4w次閱讀
- 單片機初學者必看:這些單片機學習心得要牢記 1.4w次閱讀
- 主流32位單片機攻略連載:為什么要學STM32? 7.9w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多