STM32F207使用定时器1产生PWM波形

 使用芯片:stm32f207zet6

使用定时器1的通道1

配置步骤

1.配置定时器的基本寄存器

TIM1->PSC=59;  //配置分频数
TIM1->ARR=60;  //配置自动重装值
TIM1->CNT=0;   //计数值清零

2.配置PWM的相关寄存器

TIM1->CR1&=~(0x3<<5); //配置PWM模式边沿对齐模式
TIM1->CR1&=~(1<<4);   //向上计数

3.配置通道1的相关寄存器

//配置输出通道1
TIM1->CCMR1&=~(1<<0); //配置方向为输出
TIM1->CCMR1|=1<<3;    //开启PWM预装载使能
TIM1->CCMR1|=0x7<<4;  //配置PWM模式2
TIM1->CCER|=1<<0;     //开启-OC1信号输出到对应的输出引脚
TIM1->CCER|=1<<2;     
TIM1->CCR1=60/2;     //默认占空比给50%

4.配置通道1对应的IO口

    4.1.查看数据手册看定时器1的通道1是那个引脚

我这里是PE9引脚的复用2(AF2)上,定时器1为高级定时器,器功能也是比普通的定时器功能更高一点,这里的通道1有一个TIM1_CH1和TIM1_CH1N这两个引脚是专门用作驱动电机的,可以通过配置对应的寄存器去做处理,可以配置成TIM1_CH1和TIM1_CH1N输出相同和相反的电平

     4.2.根据AFRL和AFRH寄存器将IO口配置成对应的复用模式(AF2) 

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_TIM1);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOE,&GPIO_InitStructure);

5.使能定时器

//配置定时器的BDTR寄存器
/*
和普通的定时器多了这一个步骤,有些配置完定时器后仿真时可以发现定时器在计数,IO口模式也是对的,也复用到了对应的模式下,但是IO口的电平就是没有变化,原因就是这里了
*/
TIM_CtrlPWMOutputs(TIM1, ENABLE); 

//开启定时器
TIM1->CR1|=1<<0;       //开启定时器

 

猜你喜欢

转载自blog.csdn.net/weixin_42174355/article/details/85758727