AF32F421通过PWM_DMA控制WS2812B

#include "timer1.h"
#include "at32f421.h"
#include "io.h"
#define WS2812_PWM_PR 149 // 不分频  120Mhz/149+1=800KHz
#define WS2812_PWM_CODE_0 39  // 0码  26%*(WS2812_PWM_PR+1)
#define WS2812_PWM_CODE_1 111 // 1码  (WS2812_PWM_PR+1)-WS2812_PWM_CODE_0
#define WS2812_LEDS_NUM 1 // LED 数量
uint8_t brightness = 0;                                  // 当前亮度
int8_t direction = 1;                                    // 亮度变化方向,1 为增加,-1 为减少
uint16_t ws2812_buffer[WS2812_LEDS_NUM * 24 + 60] = {0}; // LEDS(24个代表一个灯) +  复位
// 将字节数据编码为WS2812B协议要求的PWM波形序列
void WS2812_EncodeByte(uint8_t data, uint16_t *buf)
{
int i;
for (i = 0; i < 8; i++)
{
buf[i] = (data & (1 << (7 - i))) ? WS2812_PWM_CODE_1 : WS2812_PWM_CODE_0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值