STM32驱动3wled灯模块代码
时间: 2024-12-08 21:14:25 浏览: 97
STM32驱动3W LED灯模块通常涉及硬件初始化、GPIO配置、PWM控制以及中断管理等步骤。这里是一个简化的示例代码,假设我们使用的是STM32F103系列单片机,LED连接到PA8引脚,并通过PWM控制亮度:
```c
#include "stm32f1xx.h"
// 定义LED灯寄存器地址
#define LED_PIN GPIOA_BASE
#define LED_PORT PINC
// 初始化GPIO
void led_init(void) {
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // PA8
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_PIN, &GPIO_InitStructure);
GPIO_PinAFConfig(LED_PIN, GPIO_PinSource8, GPIO_AF_None); // 设置PA8作为通用IO
}
// PWM设置
void pwm_config(uint16_t duty_cycle) {
TIM_TimeBaseInitTypeDef.TIM_TimeBaseStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure.TIM_Period = (uint16_t)(4096 - duty_cycle); // 4096是PWM的最大周期,duty_cycle是占空比
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClockDivisionConfig(TIM2, TIM_CKD_DIV1); // 分频系数1,得到最精细的定时精度
TIM_PulseWidthCompensationCmd(TIM2, DISABLE); // 关闭补偿
TIM_OC2Init(&TIM_OCInitStructure); // 配置OC2通道为上升沿触发
TIM_OC2PreloadConfig(TIM2, ENABLE); // 先加载值
TIM_ARRPreloadCmd(TIM2, ENABLE); // 停止时预装载计数器
TIM_OC2Cmd(ENABLE); // 开启PWM输出
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 启动更新中断
}
// 中断处理函数,当PWM完成一次周期更新时调用
void HAL_TIM Update interrupt handler() {
GPIO_ToggleBits(LED_PORT, GPIO_Pin_8); // LED亮灭
}
int main(void) {
led_init();
pwm_config(1024); // 设置初始占空比为50%,即LED半亮度
while (1) {
// ...其他主程序逻辑...
}
}
阅读全文
相关推荐










