使用芯片: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.查看数据手册看定时器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; //开启定时器
使用芯片: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.查看数据手册看定时器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; //开启定时器
举报