STM32定时器的PWM的设计驱动呼吸灯(标准库开发)

定时器的PWM配置流程

1、开启定时器时钟

2、开启定时器输出PWM波的GPIO的时钟

3、初始化定时器输出PWM波的GPIO(利用结构体配置)

4、初始定时器时基单元(利用结构体配置)

5、初始化定时器输出比较单元(利用结构体配置)

注:输出比较单元是输出PWM波的主体,利用比较大小的方式输出高低电平

6、开启定时器

现象:

        定时器2的第一个通道(GPIOA_Pin_0)连接LED的正极,此引脚输出频率1000Hz的PWm波,PWM的占空比先一次增加,在依次减小。 

        OLED用不着,不用管。懒的拆下来。

 源码:

主程序

#include "stm32f10x.h"  
#include "Delay.h"                  // Device header 
#include "PWM.h"                  


int main()
{
	uint16_t i;
	
	PWM_Init();
	while(1)
	{
		for(i=0;i<=100;i++)
		{
			PWM_CCR(i);
			Delay_ms(5);
		}
		for(i=0;i<=100;i++)
		{
			PWM_CCR(100-i);
			Delay_ms(5);
		}
	}
}

PWM.c

#include "stm32f10x.h"                  // Device header
#include "PWM.h"                  // Device header

void PWM_Init()
{
	TIM_TimeBaseInitTypeDef  TIM_BaseInitStruct;//定时器初始化结构体
	GPIO_InitTypeDef				 GPIO_InitStruct;		//GPIO初始化结构体
	TIM_OCInitTypeDef  			 TIM_OCInitStruct;	//定时器输出比较初始化结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出,让GPIO的控制权交给外设(定时器)
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	TIM_BaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;		//定时器分频
	TIM_BaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_BaseInitStruct.TIM_Period=100;									//周期(ARR)
	TIM_BaseInitStruct.TIM_Prescaler=720-1;							//定时器预分频(PSC)  时基(定时)频率:72M/720=100K
	TIM_BaseInitStruct.TIM_RepetitionCounter=0;
	TIM_TimeBaseInit(TIM2,&TIM_BaseInitStruct);
	
	TIM_OCStructInit(&TIM_OCInitStruct);//初始化通道1的结构体的值
	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//选择比较输出模式
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;//REF高电平有效
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;//使能
	TIM_OCInitStruct.TIM_Pulse=0;											//高电平时间(CCR)	占空比:CCR/ARR,后面有函数封装来控制CRR的值
	TIM_OC1Init(TIM2,&TIM_OCInitStruct);
	
	TIM_Cmd(TIM2,ENABLE);
}

void PWM_CCR(uint16_t Compare)
{
	TIM_SetCompare1(TIM2,Compare);
}


 PWM.h

#ifndef __PWM_
#define __PWM_



void PWM_CCR(uint16_t Compare);
void PWM_Init();


#endif

猜你喜欢

转载自blog.csdn.net/m0_58832575/article/details/124412163