STM32TIM定时器输出比较——PWM实现呼吸灯

输出比较简介

1、(Outout Compar输出比较
2、输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
3、每个高级定时器和通用定时器都拥有4个输出比较通道
4、高级定时器的前3个通道额外拥有死区生成和互补输出的功能

通用定时器

在这里插入图片描述
输出比较电路

基本定时器

在这里插入图片描述
都可以输出4路PWM波形
我们这里使用基本定时器输出PWM波形

在这里插入图片描述

高级定时器比较通道

在这里插入图片描述

通用定时器的比较电路

在这里插入图片描述

输出比较的各种模式

在这里插入图片描述

PWM基本结构

在这里插入图片描述

PWM的参数设计

在这里插入图片描述

编写PWM.c

#include "pwm.h"
#include "stm32f10x.h"
void PWM_Init()
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIO时钟	A
	
	GPIO_InitTypeDef GPIO_InitStructure;//配置引脚结构体
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选择我们的引脚0
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//电平反转的速度
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	
	TIM_InternalClockConfig(TIM2);//选择内部时钟
	
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;//定义结构体  然后填写参数
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;//选择1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数器模式 这里选择为向上计数
	TIM_TimeBaseInitStruct.TIM_Period = 100-1;//arr -1是因为有偏差  自动重装载值
	TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1;//psc  预分频系数  72M分频7200得到10K的
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;//重复计数器高级定时器才有,这里直接给0
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//配置实基单元

	TIM_OCInitTypeDef TIM_OCInitStruct;
	TIM_OCStructInit(&TIM_OCInitStruct);//配置结构体方便使用 切换提高代码利用率 不想给单个结构体赋值就使用这个函数
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//设置输出比较的模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCNPolarity_High;//设置输出比较的极性
	TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//设置输出使能
	TIM_OCInitStruct.TIM_Pulse = 0;//设置CCR   PWM频率=PSC/PSC+1/ARR+1
	TIM_OC1Init(TIM2, &TIM_OCInitStruct);//PWM占空比= CCR/ARR+1
										//PWM分辨率=1/ARR+1
	TIM_Cmd(TIM2, ENABLE);//启动定时器
	
	/*
	
	PWM频率=PSC/PSC+1/ARR+1
	PWM占空比= CCR/ARR+1
	PWM分辨率=1/ARR+1
	
	arr = 100-1
	PSC = 720-1
	CRR = 50
	现在是频率为1Khz,占空比为50%的PWM波形
	
	*/
	
}

//编写函数更改CCR的值
void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2,Compare);

}

编写PWM.h

#ifndef __PWM_H
#define __PWM_H
#include "stm32f10x.h"                  // Device header
void PWM_Init(void);
void PWM_SetCompare1(uint16_t Compare);//设置CCR的值

#endif

实现效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值