在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>淺談STM32單片機學習---PWM輸出資料下載

淺談STM32單片機學習---PWM輸出資料下載

2021-04-10 | pdf | 153.6KB | 次下載 | 3積分

資料介紹

首先熟悉一下定時器的PWM相關部分。看圖最明白:其實PWM就是定時器的一個比較功能而已。CNT里的值不斷++,一旦加到與CCRX寄存器值相等,那么就產生相應的動作。這點和AVR單片機很類似。既然這樣,我們要產生需要的PWM信號,就需要設定PWM的頻率和PWM的占空比。首先說頻率的確定。由于通用定時器的時鐘來源是PCLK1,而我又喜歡用固件庫的默認設置,那么定時器的時鐘頻率就這樣來確定了,如下:AHB(72MHz)→APB1分頻器(默認2)→APB1時鐘信號(36MHz)→倍頻器(*2倍)→通用定時器時鐘信號(72MHz)。這里為什么是這樣,在RCC模塊學習記錄里有詳細記載,不多說。因此圖中的CK_PSC就是72MHz了。下面的資料也是網上一搜一大把,我就羅列了:STM32的PWM輸出有兩種模式,模式1(PWM1)和模式2(PWM2),由TIMx_CCMRx寄存器中的OCxM位確定的(“110”為模式1,“111”為模式2)。模式1和模式2的區別如下:110:PWM模式1-在向上計數時,一旦TIMx_CNT=TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1)。111:PWM模式2-在向上計數時,一旦TIMx_CNT=TIMx_CCR1時通道1為有效電平,否則為無效電平。由此看來,模式1和模式2正好互補,互為相反,所以在運用起來差別也并不太大。我用的是模式一,因此后面的設定都是按照模式一來設定的。PWM的周期是就是由定時器的自動重裝值和CNT計數頻率決定的。而CNT的計數時鐘是CK_PSC經分頻器PSC得到,因此CNT的時鐘就是CK_PSC/分頻系數。這個分頻系數在TIM_TimeBaseStructure.TIM_Prescaler確定。成都網站設計我設置的值是72,因此CNT的計數頻率也就是CK_CNT的頻率為1MHz。下一步就是確定定時器自動重裝值。因為CNT每自加到ARR寄存器的值時就會自動清零,當然前提是設定為為向上計數模式,而就是根據這個溢出事件來改變PWM的周期。所以PWM信號的頻率由ARR的值來確定。我設置的值是1000-1,即TIM_TimeBaseStructure.TIM_Period = 1000-1;因此PWM的周期是1MHz/1000=1KHz。接下來就要確定PWM的占空比了。因為CNT在自加到ARR值的過程中會不斷和CRRX的值相比較,一旦二者相等就產生匹配事件,但要注意CNT不會理會這件事,它會繼續++直到等于ARR。而CRRX的值我設定為400-1,那么占空比就隨之確定為40%。好了,下面就是庫函數的配置了。TIMER輸出PWM實現步驟1.設置RCC時鐘;2.設置GPIO;3.設置TIMx定時器的相關寄存器;4.設置TIMx定時器的PWM相關寄存器。首先是main函數和全局變量申明,很簡單,不作說明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配置函數,注釋很清楚了,不作說明:void tim2_cfg(){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_DeInit(TIM2);TIM_InternalClockConfig(TIM2);//預分頻系數為72,這樣計數器時鐘為72MHz/72 = 1MHzTIM_TimeBaseStructure.TIM_Prescaler = 72;//設置時鐘分割TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//設置計數器模式為向上計數模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//設置計數溢出大小,每計1000個數就產生一個更新事件TIM_TimeBaseStructure.TIM_Period = 1000-1;//將配置應用到TIM2中TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//禁止ARR預裝載緩沖器TIM_ARRPreloadConfig(TIM2, DISABLE);TIM_Cmd(TIM2, ENABLE);//使能TIMx外設}接下來是關鍵的PWM的配置函數: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;//使能輸出狀態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函數實現,我用了一個X,說明不止一個這樣的函數,事實上,stm32的通用定時器都有四個通道,每個通道對應一個初始化函數,這里真夠糾結的!最后還要使能該定時器的PWM輸出功能,TIM_CtrlPWMOutputs(TIM2,ENABLE)函數要注意,是outputs而不是output,說明TIM2不止一個通道嘛!夠復雜,夠繁瑣的!下面是輸出比較單元的結構體原型:typedef struct{uint16_t TIM_OCMode;uint16_t TIM_OutputState;uint16_t TIM_OutputNState;uint16_t TIM_Pulse;
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 特黄特色大片免费视频播放 | 久久综合九色综合欧洲色| 日本国产在线观看| 欧美成人精品久久精品| 国产亚洲美女精品久久久久狼| 国产激烈床戏无遮挡观看| 三级视频国产| 欧美一级视频在线观看欧美| 另类免费视频| 丁香久久婷婷| 天天拍夜夜操| 天天天天天天干| 人人干在线观看| 欧美美女被日| 天天干天天操天天爽| a毛片基地免费全部香蕉| 亚洲夜夜爱| 黑色丝袜美美女被躁视频| 深夜视频免费在线观看| 九九51精品国产免费看| 天天干天天干天天色| 黄色一区二区三区| 在线观看视频一区二区三区| 狼狼鲁狼狼色| 综合啪啪| 午夜dy888理论| 五月婷六月婷婷| 免费观看a黄一级视频| jiuma和我啪啪| 新天堂网| 天天艹| 色视频网站在线观看| 啪啪国产视频| 2020国产v亚洲v天堂高清| 三级黄色在线视频| 国产成人在线播放视频| 天天草天天爽| 综合亚洲一区二区三区| 欧美不卡在线视频| 熟妇毛片| 毛片官网|