1微控制器综合设计与实训实验名称:实验八PWM输出实验2实验八:PWM输出实验1实训任务(1)开启TIM时钟,配置定时器通道对应10口为复用输出;(2)利用定时器的PWM输出功能产生波;(3)通过调节占空比调节LED的亮度。1.1实验说明脉冲宽度调制(PWM),是英文“PulseWidthModulation,啲缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。STM32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出。要使STM32的通用定时器TIMx产生PWM输出,除了上一实验的寄存器外,我们还会用到3个寄存器,分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1〜4)。本实验仅利用TIM3的CH2产生一路PWM输出。通过重映射TIM_CH2到PB5上,由TIM_CH2输出PWM来控制LED1的亮度。1.2实验步骤⑴在实训平台上将PB5连接LED灯;(2)编写timer.c与timer.h文件,实现通过重映射TIM_CH2到PB5上,由TIM_CH2输出PWM来控制LED1的亮度。(3)编写main文件,编译成功;(4)程序编译无误后下载到实训平台,观察LED亮度的变化:通过示波器观察输出的波形。2程序设计(1)新建文件夹并命名为PWM输出实验,复制粘贴上一章的实验文件,将工程3文件改名为PWM.uvprojx。(2)timer.h文件只需再添加TIM3_PWM_Init的声明即可。(3)编写timer.c文件。a.开启TIM3时钟以及复用功能时钟置,配置PB5为复用输出要使用TIM3,必须先开启TIM3的时钟,使能GPIO外设和AFIO复用功能模块时钟。因为TIM3_CH2通道将重映射到PB5上,此时还要配置PB5为复用输出。库函数使能TIM3时钟的方法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3时钟库函数设置AFIO时钟的方法是:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用时钟使能GPIO初始化为复用推挽输出:GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出voidTlM3_™_Inir(uLBarr,ul6psc)GPIO_InLtTypeDefGPIO_J[iitStruetur&;RCC_APBLPeriphClockCmdIRCC_APBlPeriph_TIM3,ENABLE);迎隧iSS3时钟RCC_APB2PeriphC1ockOitd(RCC_APB2Periph.GPTOBRCC_APB2Periph_AFI0,ENABLE);I'll能CP10脚为复用辎出功能"输出TIM3匚胆的裤知Ht冲波孫GPI0B.5GPI0_InitStructure.GPI0_Pin=GPI0_Pin_5:TIW_CH2GPI0_InitStrueture.GPI0_Mode=GPIO_Mode_AF_PP:比用推挽输陀GPIOInitStructure,GPIOSpeed=GPIOSpeeJSOMHa:…—图9.2开启TIM3时钟b.设置TIM3_CH2重映射到PB5上因为TIM3_CH2默认是接在PA7上的,所以需要设置TIM3_REMAP为部分重映射(通过AFIO_MAPR配置),让TIM3_CH2重映射到PB5上面。库函数函数里面设置重映射的函数是:VoidGPIO_PinRemapConfig(uint32_tGPIO_Remap,FunctionalStateNewState);STM32重映射只能重映射到特定的端口。第一个入口参数可以理解为设置重映射的类型,比如TIM3部分重映射入口参数为GPIO_PartialRemap_TIM3。TIM3部分重映射的库函数实现方法是:4GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);voidTIM3_P11,M_Init(ul6arr,ul6psc)GPIO_InLtTypeDefGPIO_InitStrucrure:RCC_APELPeriphC1ockCind(ROC_APB1Periph_TIM3.ENABLE):俺確疋时醇3时枷RCCAPB2PeriphC1ockCmd(JKCZAPe2PerinhZGPlOBIRCC_APB2Pflriph_AFI0.EXABLE);^fj&CPIOX世岂该引脚为復用输岀功抵输出TIMSC吃的FAH.W;冲渡恥GPIQB.5£FI0_Init£tru£tLirpGPK>_Pin=GPI0_Pin_5;TIM_CH2GPrO_InitStructure.GPIO_Wode=GPIO_yode_AF_PP;蚁川卅用羯岀GPIO_InitStructure.GPIO_Speed=GPIO_Speed50MHa;GPIO^Init(GPIOB,iGPI0dTnitSlructur?T:计丹盈化GFLOCPIQ_PinBemHpCmfifi(GPIO_Psrti^lRe啤p_TIW3,EXAE1I.E):/.Timers部仆堕映对TIM23_CH2->PR3图9.3重映射c.初始化TIM3,设置TIM3的ARR和PSC开启TIM3的时钟之后,要设置ARR和PSC两个寄存器的值来控制输出PWM的周期。当PWM周期太慢(低于50Hz)的时候,就会明显感觉到闪烁了。所以PWM周期在这里不宜设置的太...