STM32通用定时器PWM波输出1
一、简介
根据STM32中文参考手册,完成STM32通用定时器的PWM输出代码。
二、
1.STM32中文参考手册的PWM部分
三、代码的编写
1.先使能TIM3定时器
void PWM1_init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3
2.因为这次实验要用到PB0,PB1两个端口。所以配置PB0,PB1为复用功能输出。
RCC->APB2ENR|=1<<3;//Enable PB
GPIOB->CRL&=0xffffff00;//PB0 PB1
GPIOB->CRL|=0x000000bb;
3.脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空
比的信号。
TIM3->ARR=arr;
TIM3->PSC=psc;
4.在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设
置每个OCx输出通道产生一路PWM。这里用的是PWM模式1。
TIM3->CCMR2|=6<<4;//TIM3_CH3->PWM mode:1
TIM3->CCMR2|=6<<12;//TIM3_CH4->PWM mode:1
5.设置TIMx_CCMRx寄存器OCxPE位以使能相应的预。
TIM3->CCMR2|=1<<3;//Output compare 3 preload enable
TIM3->CCMR2|=1<<11;//Output compare 4 preload enable
6.设置TIMx_CR1寄存器的ARPE位。
TIM3->CR1|=0x80;//ARPE enable
7设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器
TIM3->EGR|=1<<0;.//我在程序中试过了,不加也可以产生PWM波,还不清楚它的作用是什么。
8.OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效
9.TIMx_CCER寄存器中的CCxE位控制OCx输出使能.
TIM3->CCER|=0x1100;//OC3 OC4 enable此处8 9合并一起写入寄存器里面去了
10.最后使能TIM3CR1
TIM3->CR1|=0x01;//Enable TIM3
}
至此TIM3的PWM配置就配置完了
最后附加所有的程序。
PWM配置程序
void PWM1_init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3
RCC->APB2ENR|=1<<3;//Enable PB
GPIOB->CRL&=0xffffff00;//PB0 PB1
GPIOB->CRL|=0x000000bb;
TIM3->ARR=arr;
TIM3->PSC=psc;
// TIM3->CCR3= //PWM1B->TIM3_CH3
// TIM3->CCR4= //PWM1A->TIM3_CH4
TIM3->CCMR2|=6<<4;//TIM3_CH3->PWM mode:1
TIM3->CCMR2|=6<<12;//TIM3_CH4->PWM mode:1
TIM3->CCMR2|=1<<3;//Output compare 3 preload enable
TIM3->CCMR2|=1<<11;//Output compare 4 preload enable
TIM3->CR1|=0x80;//ARPE enable
TIM3->EGR|=1<<0;
TIM3->CCER|=0x1100;//OC3 OC4 enable
TIM3->CR1|=0x01;//Enable TIM3
}
主程序
#include "stm32f10x.h"
#include "timer.h"
int main()
{
Stm32_Clock_Init(9);
delay_init(72);
PWM1_init(1000,0);
PWM1B=100;
PWM1A=100;
while(1);
}
PB0和PB1的仿真输出波形图
同时附上别人的代码
void PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出 PWM模式
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->PSC=psc;//预分频器不分频
TIM3->CCMR1|=6<<12; //CH2 PWM2模式(高电平为占空比)
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCER|=1<<4; //OC2 输出使能
TIM3->CR1=0x80; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
}
---------------------
作者:阅微草堂ZSF
来源:CSDN
原文:https://blog.csdn.net/zhengshifeng123/article/details/53991105