看了很多用RMT点亮WS2812的教程,我觉得网上很多教程没有讲清楚RMT的使用流程,所以按自己的理解写了一段精简的RMT点亮WS2812的代码,鄙人代码水平不高,所以希望这个简陋的示例能帮助到入门ESP-IDF的新手。
用RMT的TX通达发送无载波信号主要流程:初始化TX通道,RMT编码器;配置TX通道,RMT编码器;启用TX通道;发射信号前设定好发射配置;传入发射配置等参数发射信号。
示例目标为用GRB值{20, 50, 60}点亮ESP32-S3板载WS2812B灯珠(管脚编号48)。
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/rmt_encoder.h" //RMT编码器驱动导入
#include "driver/rmt_tx.h" //RMT TX通道驱动导入
#include "string.h" //memset函数的前置
#define LED_PIN 48 //灯珠的引脚编号
#define TX_FREQUENT 10 * 1000 * 1000 //信号频率/分辨率
#define LED_NUMBER 1 //灯珠数量
rmt_symbol_word_t zero = {
.duration0 = 0.3 * TX_FREQUENT / 1000000 , //第一阶段0.3us
.level0 = 1, //第一阶段高电平
.duration1 = 0.7 * TX_FREQUENT / 1000000 , //第二阶段0.7us
.level1 = 0 //第二阶段低电平
}; //二进制0的表示
rmt_symbol_word_t one = {
.duration0 &