天水师范学院TIANSHUINORMALUNIVERSITY《微机原理与接口技术》实验报告名称:定时器PWM输出学院:电子信息与电气工程学院专业:电子信息工程班级:16级电信一班姓名:张响生秦汉柱学号:2016106010720161060132一、实验目的;1、掌握使用STM32的通用定时器的方法2、掌握使用STM32的TIM3来产生PWM输出二、实验原理;1、STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。2、STM32的通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器功能包括:1)16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。2)16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间的任意数值。3)4个独立通道(TIMx_CH1~4),这些通道可以用来作为:A.输入捕获B.输出比较C.PWM生成(边缘或中间对齐模式)D.单脉冲模式输出4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。5)如下事件发生时产生中断/DMA:A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)C.输入捕获D.输出比较E.支持针对定位的增量(正交)编码器和霍尔传感器电路F.触发输入作为外部时钟或者按周期的电流管理2、脉冲宽度调制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。1)PWM模式脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在PWM模式下,TIMx_CNT和TIMx_CCRx始终在进行比较,(依据计数器的计数方向)以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx,以便输出某一电平信号。PWM模式1在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。PWM模式2在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。2)PWM输出配置步骤三、实验电路图;四、关键代码;Init.h/************************RCC寄存器组定义*******************/#defineRCC_CR*((unsignedvolatileint*)0X40021000)#defineRCC_CFGR*((unsignedvolatileint*)0X40021004)#defineRCC_APB2ENR*((unsignedvolatileint*)0X40021018)#defineRCC_APB1ENR*((unsignedvolatileint*)0X4002101c)/************************TIM寄存器组定义*******************/#defineTIM3_CR1*((unsignedvolatileint*)0X40000400)#defineTIM3_SMCR*((unsignedvolatileint*)0X40000408)#defineTIM3_DIER*((unsignedvolatileint*)0X4000040c)#defineTIM3_SR*((unsignedvolatileint*)0X40000410)#defineTIM3_EGR*((unsignedvolatileint*)0X40000414)#defineTIM3_CCMR1*((unsignedvolatileint*)0X40000418)#defineTIM3_CCMR2*((unsignedvolatileint*)0X4000041c)#defineTIM3_CCER*((unsignedvolatileint*)0X40000420)#defineTIM3_CNT*((unsignedvolatileint*)0X40000424)#defineTIM3_PSC*((unsignedvolatileint*)0X40000428)#defineTIM3_ARR*((unsignedvolatileint*)0X4000042c)#defineTIM3_CCR1*((unsignedvolatileint*)0X40000434)#defineTIM3_CCR2*((unsignedvolatileint*)0X40000438)oidStm32_Clock_Init(unsignedcharPLL);voidLED_Init(void);voidDelay(longcounder);voidTIM3_PWM_Init(void);init.cvoidTIM3_PWM_Init(){RCC_APB1ENR|=11;//TIM3时钟使能RCC_APB2ENR|=13;//使能PORTB时钟GPIOB_CTRL&=0XFF0FFFFF;//PB5输出GPIOB_CTRL|=0X00B00000;//复用功能输出RCC_APB2ENR|=10;//开启辅助时钟AFIO_MAPR&=0XFFFFF3FF;//清除MAPR的[11:10]AFIO_MAPR|=111;//部分重映像,TIM3_CH2-PB5TIM3_ARR=899;//设定计数器自动重装值TIM3_PSC=0;//预分频器不分频TIM3_CCMR1|=712;//CH2PWM2模式TIM3_CCMR1|=111;//CH2预装载使能TIM3_CCER|=14;//OC2输出使能TIM3_CR1=0x0080;//ARPE使能TIM3_CR1|=0x01;//使能定时器3}Main.cintmain(void){Stm32_Clock_Init(9);LED_Init();TIM3_PWM_Init();while(1){for(val=0;val=300;val++){TIM3_CCR2=val;Delay(60000);}for(val=300;val=0;val--){TIM3_CCR2=val;Delay(60000);}五、功能与结果分析;