STM32 PWM控制LED实验:实现占空比调节

版权申诉
0 下载量 111 浏览量 更新于2024-11-12 2 收藏 265KB RAR 举报
该文件标题为"PWM.rar_pwm_stm32 pwm",描述为"STM32的经典小实验,pwm小实验,喜欢的可以尝试下",标签为"pwm stm32_pwm",且提供的文件名称列表包含"【08】PWM控制LED实验(占空比可调)"。根据这些信息,我们可以推断出以下知识点: 1. PWM(脉冲宽度调制)的定义及其应用: PWM是一种在电子电路中常用的技术,主要用于控制电机速度、LED亮度、电源供应等。其核心原理是通过调节脉冲信号的占空比(即在一个周期内信号为高电平的时间比例)来控制输出电压或功率的平均值。这种技术特别适合用于控制直流电机和调节LED的亮度。 2. PWM与STM32微控制器的关联: STM32系列微控制器是STMicroelectronics(意法半导体)生产的一系列基于ARM Cortex-M内核的32位微控制器。它具备强大的定时器功能,可以非常方便地生成PWM信号。因此,在该实验中,STM32被用作PWM信号的生成和控制设备。 3. 实验目的及操作: 实验的目的是通过STM32微控制器实现对LED灯的亮度调节,这通常涉及到使用PWM信号控制LED的占空比。占空比可调意味着实验者可以通过改变占空比来观察LED亮度的变化,从而加深对PWM技术的理解。 4. 硬件和软件需求: - 硬件方面:需要STM32开发板、LED灯、电阻、连线和必要的电源设备。 - 软件方面:需要安装支持STM32的开发环境,如Keil uVision、STM32CubeIDE等,以及相应的库文件和固件。在进行该实验前,可能还需要安装或配置用于编程和调试STM32的工具链。 5. PWM信号的参数设置: - 频率(Frequency):决定了PWM信号周期的长度。频率越高,周期越短。 - 占空比(Duty Cycle):指在一个周期内,信号输出高电平的时间与周期总时间的比例。占空比越大,输出功率越高,相应地,LED的亮度也就越亮。 - 波形(Waveform):通常为方波。 6. 实验步骤: - 初始化STM32的定时器,设置合适的PWM频率和占空比。 - 配置GPIO(通用输入输出)端口为PWM输出模式。 - 编写代码来改变PWM的占空比,从而控制LED的亮度。 - 通过运行代码,观察不同占空比下LED的变化,并记录结果。 7. 实验结果的应用: 通过该实验,学习者可以了解到PWM技术在实际中的应用,例如在LED调光、电机速度控制等领域。掌握PWM技术对于嵌入式系统开发人员而言是一项重要的技能。 8. 安全和注意事项: 在进行硬件实验时,需要确保电源电压与LED和STM32开发板的规格相匹配,防止过压损坏设备。同时,要正确连接电路,避免短路或者误操作导致设备损坏。 通过这个实验,学习者能够深入理解PWM技术,并将这一技术应用到具体的硬件控制场景中。此外,该实验还可以作为入门STM32微控制器编程的一个很好的起点。

#include "stm32f10x.h" // Device header #include "Delay.h" #include "pwm.h" #include "OLED.h" #include "KEY.h" uint16_t Num = 300; // 初始占空比设置为30% int main(void) { Key_Init(); PWM_Init(); while(1) { Num+=100; TIM_SetCompare1(TIM3, Num); Delay_s(1); } }#include "stm32f10x.h" #include "Delay.h" void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //2.配置GPIO(PA6作为TIM3_CH1) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //3.配置定时器时基 TIM_TimeBaseStructure.TIM_Period = 999; //自动重装载值(ARR) TIM_TimeBaseStructure.TIM_Prescaler = 719; //预分频器(PSC) TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //4.配置PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; //初始占空比50% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_Cmd(TIM3, ENABLE); TIM_CtrlPWMOutputs(TIM3, ENABLE); }#include "stm32f10x.h" // Device header #include "Delay.h" void Key_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } uint8_t Key_GetNum(void) { uint8_

2025-03-09 上传