#include "ws2812.h" void led_init(void) { for(uint8_t i = 0; i < LED_NUM; i++) { led_set(i, 0x00, 0x00, 0x00); } } void led_set(uint8_t led_id, uint8_t value_r, uint8_t value_g, uint8_t value_b) { uint16_t* p = (data_buffur + RESET_PULSE_LEN) + (LED_DATA_LEN * led_id); for (uint16_t i = 0; i < 8; i++) { p[i] = (value_g << i) & (0x80)? ONE_PULSE: ZERO_PULSE; p[i + 8] = (value_r << i) & (0x80)? ONE_PULSE: ZERO_PULSE; p[i + 16] = (value_b << i) & (0x80)? ONE_PULSE: ZERO_PULSE; } } void led_on(void) { HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_1, (uint32_t *)data_buffur, DATA_BUFFER_LEN); }
时间: 2024-03-07 20:52:42 浏览: 134
a_led_control.rar_LED_contr_control
这段代码是WS2812 LED驱动的函数实现部分。led_init函数用于初始化所有LED灯为关闭状态,即颜色值为0。led_set函数用于设置指定LED灯的颜色值,其中根据颜色值的每个位的值,设置对应的脉冲宽度,从而通过时序控制WS2812 LED的颜色。led_on函数则是通过定时器PWM输出的方式,将数据缓冲区中的数据发送到WS2812 LED上,从而实现控制LED灯颜色的效果。
阅读全文