当前位置:   article > 正文

STM32F103定时器的PWM用法_stm32f103 pwm引脚

stm32f103 pwm引脚

一、硬件资源简介

	使用STM32F103ZET6核心板,此核心板主控芯片为LQFP144封装。STM32F103ZET6有8个定时器,其中TIM1,
	TIM8为高级定时器,TMI2,TIM3,TIM4,TIM5为通用定时器,TIM6,TIM7为基本定时器。因为通用定时器的重映射
	功能只能在100脚或144脚芯片使用,所以使用此型号,后续举例也以通用定时器功能为主。
  • 1
  • 2
  • 3

二、通用定时器功能简介

通用定时器功能简介

三、定时器设置步骤

	1.GPIO设置并初始化;
	2.定时器设置并初始化;
	3.输出比较结构体设置并初始化;
  • 1
  • 2
  • 3

四、功能实现

	以PWM波为例实现两个功能:
	1.四路频率,占空比可调的PWM波;
	2.四路频率,相位差可调的PWM波;
	PWM波频率 = 72M / (arr+1) / (pre+1) = 72M /(1000-1+1) /(72-1+1) = 1000Hz
	(72M为系统默认频率)

	均采用TIM2的部分重映射2,一个定时器开启四个通道
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

五、代码与现象

1.四路频率,占空比可调的PWM波;

<1>具体代码

//四路频率,占空比可调的PWM波;
#include "pwm.h"
#include "stm32f10x.h"

void TIM2_PWM_Init(u16 arr,u16 psc)

{
   
	
   	GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO结构体
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定义时基结构体
	TIM_OCInitTypeDef TIM_OCInitStructure; //定义输出比较结构体
	
/*********************************************CH1*******************************************/
	
	//使能GPIOA外设,使能复用功能	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO , ENABLE); 
	//TIM2部分重映射2使能
	GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2,ENABLE); 
	
	//选择定时器2的CH1通道作为PWM波的输出引脚,TIM2-->PA0
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM2_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用模式
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//带宽10MHz
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化结构体GPIOA
	
	//初始化定时器
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器2
	TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载寄存器的值
	TIM_TimeBaseStructure.TIM_Prescaler = psc; //预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;	//向上计数
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//定时器2结构体初始化
	
	
	//设置TMI2_CH1的PWM模式,使能TMI2的CH1输出
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM模式1
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //极性为高
	TIM_OC1Init(TIM2, &TIM_OCInitStructure); //根据结构体初始化
	TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR2上的预装值
			



/*********************************************CH2************************
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号