STM32通用定时器PWM波输出1

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 

猜你喜欢

转载自blog.csdn.net/weixin_39516045/article/details/85256175