資料介紹
首先熟悉一下定時器的PWM相關部分。看圖最明白:其實PWM就是定時器的一個比較功能而已。CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產(chǎn)生相應的動作。這點和AVR單片機很類似。既然這樣,我們要產(chǎn)生需要的PWM信號,就需要設定PWM的頻率和PWM的占空比。首先說頻率的確定。由于通用定時器的時鐘來源是PCLK1,而我又喜歡用固件庫的默認設置,那么定時器的時鐘頻率就這樣來確定了,如下: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正好互補,互為相反,所以在運用起來差別也并不太大。我用的是模式一,因此后面的設定都是按照模式一來設定的。PWM的周期是就是由定時器的自動重裝值和CNT計數(shù)頻率決定的。而CNT的計數(shù)時鐘是CK_PSC經(jīng)分頻器PSC得到,因此CNT的時鐘就是CK_PSC/分頻系數(shù)。這個分頻系數(shù)在TIM_TimeBaseStructure.TIM_Prescaler確定。成都網(wǎng)站設計我設置的值是72,因此CNT的計數(shù)頻率也就是CK_CNT的頻率為1MHz。下一步就是確定定時器自動重裝值。因為CNT每自加到ARR寄存器的值時就會自動清零,當然前提是設定為為向上計數(shù)模式,而就是根據(jù)這個溢出事件來改變PWM的周期。所以PWM信號的頻率由ARR的值來確定。我設置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。接下來就要確定PWM的占空比了。因為CNT在自加到ARR值的過程中會不斷和CRRX的值相比較,一旦二者相等就產(chǎn)生匹配事件,但要注意CNT不會理會這件事,它會繼續(xù)++直到等于ARR。而CRRX的值我設定為400-1,那么占空比就隨之確定為40%。好了,下面就是庫函數(shù)的配置了。TIMER輸出PWM實現(xiàn)步驟1.設置RCC時鐘;2.設置GPIO;3.設置TIMx定時器的相關寄存器;4.設置TIMx定時器的PWM相關寄存器。首先是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;//設置時鐘分割TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//設置計數(shù)器模式為向上計數(shù)模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//設置計數(shù)溢出大小,每計1000個數(shù)就產(chǎn)生一個更新事件TIM_TimeBaseStructure.TIM_Period = 1000-1;//將配置應用到TIM2中TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//禁止ARR預裝載緩沖器TIM_ARRPreloadConfig(TIM2, DISABLE);TIM_Cmd(TIM2, ENABLE);//使能TIMx外設}接下來是關鍵的PWM的配置函數(shù):void pwm_cfg(){//設置缺省值TIM_OCStructInit(&TimOCInitStructure);//PWM模式1輸出TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//設置占空比,占空比=(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);//設置TIM2的PWM輸出為使能TIM_CtrlPWMOutputs(TIM2,ENABLE);}stm32固件庫的輸出比較單元結構體與定時器的時基單元是分開定義的,而PWM模式只是輸出比較結構體成員TimOCInitStructure.TIM_OCMode的一個取值,當把此結構體填充完后,還要映射到某個定時器,用TIM_OCXInit函數(shù)實現(xiàn),我用了一個X,說明不止一個這樣的函數(shù),事實上,stm32的通用定時器都有四個通道,每個通道對應一個初始化函數(shù),這里真夠糾結的!最后還要使能該定時器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數(shù)要注意,是outputs而不是output,說明TIM2不止一個通道嘛!夠復雜,夠繁瑣的!下面是輸出比較單元的結構體原型:typedef struct{uint16_t TIM_OCMode;uint16_t TIM_OutputState;uint16_t TIM_OutputNState;uint16_t TIM_Pulse;
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- STM32單片機PWM輸出學習
- 單片機軟件模擬PWM調光程序下載 65次下載
- 基于STM32單片機的小車PWM調速系統(tǒng) 40次下載
- STM32單片機與linux系統(tǒng)單片機串行通信資料下載
- 實現(xiàn)STC單片機PWM輸出的程序免費下載 86次下載
- 使用STM32F103RB單片機實現(xiàn)PWM呼吸燈實驗的資料免費下載 8次下載
- 單片機的PWM控制技術學習課件免費下載 29次下載
- 使用STM32F1單片機實現(xiàn)PWM輸出的源代碼和工程文件免費下載 32次下載
- 使用51單片機輸出PWM波形的程序免費下載
- 使用單片機PWM實現(xiàn)電壓輸出的程序免費下載
- 51單片機中斷的簡單學習資料免費下載
- 51單片機的入門學習資料免費下載
- 51單片機和STM32單片機有哪些區(qū)別
- 如何使用51單片機通過定時器模擬輸出多路PWM程序免費下載
- 51單片機的PWM程序資料免費下載 74次下載
- 單片機的輸出比較是小思考 533次閱讀
- 詳解STM32單片機和51單片機的區(qū)別 3.8w次閱讀
- 普通單片機與STM32單片機中堆棧的區(qū)別 3196次閱讀
- STM32單片機寄存器的功能解析 5468次閱讀
- 51單片機實現(xiàn)PWM輸出功能的兩種方法解析 2.1w次閱讀
- MCS-51系列單片機實現(xiàn)PWM輸出功能的方法解析 1987次閱讀
- 如何學習STC單片機詳細STC單片機資料說明 1.2w次閱讀
- 如何采用STM32單片機來產(chǎn)生PWM輸出 2.1w次閱讀
- 淺談STM32單片機命名規(guī)則和體系架構 1.2w次閱讀
- 新手學習單片機的首選:51單片機 8836次閱讀
- STM32單片機--PWM輸出 1.4w次閱讀
- 詳細圖文剖析STM32單片機串口一鍵下載電路與操作方法 4.7w次閱讀
- 詳細的STM32單片機學習筆記 1.4w次閱讀
- 單片機初學者必看:這些單片機學習心得要牢記 1.4w次閱讀
- 主流32位單片機攻略連載:為什么要學STM32? 7.9w次閱讀
下載排行
本周
- 1GD100PIX120C6SNA規(guī)格書
- 0.98 MB | 3次下載 | 免費
- 2一款入耳式耳機的仿真與分析
- 0.44 MB | 2次下載 | 免費
- 3Eurotherm TKS Temperature 用戶手冊
- 1.46 MB | 2次下載 | 免費
- 4人形機器人電機驅動和傳感報告
- 4.27 MB | 2次下載 | 免費
- 5無線系統(tǒng)中天線和RF元件電磁建模
- 7.48 MB | 1次下載 | 4 積分
- 6Multisim模擬電路仿真教程
- 1.93 MB | 1次下載 | 3 積分
- 7DMP300C1型微機變壓器保護測控裝置技術說明書
- 4.11 MB | 次下載 | 10 積分
- 8用MT3540芯片設計BOOST電路 1(可下載)
- 445.66 KB | 次下載 | 免費
本月
- 1晶體三極管的電流放大作用詳細說明
- 0.77 MB | 32次下載 | 2 積分
- 2Python從入門到精通背記手冊
- 18.77 MB | 27次下載 | 1 積分
- 3雙極型三極管放大電路的三種基本組態(tài)的學習課件免費下載
- 4.03 MB | 25次下載 | 1 積分
- 4AIWA HS-J303 MKⅡ維修手冊
- 22.47 MB | 23次下載 | 10 積分
- 5多級放大電路的學習課件免費下載
- 1.81 MB | 21次下載 | 2 積分
- 6九陽豆?jié){機高清原理圖
- 2.47 MB | 20次下載 | 1 積分
- 7AIWA HS-J202/HS-J202M/HS-J800維修手冊
- 13.60 MB | 15次下載 | 10 積分
- 81875功放原理圖
- 0.04 MB | 11次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183337次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81585次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73814次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論