一、前序
1.1 实验目的
- 实验目的
使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。
频率:2kHz,PSC=71,ARR=499 - 硬件清单
上官二号
ST-Link
1.2 输出比较原理
1.3 PWM介绍
PWM波形(Pulse Width Modulation,脉冲宽度调制波形)是一种占空比可变的脉冲波形。这种调制方式通过改变脉冲的宽度来控制电路中的信号强度和频率。具体来说,PWM波形中的高电平持续时间和低电平持续时间可以根据需要进行调整,从而实现对模拟信号电平的数字编码。
PWM波形在各种领域都有广泛的应用,包括电源管理、电机控制、LED亮度调节等。此外,生成PWM波形的方法有多种,例如使用波形发生器、单片机或可编程逻辑器件等。
1.4 定时器输出PWM波配置步骤
二、代码
2.1 pwm.c
//修改CCR的值
void pwm_compare_set(uint16_t value)
{
__HAL_TIM_SET_COMPARE(&pwm_handle, TIM_CHANNEL_3, value);
}
2.2 main.c
#include "sys.h"
#include "led.h"
#include "delay.h"
#include "pwm.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init();
pwm_init(500 -1, 72 -1);
uint16_t i = 0;
while(1)
{
for(i = 0; i < 300; i++)
{
pwm_compare_set(i);
delay_ms(10);
}
for(i = 0; i < 300; i++)
{
pwm_compare_set(300 - i);
delay_ms(10);
}
// led1_on();
// led2_off();
// delay_ms(500);
// led2_on();
// led1_off();
// delay_ms(500);
}
}
2.3 led.c
- 低电平有效
void led1_on(void)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
}
三、总结
- pwm即高电平占有效周期的占空比
- 修改CCR的值要用到__HAL_TIM_SET_COMPARE函数,main.c函数中再调用