PWM输出实验呼吸灯

img


PWM输出实验,呼吸灯闪烁,单片机语言stm32,主函数修改,麻烦各位帮个忙

根据您的描述,我了解到您正在进行 PWM 输出实验,想要实现呼吸灯闪烁的效果,并修改主函数。下面是可能的解决方案:

首先,在主函数中添加以下代码,用于初始化 PWM 输出相关的硬件资源:


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 使能TIM3时钟

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; // 设置GPIOB.5为PWM输出引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 设置GPIOB.5为复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置GPIOB.5输出速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = 899; // 设置PWM周期为899
TIM_TimeBaseStructure.TIM_Prescaler = 0; // 设置PWM分频系数为0
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 设置时钟分频续作为TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 设置计数器计数模式为向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 设置PWM输出模式为模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 使能PWM输出
TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 设置PWM极性为高电平有效
TIM_OC2Init(TIM3, &TIM_OCInitStructure);

TIM_Cmd(TIM3, ENABLE); // 使能TIM3
接下来,在主函数的 while 循环中添加以下代码,用于控制 PWM 输出的占空比,实现呼吸灯闪烁的效果:

int i = 0;
int dir = 1;
while (1) {
    TIM_SetCompare2(TIM3, i);
    if (dir == 1) {
        i++;
        if (i >= 300) {
            dir = 0;
        }
    } else {
        i--;
        if (i <= 0) {
            dir= 1;
        }
    }
    delay_ms(10); // 延时10毫秒,控制呼吸灯闪烁的速度
}
最后,需要注意的是,您需要在代码中添加相关的头文件和函数定义,以确保代码可以正常编译和运行。例如,您可能需要添加以下头文件:

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "timer.h"

同时,您需要在代码中定义相关的函数,例如 delay_ms()、LED_Init()、TIM3_PWM_Init() 等函数。这些函数的具体实现可以根据您的硬件资源和需求进行调整。