使用通用定时器产生 PWM 输出:通过 TIM3 的通道 1 输出PWM 信号,控制 D7 指示灯的亮度。
PWM 是 Pulse Width Modulation 的缩写,脉冲宽度调制,简称脉宽调制。PWM 是一种对模拟信号电平进行数字编码的方
法,利用微处理器的数字输出来对模拟电路进行控制。
方波的占空比被调制,用来对一个具体模拟信号的电平进行编码,PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OF)。
电压或电流源是以一种通(ON)或断(OF)的重复脉冲序列被加到模拟负载上去的。
只要带宽足够,任何模拟值都可以使用 PWM 进行编码。
a 是一个正弦波即模拟信号,b 是一个数字脉冲波形即数字信号。
计算机只识别1 和 0,对于 STM32F1 芯片,要么输出高电平(3.V),要么输出低电平(0)。
假如要输1.5V 的电压,就进行相应处理,比如本章的PWM 输出。从上图看,只要保证数字信号脉宽足够就可以使用 PWM 进行编码,从而输出 1.5V 的电压。
STM32F1 除了基本定时器 TIM6 和 TIM7,其他定时器都可以产生 PWM 输出。
其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4 路的 PWM 输出,
PWM 的输出就是对外输出脉宽可调(即占空比调节)的方波信号,信号频率是由自动重装寄存器 ARR 的值决定,占空比由比较寄存器 CCRx 的值决定。
占空比其实就是一个周期内高电平时间与周期的比值
PWM 输出比较模式总共有 8 种,具体由寄存器 CMRx 的位OCxM[2:0]配置。
最常用的两种 PWM 输出模式:PWM1 和 PWM2。
PWM 呼吸灯实验
APP文件夹pwm.c文件(初始化 PWM)和pwm.h文件。
#include "pwm.h"
//TIM3通道1的pwm初始化函数
void TIM3_CH1_PWM_Init(u16 per,u16 psc)//输入:重装栽值per和分频系数psc
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* 开启时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd