ARM微控制器與嵌入式系統(tǒng) 課件 30 定時(shí)器輸出PWM編程要點(diǎn)_第1頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 30 定時(shí)器輸出PWM編程要點(diǎn)_第2頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 30 定時(shí)器輸出PWM編程要點(diǎn)_第3頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 30 定時(shí)器輸出PWM編程要點(diǎn)_第4頁(yè)
ARM微控制器與嵌入式系統(tǒng) 課件 30 定時(shí)器輸出PWM編程要點(diǎn)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

ARM微控制器與嵌入式系統(tǒng)

STM32的PWM配置主講人:景妮琴北京電子科技職業(yè)學(xué)院內(nèi)容STM32的PWM定時(shí)器生成PWM的編程要點(diǎn)輸出通道配置PWM結(jié)構(gòu)體PWM庫(kù)函數(shù)定時(shí)器生成PWM原理PWM原理計(jì)數(shù)寄存器CNT重裝寄存器ARR比較寄存器CCRCNTARRCCR定時(shí)器生成PWM的編程要點(diǎn)1、開啟GPIO時(shí)鐘、定時(shí)器時(shí)鐘2、PWM輸出端口配置3、復(fù)用引腳功能映射4、定時(shí)器配置5、輸出通道配置6、PWM使能7、設(shè)置比較器值輸出PWMPWM的輸出通道針對(duì)高級(jí)定時(shí)器和通用定時(shí)器,查STM32的數(shù)據(jù)手冊(cè),選擇使用不同定時(shí)器的不同通道進(jìn)行配置。我們使用TIM3。定時(shí)器生成PWM的編程要點(diǎn)1、打開輸出通道的GPIO時(shí)鐘以及定時(shí)器(PWM)的時(shí)鐘(1)打開GPIO的時(shí)鐘使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1打開GPIOA和GPIOB的時(shí)鐘RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);

定時(shí)器生成PWM的編程要點(diǎn)1、打開輸出通道的GPIO時(shí)鐘以及定時(shí)器(PWM)的時(shí)鐘(2)打開TIM3的時(shí)鐘APB1時(shí)鐘總線

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);定時(shí)器生成PWM的編程要點(diǎn)2、PWM輸出端口配置使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1先對(duì)PA6,PA7配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);

定時(shí)器生成PWM的編程要點(diǎn)2、PWM輸出端口配置使用TIM3的4個(gè)通道分別為:PA6,PA7,PB0,PB1再對(duì)PB0,PB1配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空模式GPIO_Init(GPIOB,&GPIO_InitStructure);

定時(shí)器生成PWM的編程要點(diǎn)3、復(fù)用引腳功能映射GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM3);定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置typedefstruct{uint16_tTIM_Prescaler; //預(yù)分頻系數(shù)uint16_tTIM_CounterMode; //計(jì)數(shù)模式uint32_tTIM_Period; //定時(shí)器初值uint16_tTIM_ClockDivision; //分頻因子uint8_tTIM_RepetitionCounter; //重復(fù)計(jì)數(shù)}TIM_TimeBaseInitTypeDef;定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置分析:設(shè)置TIMx定時(shí)器的相關(guān)寄存器,主要是設(shè)置ARR和PSC。例:產(chǎn)生頻率為500Hz,占空比為50%的PWM波形,可以設(shè)置如下:通用控制定時(shí)器時(shí)鐘源TIM3CLK=42MHz*2=84MHz,設(shè)定定時(shí)器頻率為=TIM3CLK/(TIM_Prescaler+1)=1MHz,得到:TIM_Prescaler=84-1而PWM的頻率為1MHz/(TIM_Period+1)=500Hz.則TIM_Period=2000即定時(shí)器從0計(jì)數(shù)到1999,為一個(gè)定時(shí)周期定時(shí)器生成PWM原理TIM_CounterMode_Up 向上計(jì)數(shù)

定時(shí)器生成PWM原理TIM_CounterMode_Down 向下計(jì)數(shù)

TIMx_ARRTIMx_CNT中斷定時(shí)器生成PWM的編程要點(diǎn)4、定時(shí)器配置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler=84-1;//預(yù)分頻系數(shù)TIM_TimeBaseStructure.TIM_Period=2000-1;//定時(shí)器初值TIM_TimeBaseStructureTIM_CounterMode=TIM_CounterMode_Up;//計(jì)數(shù)模式TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//分頻因子TIM_RepetitionCounter=0; //重復(fù)計(jì)數(shù)TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置TIM_OCInitTypeDefTIM_OCInitStructure;typedefstruct{uint16_tTIM_OCMode; //輸出通道模式uint16_tTIM_OutputState; //輸出通道使能或失能uint16_tTIM_OutputNState; //輸出互補(bǔ)通道使能或失能uint32_tTIM_Pulse; //比較器預(yù)裝初值uint16_tTIM_OCPolarity; //輸出通道極性u(píng)int16_tTIM_OCNPolarity; //輸出互補(bǔ)通道極性u(píng)int16_tTIM_OCIdleState; //輸出通道空閑時(shí)電平uint16_tTIM_OCNIdleState; //輸出互補(bǔ)通道空閑時(shí)電平}TIM_OCInitTypeDef;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(1)TIM_OCMode的取值范圍 //輸出通道模式TIM_OCMode_Timing //定時(shí)器輸出比較時(shí)間模式TIM_OCMode_Active //定時(shí)器輸出比較主動(dòng)模式TIM_OCMode_Inactive //定時(shí)器輸出比較非主動(dòng)模式TIM_OCMode_Toggle //定時(shí)器輸出比較觸發(fā)模式TIM_OCMode_PWM1 //定時(shí)器脈寬調(diào)制模式1TIM_OCMode_PWM2 //定時(shí)器脈寬調(diào)制模式2TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(1)TIM_OCMode的取值范圍 //輸出通道模式PWM模式1在遞增計(jì)數(shù)模式下,只要TIMx_CNT<TIMx_CCR1,通道1便為有效狀態(tài),否則為無效狀態(tài)。在遞減計(jì)數(shù)模式下,只要TIMx_CNT>TIMx_CCR1,通道1便為無效狀態(tài)(OC1REF=0),否則為有效狀態(tài)(OC1REF=1)。

PWM模式2在遞增計(jì)數(shù)模式下,只要TIMx_CNT<TIMx_CCR1,通道1便為無效狀態(tài),否則為有效狀態(tài)。在遞減計(jì)數(shù)模式下,只要TIMx_CNT>TIMx_CCR1,通道1便為有效狀態(tài),否則為無效狀態(tài)。TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(2)TIM_OutputState的取值范圍 //輸出通道使能或失能TIM_OutputState_Enable //輸出通道使能TIM_OutputState_Disable //輸出通道失能TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;(3)TIM_OutputNState取值范圍//輸出互補(bǔ)通道使能或失能TIM_OutputNState_Enable //輸出互補(bǔ)通道使能TIM_OutputNState_Disable //輸出互補(bǔ)通道失能

TIM3沒有互補(bǔ)通道,這個(gè)可以不設(shè)置定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(4)TIM_Pulse取值范圍//比較器預(yù)裝初值比較器初值取值0-65535,TIM2和TIM5比較器取值0-2^32設(shè)置占空比,占空比=(CCRx/ARR)*100%,設(shè)置50%的占空比為,前面已經(jīng)設(shè)置ARR=2000,因此這個(gè)地方的CCR應(yīng)該設(shè)置為1000:TIM_OCInitStructure.TIM_Pulse=1000-1;定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(5)TIM_OCPolarity取值范圍TIM_OCPolarity_High //輸出通道極性高電平TIM_OCPolarity_Low //輸出通道極性低電平TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//設(shè)置輸出極性為高,這個(gè)設(shè)置保證了在計(jì)數(shù)值小于CCR時(shí),輸出為有效的高電平,否則為低電平

定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置(6)TIM_OCNPolarity取值范圍TIM_OCNPolarity_High //輸出互補(bǔ)通道極性高電平TIM_OCNPolarity_Low //輸出互補(bǔ)通道極性低電平TIM3沒有互補(bǔ)通道,這個(gè)可以不設(shè)置(7)TIM_OCIdleState取值范圍TIM_OCIdleState_Set //輸出通道空閑電平高電平TIM_OCIdleState_Reset //輸出通道空閑電平低電平TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Set//輸出通道空閑時(shí)電平為高電平定時(shí)器生成PWM的編程要點(diǎn)5、輸出通道配置

(8)TIM_OCNIdleState取值范圍TIM_OCNIdleState_Set //輸出互補(bǔ)通道空閑電平高電平TIM_OCNIdleState_Reset //輸出互補(bǔ)通道空閑電平低電平TIM3沒有互補(bǔ)通道,這個(gè)可以不設(shè)置TIM_OC1Init(TIM3,&TIM_OCInitStructure); //使能通道1定時(shí)器生成PWM的編程要點(diǎn)6、PWM輸出使能TIM_Cmd(TIM3,ENABLE);

//使能定時(shí)器3TIM_CtrlPWMOutputs(TIM1,ENABLE);

//使能定時(shí)器1PWM輸出(僅適用于高級(jí)定時(shí)器)TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能通道1重載7、設(shè)置比較器值輸出PWMTIM_SetCompare1(TIM_TypeDef*TIMx,uint32_tCompare1);例如:TIM_SetCompare1(TIM3,30); //設(shè)置比較器1值為30PWM輸出端口配置GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; //選擇端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;//復(fù)用模式GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz; //輸出最大速度GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//浮空模式GPIO_Init(GPIOB,&GPIO_InitStructure); 定時(shí)器配置TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Prescaler=84-1;//預(yù)分頻系數(shù)TIM_TimeBaseStructure.TIM_Period=200

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論