單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 項(xiàng)目報(bào)告5-答案_第1頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 項(xiàng)目報(bào)告5-答案_第2頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 項(xiàng)目報(bào)告5-答案_第3頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 項(xiàng)目報(bào)告5-答案_第4頁
單片機(jī)產(chǎn)品設(shè)計(jì)與調(diào)試-基于STM32F1xx機(jī)型和HAL庫函數(shù) 項(xiàng)目報(bào)告5-答案_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE19《單片機(jī)產(chǎn)品設(shè)計(jì)與制作》項(xiàng)目報(bào)告項(xiàng)目5、利用定時(shí)器實(shí)現(xiàn)直流電機(jī)PWM調(diào)速姓名:學(xué)號(hào):

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

任務(wù)5.2利用定時(shí)器更新中斷實(shí)現(xiàn)閃爍燈姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)思考1、可以使用TIM2,利用內(nèi)部時(shí)鐘模式實(shí)現(xiàn)閃爍燈功能嗎?可以。將程序中的TIM4改成TIM2。2、可以減計(jì)數(shù)或者中心對(duì)齊模式1實(shí)現(xiàn)如上功能嗎?可以。修改計(jì)數(shù)模式即可。但中心對(duì)齊模式1的ARR設(shè)定值應(yīng)為2000。3、如果設(shè)置PSC=20000-1,要延時(shí)2S,加計(jì)數(shù)模式下應(yīng)設(shè)置ARR為多少?延時(shí)時(shí)間=(ARR+1)×(PSC設(shè)定值+1)/fCK_INT=(ARR+1)×(PSC設(shè)定值+1)/(72×106)ARR=(2×72×106)/20000-1=7200-14、如果設(shè)置PSC=20000-1,要延時(shí)4S,減計(jì)數(shù)模式下應(yīng)設(shè)置ARR為多少?ARR=(4×72×106)/20000-1=14400-15、如果設(shè)置PSC=20000-1,要延時(shí)4S,中心對(duì)齊模式1下應(yīng)設(shè)置ARR為多少?延時(shí)時(shí)間=(ARR)×(PSC設(shè)定值+1)/fCK_INT=(ARR+1)×(PSC設(shè)定值+1)/(72×106)ARR=(4×72×106)/20000=14400畫出利用滴答延時(shí)和利用定時(shí)器更新中斷實(shí)現(xiàn)閃爍功能的程序流程。(三)自主設(shè)計(jì)1、用TIM2完成如上功能,要求Led1~Led7每0.5S狀態(tài)改變1次。請畫出LED電路,寫出程序并調(diào)試。main.c#include"led.h" //LED頭文件#include"timer.h" //定時(shí)器頭文件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); //定時(shí)器初始化 voidMyNVIC_Init(void); //NVIC初始化#endiftimer.c#include"timer.h"#include"led.h"/********************************************************************************函數(shù)名 :TIME_Init*函數(shù)功能 :TIME初始化函數(shù)*輸入 :Period:重裝載值0~65535 Prescaler:分頻系數(shù)0~65535 延時(shí)時(shí)間Tout==( Arr-1)×(Psc+1)/fCK_INT;本開發(fā)板fCK_INT=72MHz*輸出:無*******************************************************************************/voidTIME_Init(u16Arr,u16Psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定義結(jié)構(gòu)體變量,用于初始化定時(shí)器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能TIM2時(shí)鐘 TIM_InternalClockConfig(TIM2); //TIM2對(duì)內(nèi)部時(shí)鐘進(jìn)行計(jì)數(shù) TIM_TimeBaseInitStructure.TIM_Period=Arr;//自動(dòng)裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=Psc;//分頻系數(shù) //TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//時(shí)鐘分割系數(shù) TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//設(shè)置向上計(jì)數(shù)模式 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//初始化TIM2時(shí)間基準(zhǔn) TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//開啟定時(shí)器2的更新中斷 TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除定時(shí)器2更新中斷標(biāo)志TIM_SetCounter(TIM2,0);//設(shè)定時(shí)器2初始值 TIM_Cmd(TIM2,ENABLE);//使能定時(shí)器 }/******************NVIC初始化************************************/voidMyNVIC_Init(void){ NVIC_InitTypeDefNVIC_InitStructure;//定義結(jié)構(gòu)體變量,用于存放NVIC初始化參數(shù) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//中斷優(yōu)先級(jí)分組0組 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;//設(shè)置定時(shí)器2中斷響應(yīng) NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設(shè)置搶占優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //設(shè)置響應(yīng)優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷響應(yīng) NVIC_Init(&NVIC_InitStructure); //按照如上設(shè)置進(jìn)行NVIC初始化}/********************************************************************************函數(shù)名 :TIM2_IRQHandler*函數(shù)功能 :TIM2中斷函數(shù)*輸入 :無*輸出 :無*******************************************************************************/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實(shí)現(xiàn)閃爍 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; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時(shí)鐘 /**********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,減計(jì)數(shù)模式完成如下功能:每隔1S,變量AAA的數(shù)值+1,并顯示在數(shù)碼管上,AAA最大值不能超過99。請畫出數(shù)碼管電路,寫出程序并調(diào)試。(1)main.c#include"seg.h" //seg頭文件#include"timer.h" //定時(shí)器頭文件u8Set_values;//全局變量,存儲(chǔ)設(shè)定值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); //定時(shí)器初始化 voidMyNVIC_Init(void); //NVIC初始化#endif(3)timer.c#include"timer.h"#include"seg.h"externu8Setvalues;//聲明外部變量/********************************************************************************函數(shù)名 :TIME_Init*函數(shù)功能 :TIME初始化函數(shù)*輸入 :Period:重裝載值0~65535 Prescaler:分頻系數(shù)0~65535 延時(shí)時(shí)間Tout==( Arr-1)×(Psc+1)/fCK_INT;本開發(fā)板fCK_INT=72MHz*輸出:無*******************************************************************************/voidTIME_Init(u16Arr,u16Psc){ TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;//定義結(jié)構(gòu)體變量,用于初始化定時(shí)器 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//使能TIM5時(shí)鐘 TIM_InternalClockConfig(TIM5); //TIM5對(duì)內(nèi)部時(shí)鐘進(jìn)行計(jì)數(shù) TIM_TimeBaseInitStructure.TIM_Period=Arr;//自動(dòng)裝載值 TIM_TimeBaseInitStructure.TIM_Prescaler=Psc;//分頻系數(shù) //TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;//時(shí)鐘分割系數(shù) TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Down;//設(shè)置向下計(jì)數(shù)模式 TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);//初始化TIM5時(shí)間基準(zhǔn) TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);//開啟定時(shí)器5的更新中斷 TIM_ClearITPendingBit(TIM5,TIM_IT_Update);//清除定時(shí)器5更新中斷標(biāo)志 TIM_SetCounter(TIM5,2000-1);//設(shè)定時(shí)器5初始值TIM_Cmd(TIM5,ENABLE);//使能定時(shí)器 Setvalues=0;//設(shè)定值初始值=0 }/******************NVIC初始化************************************/voidMyNVIC_Init(void){ NVIC_InitTypeDefNVIC_InitStructure;//定義結(jié)構(gòu)體變量,用于存放NVIC初始化參數(shù) NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//中斷優(yōu)先級(jí)分組0組 NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//設(shè)置定時(shí)器5中斷響應(yīng) NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//設(shè)置搶占優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //設(shè)置響應(yīng)優(yōu)先級(jí) NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷響應(yīng) NVIC_Init(&NVIC_InitStructure); //按照如上設(shè)置進(jìn)行NVIC初始化}/********************************************************************************函數(shù)名 :TIM5_IRQHandler*函數(shù)功能 :TIM5中斷函數(shù)*輸入 :無*輸出 :無*******************************************************************************/voidTIM5_IRQHandler(void){ if(TIM_GetITStatus(TIM5,TIM_IT_Update))//如果TIM5更新中斷發(fā)生 {Setvalues+=1; //設(shè)定值加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共陽極數(shù)碼管段碼表voidSeg_Init(){ GPIO_InitTypeDefGPIO_InitStructure; //定義變量,用于存儲(chǔ)GPIO初始化參數(shù) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//開啟GPIOC時(shí)鐘 /**********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); }/****************數(shù)碼管顯示程序*********************功能:00~99數(shù)碼管顯示*輸入:Data——待顯示數(shù)字,u8類型,范圍0~99*輸出:無***************************************************/voidSeg_Disp(u8Data){ u8Tens,Ones, Seg_Tens,Seg_Ones; u16Disp_Data; Tens=Data/10; //求待顯示數(shù)字的十位數(shù) Ones=Data%10; //求待顯示數(shù)字的個(gè)位數(shù) Seg_Tens=smg_table[Tens]; //求十位數(shù)的段碼 Seg_Ones=smg_table[Ones]; //求個(gè)位數(shù)的段碼 Disp_Data=(Seg_Tens<<8)+Seg_Ones; //將十位和個(gè)位段碼整合成16位數(shù)據(jù) GPIO_Write(SEG_Port,Disp_Data); //將整合后的段碼送16位顯示端口}

任務(wù)5.3利用定時(shí)器更新中斷實(shí)現(xiàn)流水燈姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)自主設(shè)計(jì)1、用TIM2完成如上功能,要求按下按鍵,流水燈每0.5S移位一次,移位順序是PC7→PC6……→PC0。請畫出電路、程序流程圖、寫出程序并調(diào)試。不變不變第25行改為n=7;第48行改為n_=1;第49行改為if(n<0)n=7;不變不變不變不變2、去掉按鍵,用TIM3實(shí)現(xiàn)流水燈功能。畫電路、畫流程圖、編程。第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的中斷服務(wù)程序第46-49行修改為Led1=!Led1;

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

任務(wù)5.5利用定時(shí)器更新中斷控制蜂鳴器音調(diào)姓名學(xué)號(hào)日期分?jǐn)?shù)(一)調(diào)試過程記錄故障現(xiàn)象:解決辦法:原因分析:故障現(xiàn)象:解決辦法:原因分析:(二)自主設(shè)計(jì)1、用K_UP鍵做蜂鳴器啟動(dòng)鍵,用K_LEFT做增加音調(diào)、K_RIGHT做音調(diào)減小鍵,TIM2做定時(shí)器,完成如上功能。請畫出按鍵和蜂鳴器電路,畫出流程圖、寫出程序并調(diào)試。修改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不變不變

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論