STM32学习笔记通用定时器PWM输出

合集下载

stm32输出pwm占空比代码

stm32输出pwm占空比代码

stm32输出pwm占空比代码在STM32单片机中,输出PWM(脉冲宽度调制)信号是非常普遍的操作,这种信号通常用于控制电机、LED灯等电子设备的亮度或运动状态。

本文将详细介绍STM32单片机如何输出PWM占空比代码。

一、配置TIM定时器要输出PWM信号,首先需要进行TIM定时器的配置。

在KEIL C 编译器中,可以通过CubeMX插件进行配置。

在此之前需要先引入库文件“stm32fxx_hal_tim.h”。

在CubeMX中选择对应的TIM,进入“Mode”选项卡,将TIM定时器配置为PWM输出模式。

在“Configuration”选项卡中,配置TIM的时钟源和预分频系数等信息。

此外还需要配置PWM的周期和占空比,具体可以通过下面的步骤实现。

二、设置PWM周期在代码中设置PWM周期,可以使用HAL库中的“__HAL_TIM_SET_AUTORELOAD”函数。

该函数的第一个参数为TIM定时器的句柄,第二个参数为PWM的周期,单位为计数器的值。

可以根据需要调整该值来改变PWM的输出频率。

例如,将PWM周期设置为1000,代码如下:__HAL_TIM_SET_AUTORELOAD(&htim1, 1000);三、设置PWM占空比在代码中设置PWM占空比,需要使用HAL库中的“__HAL_TIM_SET_COMPARE”函数。

该函数的第一个参数是TIM定时器的句柄,第二个参数是设置输出PWM的通道,第三个参数是占空比。

占空比的取值范围为0到PWM周期。

例如,将PWM占空比设置为500,代码如下:__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 500);四、使用PWM输出信号最后,在代码中使用PWM输出信号,可以使用HAL库中的“HAL_TIM_PWM_Start”函数。

该函数的参数为TIM的句柄和输出PWM 的通道。

例如,在TIM1通道1上启动PWM输出,代码如下:HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);以上就是STM32单片机输出PWM占空比代码的详细步骤。

stm32pwm输出三角波原理

stm32pwm输出三角波原理

stm32pwm输出三角波原理
在STM32微控制器中,PWM 输出可以实现多种波形,包括方波、正弦波、三角波等。

其中,三角波是一种非常常见的波形,在很多应用场景中都有广泛的应用。

三角波是一种连续的、平滑的波形,其特点是从低电平逐渐升高到高电平,然后再逐渐降低到低电平,如同一个长长的三角形。

在STM32 中,输出三角波需要使用 PWM 模块和定时器,并对定时器的计数器进行配置。

具体来说,输出三角波的原理如下:
1. 配置定时器为向上计数模式,并设置一个合适的计数频率,例如 10 kHz。

2. 配置 PWM 输出通道为定时器输出比较功能,并选择合适的输出极性和时钟分频系数。

3. 在每次定时器计数器达到设定值时,PWM 输出通道会自动翻转输出电平,这将导致三角波的上升和下降。

4. 在每次计数器溢出时,需要重新设置计数器的初始值,以保证连续输出三角波。

5. 如果需要改变三角波的频率或幅值,可以通过改变定时器的计数频率或 PWM 输出通道的占空比来实现。

通过上述方法,可以在 STM32 微控制器中实现三角波的输出。

这种波形非常适合一些需要连续、平滑的变化的应用场景,例如音频信号发生器、电机驱动等。

定时器学习笔记(嵌入式)

定时器学习笔记(嵌入式)

定时器学习笔记一、STM32F103定时器STM32F103的定时器为工业控制应用度量身定做,具有延时、信号的频率测量、信号的PWM测量、PWM输出、三相六步电机控及编码接口等功能,STM32F103微控制器内部集成了多个可编程定时器,可分为基本定时器、通用定时和高级定时器3种类型,从功能上看,基本定时器的功能是通用定时器的子集,而通用定时器的功能又是高级定时器的一个子集。

二、STM32F103定时器类型1.基本定时器TIM6和TIM72.通用定时器TM2-TIM53.高级定时器TIM1和TIM8三、PWM的实现(1)传统的数字电路方式。

用传统的数字电路实现PWM,电路设计较复杂,体积大,抗于扰能力差,系统的控制周期较长。

(2)微控制器普通1/0模拟方式。

对于微控制器中无PWM输出功能的情况,可以通过CPU操控普通1/O口来实现PWM输出。

但这样实现PWM将消耗大量的时间大大降低了CPU的效率,而且得到的PWM信号精度不太高。

(3)微控制器的PWM直接输出方式。

对于具有PWM输出功能的微控制器,在进行简单的配置后即可在微控制器的指定引脚上输出PWM脉冲。

四、PWM输出模式的工作过程(1)若配置脉冲计数器TIMx_CNT为向上计数模式,自动重装载寄存器TIMx_ARR的预设值为N,则脉冲计数器TIMx_CNT的当前计数值X在时钟CK_CNT的驱动下从0开始不断累加计数(2)在脉冲计数器TIMx_CNT随着时钟CK_CNT触发进行累加计数的同时,脉冲计数器LMx_CNT的当前计数值X与捕获/比较寄存器TIMx_CCR的预设值A进行比较:如果X<A.输出高电平(或低电平);如果X=A,输出低电平(或高电平)。

(3)当脉冲计数器TIMx_CNT的计数值X大于自动重装载寄存器TIMx_ARR的预设值N时,脉冲计数器TIMx_CNT的计数值清零并重新开始计数。

如此循环往复得到的PWM输出信号的周期为(N+1)×XTCK_CNT,其中,N为自动重装载寄存TIMx_ARR的预设值,TCK_CNT为时钟CK_CNT的周期。

STM32之PWM波形输出配置复习总结.doc

STM32之PWM波形输出配置复习总结.doc

STM32之PWM波形输出配置总结1. TIMER 分类STM32中一共有11个定时器,其中TIM6、TIM7是基本定时器;TIM2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。

其中系统嘀嗒定时器是前文中所描述的SysTick o其中TIM1和TIM8是能够产生3对PWM互补输出,常用于三相电机的驱动, 时钟由APB2的输岀产生oTIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。

2. PWM波形产生的原理通用定时器可以利用GPI0引脚进行脉冲输岀,在配置为比较输岀、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。

举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载等存器TI Mx_ARR被配置为N,即TI Mx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。

而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR 预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较等存器TIMx_CCR 的值A时,输岀高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输岀低电平(或高电平)。

如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1) 乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为A/(N+1) o3. STM32产生PWM的配置方法1)配置GPIO 口不是每一个I0引脚都可以直接使用于PWM输出,下面是定时器的引脚重映像,其实就是引脚的复用功能选择:表定时器的引脚复用功能映像表定时器的引脚复用功能映像表3-4 定时器4的引脚复用功能映像根据以上重映像表,我们使用定时器3的通道2作为PWM的输出引脚,所以需要对PB5引脚进行配置,对10 口操作代码:2)初始化定时器3)设置TIM3_CH2的PWM模式.使能TIM3的CH2输出4)使能定时器3经过以上的操作,定时器3的第二通道已经可以正常工作并输出PWM波了,只是其占空比和频率都是固定的,我们可以通过改变TIM3_CCR2,则可以控制它的占空比。

使用STM32的定时器产生两路相位互为180度的PWM输出波形

使用STM32的定时器产生两路相位互为180度的PWM输出波形
③计数器继续向下计数,达到到TIMx_CC2时,CC2匹配成功,CC2的输出电平翻转;
④计数器继续向下计数,减到0时开始调头向上计数;当计数器的数值上升到TIMx_CC2时,CC2再次匹配成功,CC2的输出电平再次翻转;
如此循环,得到连续的相位互为180度的两路输出波形。
基本设置如下:
1)配置定时器的计数器为中间对齐计数,即先向上计数再向下计数。
2)在该定时器上选择2个通道,并分别配置为输出比较模式,并配置在比较成功时翻转对应的引脚输出。
3)配置自动重装载寄存器TIMx_ARR为要求输出频率的一半。
4)假定CC1为第一个输出信号的通道,再假定第一个信号的正脉冲宽度对应为W1,则配置TIMx_CCR1为TIMx_ARR-W1/2。
5) 同4),假定CC2为第二个输出信号的通道,正脉冲宽度对应为W2,配置TIMx_CCR2为W2/2。
----------------------------------------------
下面以一个例子说明:
假设要求输出的信号频率为10kHz,占空比为1:3。
再假设定时器的输入时钟为72MHz。
按照上述5),设置TIMx_CC2=W2/2=450
参照下图,图中红线表示计数器的数值变化:
①当计数器的数值从0向上计数,达到TIMx_CC1时,CC1匹配成功,CC1的输出电平翻转;
②计数器继续向上计数,达到TIMx_ARR时开始调头向下计数;当计数器的数值下降到TIMx_CC1时,CC1再次匹配成功,CC1的输出电平再次翻转;
输出信号的频率10kHz,换算为计数器的数值为7200。
按照上述电平时间W1,换算为计数器的数值为W1=7200/4=1800

stm32的pwm输出及频率计算方法

stm32的pwm输出及频率计算方法

stm32的pwm输出及频率计算方法
一、stm32的pwm输出引脚是使用的IO口的复用功能。

二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。

三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。

四、给出了PWM频率和占空比的计算公式。

步骤如下:
1、使能TIM3时钟
RCC->APB1ENR |= 1 2、配置对应引脚(PA6)的复用输出功能
GPIOA->CRL //PA6清0GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)GPIOA->ODR |= 1
3、设定计数器自动重装值及是否分频
TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)TIM3->PSC = psc;//预分频器,0为不分频
4、设置PWM的模式(有1和2两种模式,区别在于输出电平极性相反),根据需求选一种即可
注:TIMX_CCMR1决定CH1~CH2路,TIMX_CCMR2决定CH3~CH4路。

//TIM3->CCMR1 |= 6 TIM3->CCMR1 |= 7 TIM3->CCMR1 |= 1
5、输出使能设置
TIM3->CCER |= 1。

基于寄存器操作的STM32高级定时器TIM1的四路PWM输出程序讲解

基于寄存器操作的STM32高级定时器TIM1的四路PWM输出程序讲解

基于寄存器操作的STM32高级定时器TIM1的四路PWM输出程序讲解STM32高级定时器TIM1具有四个独立的PWM输出通道,可以用来控制四个不同的设备或驱动器。

在本篇文章中,我们将详细讲解如何使用寄存器操作实现TIM1的四路PWM输出。

首先,需要了解几个相关的概念。

STM32的定时器是通过寄存器进行配置和操作的,其中TIM1是高级定时器,具有更高级的功能和更多的寄存器。

PWM(脉冲宽度调制)是一种常见的控制技术,可实现模拟信号的数字化控制,通过调整高电平和低电平的时间比例来控制目标设备或驱动器的动作。

在开始编写程序之前,我们首先需要对TIM1进行初始化和配置。

以下是一个基本的初始化函数示例:```void TIM1_PWM_Init//开启TIM1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//初始化TIM1的配置TIM_TimeBaseInitTypeDef TIM_BaseStruct;TIM_OCInitTypeDef TIM_OCStruct;TIM_BaseStruct.TIM_Prescaler = 0;TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up;TIM_BaseStruct.TIM_Period = 999; // 设置周期为1000TIM_BaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;TIM_BaseStruct.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM1, &TIM_BaseStruct);//配置输出比较通道TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable;TIM_OCStruct.TIM_Pulse = 0; // 设置脉冲宽度,0表示低电平TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM1, &TIM_OCStruct);TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC2Init(TIM1, &TIM_OCStruct);TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC3Init(TIM1, &TIM_OCStruct);TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);TIM_OC4Init(TIM1, &TIM_OCStruct);TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);//启动定时器TIM_Cmd(TIM1, ENABLE);```上述代码是一个初始化TIM1的函数示例,其中包含了基本的配置步骤。

STM32系列TIM定时器整理

STM32系列TIM定时器整理

1、PWM输出模式TIM_Period配置是代表波形的周期,因此其数值一定要比输出配置中TIM_OCInitStructure.TIM_Pulse的数值大。

(如TIM_Period = 0x3E7则波形频率为TIMCLK/(0x3E7+1))且只要TIM_Period 不为零,则其TIMCLK为系统频率的一半。

TIM_Prescaler是在上述基础上再分频(如TIM_TimeBaseStructure.TIM_Prescaler = 0x2,以1中配置为例,则输出波形频率变为TIMCLK/(0x3E7+1)/(0x2+1))。

若此时TIM_OCInitStructure.TIM_Pulse = CCR1_V al;(例如CCR1_V al=15则占空比为:CCR1_V al/(TIM_Period+1))所以TIM_Prescaler之改变输出波形的周期,并不改变占空比。

2、TIM_OCMode_Toggle TIM输出比较触发模式此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。

在输出比较模式下,更新事件UEV对OCxREF和OCx输出没有影响。

即TIM_TimeBaseStructure.TIM_Period配置大小对输出波形的频率没有影响(但是TIM_Period的值一定要大于TIM_OCInitStructure.TIM_Pulse,否则还没来得及更新时间就产生中断,这样结果肯定就会错误)例如下面程序:vu16 CCR2_Val = 0x4000;TIM_TimeBaseStructure.TIM_Period = 0xFFF5;TIM_TimeBaseStructure.TIM_Prescaler = 0x02;TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/* Output Compare Toggle Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;TIM_OCInitStructure.TIM_Pulse = CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;TIM_OCInit(TIM2, &TIM_OCInitStructure);TIM2 Configuration: 输出比较模式:TIM2CLK = 36 MHz, Prescaler = 0x2, 所以TIM2 counter clock = 12 MHzCC1 update rate (更新频率)= TIM2 counter clock / CCR1_Val = 366.2 Hz3、TIM输出比较时间模式在这种模式下TIM的计数时钟频率为TIM2CLK/TIM_PrescalerConfig,且TIMCLK同前面一样,只要TIM_Period 不为零,就是系统时钟的一半。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32学习笔记(5):通用定时器PWM输出2011年3月30日TIMER输出PWM 1.TIMER输出PWM基本概念脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

简单一点,就是对脉冲宽度的控制。

一般用来控制步进电机的速度等等。

STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出。

1.1PWM输出模式STM32的PWM输出有两种模式,模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。

模式1和模式2的区别如下:110:PWM模式1-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。

111:PWM模式2-在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

由此看来,模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。

而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式,关于3种模式的具体资料,可以查看《STM32参考手册》的“14.3.9 PWM模式”一节,在此就不详细赘述了。

1.2PWM输出管脚PWM的输出管脚是确定好的,具体的引脚功能可以查看《STM32参考手册》的“8.3.7 定时器复用功能重映射”一节。

在此需要强调的是,不同的TIMx有分配不同的引脚,但是考虑到管脚复用功能,STM32提出了一个重映像的概念,就是说通过设置某一些相关的寄存器,来使得在其他非原始指定的管脚上也能输出PWM。

但是这些重映像的管脚也是由参考手册给出的。

比如说TIM3的第2个通道,在没有重映像的时候,指定的管脚是PA.7,如果设置部分重映像之后,TIM3_CH2的输出就被映射到PB.5上了,如果设置了完全重映像的话,TIM3_CH2的输出就被映射到PC.7上了。

1.3PWM输出信号PWM输出的是一个方波信号,信号的频率是由TIMx的时钟频率和TIMx_ARR预分频器所决定的,具体设置方法在前面一个学习笔记中有详细的交代。

而输出信号的占空比则是由TIMx_CRRx寄存器确定的。

其公式为“占空比=(TIMx_CRRx/TIMx_ARR)*100%”,因此,可以通过向CRR中填入适当的数来输出自己所需的频率和占空比的方波信号。

2.TIMER输出PWM实现步骤1.设置RCC时钟;2.设置GPIO时钟;3.设置TIMx定时器的相关寄存器;4.设置TIMx定时器的PWM相关寄存器。

第1步设置RCC时钟已经在前文中给出了详细的代码,在此就不再多说了。

需要注意的是通用定时器TIMx是由APB1提供时钟,而GPIO则是由APB2提供时钟。

注意,如果需要对PWM的输出进行重映像的话,还需要开启引脚复用时钟AFIO。

第2步设置GPIO时钟时,GPIO模式应该设置为复用推挽输出GPIO_Mode_AF_PP,如果需要引脚重映像的话,则需要用GPIO_PinRemapConfig()函数进行设置。

第3步设置TIMx定时器的相关寄存器时,和前一篇学习笔记一样,设置好相关的TIMx的时钟和技术模式等等。

具体设置参看“TIMER基本定时功能”的学习笔记。

第4步设置PWM相关寄存器,首先要设置PWM模式(默认情况下PWM是冻结的),然后设置占空比(根据前面所述公式进行计算),再设置输出比较极性:当设置为High时,输出信号不反相,当设置为Low时,输出信号反相之后再输出。

最重要是是要使能TIMx的输出状态和使能TIMx的PWM输出使能。

相关设置完成之后,就可以通过TIM_Cmd()来打开TIMx定时器,从而得到PWM输出了。

3.TIMER输出PWM源代码由于我现在手上的奋斗开发板是将PB.5接到LED上,因此需要使用TIM3的CH2通道,并且要进行引脚重映像。

打开TIM3之后,PWM输出,使得LED点亮,通过改变PWM_cfg()中的占空比可以调节LED的亮度。

#include "stm32f10x_lib.h"void RCC_cfg();void GPIO_cfg();void TIMER_cfg();void PWM_cfg();//占空比,取值范围为0-100int dutyfactor = 50;int main(){int Temp;RCC_cfg();GPIO_cfg();TIMER_cfg();PWM_cfg();//使能TIM3计时器,开始输出PWMTIM_Cmd(TIM3, ENABLE);while(1);}void RCC_cfg(){//定义错误状态变量ErrorStatus HSEStartUpStatus;//将RCC寄存器重新设置为默认值RCC_DeInit();//打开外部高速时钟晶振RCC_HSEConfig(RCC_HSE_ON);//等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS){//设置AHB时钟(HCLK)为系统时钟RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置高速AHB时钟(APB2)为HCLK时钟RCC_PCLK2Config(RCC_HCLK_Div1);//设置低速AHB时钟(APB1)为HCLK的2分频RCC_PCLK1Config(RCC_HCLK_Div2);//设置FLASH代码延时FLASH_SetLatency(FLASH_Latency_2);//使能预取指缓存FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//设置PLL时钟,为HSE的9倍频8MHz * 9 = 72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//使能PLLRCC_PLLCmd(ENABLE);//等待PLL准备就绪while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//设置PLL为系统时钟源RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//判断PLL是否是系统时钟while(RCC_GetSYSCLKSource() != 0x08);}//开启TIM3的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开启GPIOB的时钟和复用功能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); }void GPIO_cfg(){GPIO_InitTypeDef GPIO_InitStructure;//部分映射,将TIM3_CH2映射到PB5// GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//选择引脚5GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//输出频率最大50MHzGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//复用推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);}void TIMER_cfg(){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//重新将Timer设置为缺省值TIM_DeInit(TIM3);//采用内部时钟给TIM3提供时钟源TIM_InternalClockConfig(TIM3);//预分频系数为0,即不进行预分频,此时TIMER的频率为72MHzTIM_TimeBaseStructure.TIM_Prescaler = 0;//设置时钟分割TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//设置计数器模式为向上计数模式TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//设置计数溢出大小,每计7200个数就产生一个更新事件,即PWM的输出频率为10kHz TIM_TimeBaseStructure.TIM_Period = 7200 - 1;//将配置应用到TIM3中TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);}void PWM_cfg(){TIM_OCInitTypeDef TimOCInitStructure;//设置缺省值TIM_OCStructInit(&TimOCInitStructure);//PWM模式1输出TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//设置占空比,占空比=(CCRx/ARR)*100%或(TIM_Pulse/TIM_Period)*100% TimOCInitStructure.TIM_Pulse = dutyfactor * 7200 / 100;//TIM输出比较极性高TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//使能输出状态TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//TIM3的CH2输出TIM_OC2Init(TIM3, &TimOCInitStructure);//设置TIM3的PWM输出为使能TIM_CtrlPWMOutputs(TIM3,ENABLE);}。

相关文档
最新文档