單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告5-答案_第1頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告5-答案_第2頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告5-答案_第3頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告5-答案_第4頁
單片機產品設計與調試-基于STM32F1xx機型和HAL庫函數 項目報告5-答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE19《單片機產品設計與制作》項目報告項目5、利用定時器實現直流電機PWM調速姓名:學號:

一、項目目標理解stm32定時器基本工作原理;掌握通用定時器的編程方法;會利用STM32通用定時器進行電路設計和程序設計。二、具體工作任務利用STM32單片機通用定時器實現方波和PWM波,實現延時、LED閃爍、流水燈、蜂鳴器音調、音量及直流電動機PWM速度控制。三、要點記錄及成果檢驗任務5.1認識STM32定時器姓名學號日期分數專業(yè)術語記錄TIM(TIMER)定時器TIMxCLK定時器時鐘InternalClockMode內部時鐘模式ETRClockMode外部時鐘模式PSC(PresetScale)預分頻CNT(Counter)計數器ARR(AutoReloadRegister)自動重裝載寄存器UpdateInterrupt/Event更新中斷/事件(二)基本概念辨析STM32內部定時器本質上是(B)。A.定時器 B.計數器STM32F103ZET6內部定時器共有(3)類,(8)個。35 B.24C.35D.38STM32F103ZET6的高級定時器是(A);通用定時器是(B);基本定時器是(C)。A.TIM1、TIM8 B.TIM2~TIM5C.TIM6、TIM7STM32F103ZET6內部定時器的工作時鐘是(D)。A.PCLK1 B.SYSCLKC.PCLK2D.TIMxCLK將TIM2設置為內部時鐘模式時,TIM2對(A)進行計數。CK_INT B.ETRFC.TRGID.TI1FP1和TI2FP2STM32F103ZET6內部定時器的工作模式有內部時鐘模式、外部時鐘模式1、外部時鐘模式2和(A)模式。編碼器 B.外部時鐘模式3C.內部時鐘模式1希望將TIM用于定時,應將其設置(D)模式。編碼器 B.外部時鐘模式2C.內部時鐘模式1D.內部時鐘模式TIM可工作在加計數模式、減計數模式和(C)。A.加減計數模式1 B.加減計數模式2C.加減計數模式3STM32的TIM計數器是(16)位計數器,計數范圍(0-65535)。A.320~232-1 B.160~65535C.16-32768~32767STM32的PSC預分頻器是(16)位寄存器,設置范圍(0-65535)。A.320~232-1 B.160~65535C.16-32768~32767做定時器用時,PSC預分頻器的設定值越大,計時精度(B)。A.越高 B.越低C.無關做定時器用時,PSC預分頻器的設定值越大,最長計時時間A)。A.越長 B.越短C.無關希望PSC實際分頻系數=256,應使PSC設定值(B)。A.256 B.255C.257已知定時器時鐘頻率=72MHz,PSC設定值=36000-1時,計時分辨率是(A)。A.500微秒 B.250微秒C.1000微秒已知定時器時鐘頻率=72MHz,PSC設定值=18000-1時,最長計時時間(B)。A.653536秒 B.16.384秒C.32.768秒已知定時器時鐘頻率=72MHz,加計數模式,PSC設定值=7200-1,ARR設定值為=9999,則每隔(D),產生一次更新中斷。A.2S B.0.5SC.0.2SD.1S加計數模式下,每來一個CK_CNT脈沖,計數值(加1);當計數值(大于ARR)時,計數值重裝為(0),并(申請)中斷。減計數模式下,每來一個CK_CNT脈沖,計數值(減1);當計數值(小于0)時,計數值重裝為(ARR),并(申請)中斷()。加減計數模式1下,每來一個CK_CNT脈沖,計數值先(加1);當計數值(=ARR)后,計數值(減1);當計數值=(0)后,計數值(加1)。寫出計時分辨率的計算公式:最小計時時間=1個CK_CNT周期=(PSC設定值+1)/fCK_INT寫出最大計時時間的計算公式:最長計時時間=65536個CK_CNT周期=65536×(PSC設定值+1)/fCK_INT。寫出加計數模式下,定時器申請更新中斷的時間計算公式:溢出所需時間=(ARR+1)×(PSC設定值+1)/fCK_INT寫出減計數模式下,定時器申請更新中斷的時間計算公式:溢出所需時間=(ARR+1)×(PSC設定值+1)/fCK_INT寫出加減計數模式1下,定時器申請更新中斷的時間計算公式:溢出所需時間=ARR×(PSC設定值+1)/fCK_INT

任務5.2利用定時器更新中斷實現閃爍燈姓名學號日期分數(一)調試過程記錄故障現象:解決辦法:原因分析:故障現象:解決辦法:原因分析:(二)思考1、可以使用TIM2,利用內部時鐘模式實現閃爍燈功能嗎?可以。將程序中的TIM4改成TIM2。2、可以減計數或者中心對齊模式1實現如上功能嗎?可以。修改計數模式即可。但中心對齊模式1的ARR設定值應為2000。3、如果設置PSC=20000-1,要延時2S,加計數模式下應設置ARR為多少?延時時間=(ARR+1)×(PSC設定值+1)/fCK_INT=(ARR+1)×(PSC設定值+1)/(72×106)ARR=(2×72×106)/20000-1=7200-14、如果設置PSC=20000-1,要延時4S,減計數模式下應設置ARR為多少?ARR=(4×72×106)/20000-1=14400-15、如果設置PSC=20000-1,要延時4S,中心對齊模式1下應設置ARR為多少?延時時間=(ARR)×(PSC設定值+1)/fCK_INT=(ARR+1)×(PSC設定值+1)/(72×106)ARR=(4×72×106)/20000=14400畫出利用滴答延時和利用定時器更新中斷實現閃爍功能的程序流程。(三)自主設計1、用TIM2完成如上功能,要求Led1~Led7每0.5S狀態(tài)改變1次。請畫出LED電路,寫出程序并調試。main.c#include"led.h" //LED頭文件#include"timer.h" //定時器頭文件intmain(){ Led_Init(); //初始化LED TIME_Init(1000-1,36000-1);//Tout=Arr*(Prc+1)/fCK_INT=1000*3600/72*1000000=0.5S MyNVIC_Init(); while(1); }timer.h#ifndef_TIMER_H#define_TIMER_H #include"stm32f10x.h" #include"system.h" voidTIME_Init(u16Arr,u16Psc); //定時器初始化 voidMyNVIC_Init(void); //NVIC初始化#endiftimer.c#include"timer.h"#include"led.h"/********************************************************************************函數名 :TIME_Init*函數功能 :TIME初始化函數*輸入 :Period:重裝載值0~65535 Prescaler:分頻系數0~65535 延時時間Tout==( Arr-1)×(Psc+1)/fCK_INT;本開發(fā)板fCK_INT=72MHz*輸出:無*******************************************************************************/voidTIME_Init(u16Arr,u16Psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定義結構體變量,用于初始化定時器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2時鐘 TIM_InternalClockConfig(TIM2); //TIM2對內部時鐘進行計數 TIM_TimeBaseInitStructure.TIM_Period=Arr;//自動裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=Psc;//分頻系數 //TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//時鐘分割系數 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//設置向上計數模式 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//初始化TIM2時間基準 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//開啟定時器2的更新中斷 TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除定時器2更新中斷標志TIM_SetCounter(TIM2,0);//設定時器2初始值 TIM_Cmd(TIM2,ENABLE);//使能定時器 }/******************NVIC初始化************************************/voidMyNVIC_Init(void){ NVIC_InitTypeDefNVIC_InitStructure;//定義結構體變量,用于存放NVIC初始化參數 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//中斷優(yōu)先級分組0組 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//設置定時器2中斷響應 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設置搶占優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //設置響應優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷響應 NVIC_Init(&NVIC_InitStructure); //按照如上設置進行NVIC初始化}/********************************************************************************函數名 :TIM2_IRQHandler*函數功能 :TIM2中斷函數*輸入 :無*輸出 :無*******************************************************************************/voidTIM2_IRQHandler(void){ if(TIM_GetITStatus(TIM2,TIM_IT_Update))//如果TIM2更新中斷發(fā)生 {Led1=!Led1; Led2=!Led2; Led3=!Led3; Led4=!Led4; Led5=!Led5; Led6=!Led6; Led7=!Led7; //取反Led2實現閃爍 TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除TIM2更新中斷待處理位 }}led.h#ifndef_LED_H#define_LED_H #include"system.h" #include"stm32f10x.h" #defineLed1 PCout(0) #defineLed2 PCout(1) #defineLed3 PCout(2) #defineLed4 PCout(3) #defineLed5 PCout(4) #defineLed6 PCout(5) #defineLed7 PCout(6) #defineLed8 PCout(7) voidLed_Init(void);#endifLed.c#include"led.h"voidLed_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時鐘 /**********GPIOC_Pin_0~Pin_7初始化********/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2\ |GPIO_Pin_3 |GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出速度50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出Out_PP GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 //使GPIOC全部輸出1(熄滅) GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2\ |GPIO_Pin_3 |GPIO_Pin_4|GPIO_Pin_5| GPIO_Pin_6|GPIO_Pin_7);}2、用TIM5,減計數模式完成如下功能:每隔1S,變量AAA的數值+1,并顯示在數碼管上,AAA最大值不能超過99。請畫出數碼管電路,寫出程序并調試。(1)main.c#include"seg.h" //seg頭文件#include"timer.h" //定時器頭文件u8Set_values;//全局變量,存儲設定值intmain(){ Seg_Init(); //初始化seg TIME_Init(2000-1,36000-1);//Tout=Arr*(Prc+1)/fCK_INT=2000*3600/72*1000000=1S MyNVIC_Init(); while(1); }(2)timer.h#ifndef_TIMER_H#define_TIMER_H #include"stm32f10x.h" #include"system.h" voidTIME_Init(u16Arr,u16Psc); //定時器初始化 voidMyNVIC_Init(void); //NVIC初始化#endif(3)timer.c#include"timer.h"#include"seg.h"externu8Setvalues;//聲明外部變量/********************************************************************************函數名 :TIME_Init*函數功能 :TIME初始化函數*輸入 :Period:重裝載值0~65535 Prescaler:分頻系數0~65535 延時時間Tout==( Arr-1)×(Psc+1)/fCK_INT;本開發(fā)板fCK_INT=72MHz*輸出:無*******************************************************************************/voidTIME_Init(u16Arr,u16Psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定義結構體變量,用于初始化定時器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//使能TIM5時鐘 TIM_InternalClockConfig(TIM5); //TIM5對內部時鐘進行計數 TIM_TimeBaseInitStructure.TIM_Period=Arr;//自動裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=Psc;//分頻系數 //TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//時鐘分割系數 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Down;//設置向下計數模式 TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);//初始化TIM5時間基準 TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);//開啟定時器5的更新中斷 TIM_ClearITPendingBit(TIM5,TIM_IT_Update);//清除定時器5更新中斷標志 TIM_SetCounter(TIM5,2000-1);//設定時器5初始值TIM_Cmd(TIM5,ENABLE);//使能定時器 Setvalues=0;//設定值初始值=0 }/******************NVIC初始化************************************/voidMyNVIC_Init(void){ NVIC_InitTypeDefNVIC_InitStructure;//定義結構體變量,用于存放NVIC初始化參數 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//中斷優(yōu)先級分組0組 NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//設置定時器5中斷響應 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設置搶占優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //設置響應優(yōu)先級 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷響應 NVIC_Init(&NVIC_InitStructure); //按照如上設置進行NVIC初始化}/********************************************************************************函數名 :TIM5_IRQHandler*函數功能 :TIM5中斷函數*輸入 :無*輸出 :無*******************************************************************************/voidTIM5_IRQHandler(void){ if(TIM_GetITStatus(TIM5,TIM_IT_Update))//如果TIM5更新中斷發(fā)生 {Setvalues+=1; //設定值加1if(Setvalues>=100)Setvalues=0;//限幅處理 TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除TIM5更新中斷待處理位 }}(4)seg.h#ifndef_SEG_H#define_SEG_H#include"stm32f10x.h" #defineSEG_Port GPIOC voidSeg_Init(void); voidSeg_Disp(u8data);#endif(5)seg.c#include"seg.h"u8smg_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9共陽極數碼管段碼表voidSeg_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義變量,用于存儲GPIO初始化參數 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時鐘 /**********GPIOC_Pin_0~Pin_15初始化********/ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All; //是Pin_0~Pin_15 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出速度50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出Out_PP GPIO_Init(GPIOC,&GPIO_InitStructure); //GPIOC初始化 //使GPIOC全部輸出1(熄滅) GPIO_Write(GPIOC,0xffff); }/****************數碼管顯示程序*********************功能:00~99數碼管顯示*輸入:Data——待顯示數字,u8類型,范圍0~99*輸出:無***************************************************/voidSeg_Disp(u8Data){ u8Tens,Ones, Seg_Tens,Seg_Ones; u16Disp_Data; Tens=Data/10; //求待顯示數字的十位數 Ones=Data%10; //求待顯示數字的個位數 Seg_Tens=smg_table[Tens]; //求十位數的段碼 Seg_Ones=smg_table[Ones]; //求個位數的段碼 Disp_Data=(Seg_Tens<<8)+Seg_Ones; //將十位和個位段碼整合成16位數據 GPIO_Write(SEG_Port,Disp_Data); //將整合后的段碼送16位顯示端口}

任務5.3利用定時器更新中斷實現流水燈姓名學號日期分數(一)調試過程記錄故障現象:解決辦法:原因分析:故障現象:解決辦法:原因分析:(二)自主設計1、用TIM2完成如上功能,要求按下按鍵,流水燈每0.5S移位一次,移位順序是PC7→PC6……→PC0。請畫出電路、程序流程圖、寫出程序并調試。不變不變第25行改為n=7;第48行改為n_=1;第49行改為if(n<0)n=7;不變不變不變不變2、去掉按鍵,用TIM3實現流水燈功能。畫電路、畫流程圖、編程。第11、12、13行刪除,第10行改為while(1);不變將所有TIM4替換為TIM3(14、15、16、21、23、24、32、44、45、51)去掉26行的//不變不變3、按下按鍵,PC0連接的LED閃爍;抬起按鍵,LED熄滅。畫電路,編程。題1程序,只修改timer.c的中斷服務程序第46-49行修改為Led1=!Led1;

任務5.4利用定時器更新中斷控制蜂鳴器鳴響姓名學號日期分數(一)調試過程記錄故障現象:解決辦法:原因分析:故障現象:解決辦法:原因分析:(二)自主設計1、用TIM2完成下功能:按下按鍵K_UP,蜂鳴器響;松開按鍵,蜂鳴器停。請畫出按鍵和蜂鳴器電路和流程圖,寫出程序并調試。修改TIM4為TIM2不變不變不變不變修改TIM4為TIM2修改TIM4為TIM2

任務5.5利用定時器更新中斷控制蜂鳴器音調姓名學號日期分數(一)調試過程記錄故障現象:解決辦法:原因分析:故障現象:解決辦法:原因分析:(二)自主設計1、用K_UP鍵做蜂鳴器啟動鍵,用K_LEFT做增加音調、K_RIGHT做音調減小鍵,TIM2做定時器,完成如上功能。請畫出按鍵和蜂鳴器電路,畫出流程圖、寫出程序并調試。修改23行,K_Left==0為K_Up==1;修改22、23、25行TIM4為TIM2不變不變修改所有TIM4為TIM2修改8行,GPIOA為GPIOE,GPIO_PinSource0為GPIO_PinSource2修改9行,EXTI_Line0為EXTI_Line2修改11行,Rising為Falling修改14行GPIO_PinSource3為GPIO_PinSource4修改9行,EXTI_Line3為EXTI_Line4 修改25行,EXTI0_IRQn為EXTI2_IRQn修改30行,EXTI3_IRQn為EXTI4_IRQn修改所有的EXTI0為EXTI2,EXTI_Line0為EXTI_Line2修改所有的EXTI3為EXTI4,EXTI_Line3為EXTI_Line4不變不變

任務5.6利用定時器PWM輸出控制蜂鳴器音量姓名學號日期分數(一)調試過程記錄故障現象:解決辦法:原因分析:故障現象:解決辦法:原因分析:(二)專業(yè)術語記錄PWM(PulseWidthModulation)脈沖寬度調制OC(OutputCompare)比較輸出CCR(CaptureCompareRegister)捕捉比較寄存器AlternateFunction復用功能Remap重映像Chanel通道(三)填空對于PWM1,增計數,ARR=10,CCR=7,有效電平設為高電平情況下,計數值=0時,輸出為(1),計數值=7時,輸出為(0),計數值=8時,輸出為(0),計數值=9時,輸出為(0),計數值=10時,輸出為(0),計數值=11時,輸出為(1)。計數值重裝為0時的計數值是(1)。對于PWM1,增計數,ARR=10,CCR=7,有效電平設為低電平情況下,計數值=0時,輸出為(0),計數值=7時,輸出為(1),計數值=8時,輸出為(1),計數值=9時,輸出為(1),計數值=10時,輸出為(1),計數值=11時,輸出為(0)。對于PWM1,增計數,ARR=10,CCR=10,有效電平設為高電平情況下,計數值=0時,輸出為(1),計數值=10時,輸出為(1),計數值=11時,輸出為(0)。對于PWM1,增計數,ARR=10,CCR=0,有效電平設為高電平情況下,計數值=0時,輸出為(0),計數值=10時,輸出為(0),計數值=11時,輸出為(0)。對于PWM1,增計數,ARR=10,CCR=0,有效電平設為低電平情況下,計數值=0時,輸出為(1),計數值=10時,輸出為(1),計數值=11時,輸出為(1)。對于PWM1,增計數,ARR=10,CCR=15,有效電平設為高電平情況下,計數值=0時,輸出為(1),計數值=10時,輸出為(0),計數值=11時,輸出為(0)。TIM5_CH1通道使用管腿為(PA0)。TIM4_CH2通道使用管腿為(PB7(默認)、PD13(完全重映像))。如果某個引腳只能作為一個資源的重映像引腳,這種重映像屬于(完全重映像)。如果某個引腳能作為多個資源的重映像引腳,這種重映像屬于(部分重映像)。72MHz頻率下,要輸出周期1S,占空比30%的PWM波,如果設置PSC+1=7200,則ARR+1=(10000),CCR=(3000)。72MHz頻率下,要利用更新中斷輸出周期1S,的方波,如果設置PSC+1=3600,則ARR+1=(20000)。使能定時器2,可使用語句(TIM_Cmd(TIM2,ENABLE);)。給定時器2的ARR送100,可使用語句(TIM_SetAutoreload(TIM2,100);)。給定時器2的PSC送100,可使用語句:(TIM_PrescalerConfig(TIM2,100,TIM_PSCReloadMode_Immediate);)。給定時器2的CCR2送100,可使用語句(TIM_SetCompare2(TIM2,100);)。允許定時器3更新中斷,可使用語句(TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);)。TIM3更新中斷函數名為(TIM3_IRQHandler())。初始化定時器5時基,可使用庫函數(TIM_TimeBaseInit(TIM5,&定時器時基初始化變量))。初始化定時器3比較輸出通道2,可使用庫函數(TIM_OC2Init(TIM3,&定時器OC初始化變量))。設置定時器2為內部時鐘模式,可使用語句(TIM_InternalClockConfig(TIM2);)。設置TIM2的CH2通道有效電平為低電平,可使用語句(TIM_OC2PolarityConfig(TIM2,TIM_OCPolarity_Low);)。設置TIM2的CH2通道有效電平為高電平,可使用語句(TIM_OC2PolarityConfig(TIM2,TIM_OCPolarity_High);)。使能ARR預裝載功能,應使用庫函數(TIM_ARRPreloadConfig(TIMx,ENABLE);)。使能PSC預裝載功能,應使用庫函數(TIM_PrescalerConfig(TIMx,PSC設定值,裝入模式);)。使能CCR1預裝載功能,應使用庫函數(TIM_OC1PreloadConfig(TIMx,TIM_OCPreload_Enable);)。對TIM3_CH2進行部分重映像,應寫語(GPIO_PinRemapConfig(GPIO__PartialRemap_TIM3,ENABLE,)。對TIM3_CH2進行完全重映像,應寫語句((GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE,))。(二)自主設計1、利用TIM4_CH1通道,編程使PB6引腳輸出高電平占空比為2/5的PWM波,要求PWM的頻率=2KHz。主程序main.c#include"pwm.h" u16High_Time; intmain(){SysTick_Init(72); TIMx_CHy_PWM_Init(500-1,72-1); //設置PWM周期=0.5ms,頻率=2KHz while(1) {High_Time=500*2/5; //高電平時間為2/5周期 TIM_SetCompare1(TIM4,High_Time);//給定時器4通道31送CCR值 }}PWM初始化程序PWM.C#include"pwm.h"voidTIMx_CHy_PWM_Init(u16Arr,u16Psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定時器時基初始化變量 TIM_OCInitTypeDefTIM_OCInitStructure;//定義比較輸出初始化變量 GPIO_InitTypeDefGPIO_InitStructure;//定義GPIO初始化變量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//開GPIOB時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//開TIM44時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //開復用時鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;//是PB6引腳 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出速度50MHz GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出 GPIO_Init(GPIOB,&GPIO_InitStructure);//對GPIOB初始化 //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM4,ENABLE); //對T

溫馨提示

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

評論

0/150

提交評論