資料介紹
首先熟悉一下定時器的PWM相關(guān)部分。看圖最明白:其實(shí)PWM就是定時器的一個比較功能而已。CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產(chǎn)生相應(yīng)的動作。這點(diǎn)和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-在向上計(jì)數(shù)時,一旦TIMx_CNT=TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。111:PWM模式2-在向上計(jì)數(shù)時,一旦TIMx_CNT=TIMx_CCR1時通道1為有效電平,否則為無效電平。由此看來,模式1和模式2正好互補(bǔ),互為相反,所以在運(yùn)用起來差別也并不太大。我用的是模式一,因此后面的設(shè)定都是按照模式一來設(shè)定的。PWM的周期是就是由定時器的自動重裝值和CNT計(jì)數(shù)頻率決定的。而CNT的計(jì)數(shù)時鐘是CK_PSC經(jīng)分頻器PSC得到,因此CNT的時鐘就是CK_PSC/分頻系數(shù)。這個分頻系數(shù)在TIM_TimeBaseStructure.TIM_Prescaler確定。成都網(wǎng)站設(shè)計(jì)我設(shè)置的值是72,因此CNT的計(jì)數(shù)頻率也就是CK_CNT的頻率為1MHz。下一步就是確定定時器自動重裝值。因?yàn)镃NT每自加到ARR寄存器的值時就會自動清零,當(dāng)然前提是設(shè)定為為向上計(jì)數(shù)模式,而就是根據(jù)這個溢出事件來改變PWM的周期。所以PWM信號的頻率由ARR的值來確定。我設(shè)置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。接下來就要確定PWM的占空比了。因?yàn)镃NT在自加到ARR值的過程中會不斷和CRRX的值相比較,一旦二者相等就產(chǎn)生匹配事件,但要注意CNT不會理會這件事,它會繼續(xù)++直到等于ARR。而CRRX的值我設(shè)定為400-1,那么占空比就隨之確定為40%。好了,下面就是庫函數(shù)的配置了。TIMER輸出PWM實(shí)現(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,這樣計(jì)數(shù)器時鐘為72MHz/72 = 1MHzTIM_TimeBaseStructure.TIM_Prescaler = 72;//設(shè)置時鐘分割TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//設(shè)置計(jì)數(shù)器模式為向上計(jì)數(shù)模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//設(shè)置計(jì)數(shù)溢出大小,每計(jì)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ù)實(shí)現(xiàn),我用了一個X,說明不止一個這樣的函數(shù),事實(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í)
- 單片機(jī)軟件模擬PWM調(diào)光程序下載 62次下載
- 基于STM32單片機(jī)的小車PWM調(diào)速系統(tǒng) 40次下載
- STM32單片機(jī)網(wǎng)絡(luò)遠(yuǎn)程升級固件的源碼下載 70次下載
- STM32單片機(jī)與linux系統(tǒng)單片機(jī)串行通信資料下載
- 實(shí)現(xiàn)STC單片機(jī)PWM輸出的程序免費(fèi)下載 81次下載
- 使用STM32F103RB單片機(jī)實(shí)現(xiàn)PWM呼吸燈實(shí)驗(yàn)的資料免費(fèi)下載 7次下載
- 單片機(jī)的PWM控制技術(shù)學(xué)習(xí)課件免費(fèi)下載 29次下載
- 使用STM32F1單片機(jī)實(shí)現(xiàn)PWM輸出的源代碼和工程文件免費(fèi)下載 32次下載
- 使用51單片機(jī)輸出PWM波形的程序免費(fèi)下載
- 使用單片機(jī)PWM實(shí)現(xiàn)電壓輸出的程序免費(fèi)下載
- 51單片機(jī)中斷的簡單學(xué)習(xí)資料免費(fèi)下載
- 51單片機(jī)的入門學(xué)習(xí)資料免費(fèi)下載
- 如何使用51單片機(jī)通過定時器模擬輸出多路PWM程序免費(fèi)下載
- 51單片機(jī)的PWM程序資料免費(fèi)下載 74次下載
- 單片機(jī)的輸出比較是小思考 396次閱讀
- 詳解STM32單片機(jī)和51單片機(jī)的區(qū)別 3.7w次閱讀
- 普通單片機(jī)與STM32單片機(jī)中堆棧的區(qū)別 3032次閱讀
- STM32單片機(jī)寄存器的功能解析 5185次閱讀
- 51單片機(jī)實(shí)現(xiàn)PWM輸出功能的兩種方法解析 2.1w次閱讀
- MCS-51系列單片機(jī)實(shí)現(xiàn)PWM輸出功能的方法解析 1868次閱讀
- 如何學(xué)習(xí)STC單片機(jī)詳細(xì)STC單片機(jī)資料說明 1.1w次閱讀
- 如何采用STM32單片機(jī)來產(chǎn)生PWM輸出 2.1w次閱讀
- 淺談STM32單片機(jī)命名規(guī)則和體系架構(gòu) 1.1w次閱讀
- 新手學(xué)習(xí)單片機(jī)的首選:51單片機(jī) 8536次閱讀
- STM32單片機(jī)--PWM輸出 1.3w次閱讀
- 詳細(xì)圖文剖析STM32單片機(jī)串口一鍵下載電路與操作方法 4.6w次閱讀
- 詳細(xì)的STM32單片機(jī)學(xué)習(xí)筆記 1.4w次閱讀
- 單片機(jī)初學(xué)者必看:這些單片機(jī)學(xué)習(xí)心得要牢記 1.4w次閱讀
- 主流32位單片機(jī)攻略連載:為什么要學(xué)STM32? 7.9w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多