chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一段ESP32S2代碼

丙丁先生的自學(xué)旅程 ? 來(lái)源:丙丁先生的自學(xué)旅程 ? 作者:丙丁先生的自學(xué)旅 ? 2025-11-11 07:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

/*

* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD

*

* SPDX-License-Identifier: Apache-2.0

*/


#include "esp_check.h"

#include "led_strip_rmt_encoder.h"


static const char *TAG = "led_rmt_encoder";


typedef struct {

rmt_encoder_t base;

rmt_encoder_t *bytes_encoder;

rmt_encoder_t *copy_encoder;

int state;

rmt_symbol_word_t reset_code;

} rmt_led_strip_encoder_t;


static size_t rmt_encode_led_strip(rmt_encoder_t *encoder, rmt_channel_handle_t channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_encoder_handle_t bytes_encoder = led_encoder->bytes_encoder;

rmt_encoder_handle_t copy_encoder = led_encoder->copy_encoder;

rmt_encode_state_t session_state = 0;

rmt_encode_state_t state = 0;

size_t encoded_symbols = 0;

switch (led_encoder->state) {

case 0: // send RGB data

encoded_symbols += bytes_encoder->encode(bytes_encoder, channel, primary_data, data_size, &session_state);

if (session_state & RMT_ENCODING_COMPLETE) {

led_encoder->state = 1; // switch to next state when current encoding session finished

}

if (session_state & RMT_ENCODING_MEM_FULL) {

state |= RMT_ENCODING_MEM_FULL;

goto out; // yield if there's no free space for encoding artifacts

}

// fall-through

case 1: // send reset code

encoded_symbols += copy_encoder->encode(copy_encoder, channel, &led_encoder->reset_code,

sizeof(led_encoder->reset_code), &session_state);

if (session_state & RMT_ENCODING_COMPLETE) {

led_encoder->state = 0; // back to the initial encoding session

state |= RMT_ENCODING_COMPLETE;

}

if (session_state & RMT_ENCODING_MEM_FULL) {

state |= RMT_ENCODING_MEM_FULL;

goto out; // yield if there's no free space for encoding artifacts

}

}

out:

*ret_state = state;

return encoded_symbols;

}


static esp_err_t rmt_del_led_strip_encoder(rmt_encoder_t *encoder)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_del_encoder(led_encoder->bytes_encoder);

rmt_del_encoder(led_encoder->copy_encoder);

free(led_encoder);

return ESP_OK;

}


static esp_err_t rmt_led_strip_encoder_reset(rmt_encoder_t *encoder)

{

rmt_led_strip_encoder_t *led_encoder = __containerof(encoder, rmt_led_strip_encoder_t, base);

rmt_encoder_reset(led_encoder->bytes_encoder);

rmt_encoder_reset(led_encoder->copy_encoder);

led_encoder->state = 0;

return ESP_OK;

}


esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *config, rmt_encoder_handle_t *ret_encoder)

{

esp_err_t ret = ESP_OK;

rmt_led_strip_encoder_t *led_encoder = NULL;

ESP_GOTO_ON_FALSE(config && ret_encoder, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument");

ESP_GOTO_ON_FALSE(config->led_model < LED_MODEL_INVALID, ESP_ERR_INVALID_ARG, err, TAG, "invalid led model");

led_encoder = calloc(1, sizeof(rmt_led_strip_encoder_t));

ESP_GOTO_ON_FALSE(led_encoder, ESP_ERR_NO_MEM, err, TAG, "no mem for led strip encoder");

led_encoder->base.encode = rmt_encode_led_strip;

led_encoder->base.del = rmt_del_led_strip_encoder;

led_encoder->base.reset = rmt_led_strip_encoder_reset;

rmt_bytes_encoder_config_t bytes_encoder_config;

uint32_t reset_ticks = config->resolution / 1000000 * 280 / 2; // reset code duration defaults to 280us to accomodate WS2812B-V5

if (config->led_model == LED_MODEL_SK6812) {

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.3 * config->resolution / 1000000, // T0H=0.3us

.level1 = 0,

.duration1 = 0.9 * config->resolution / 1000000, // T0L=0.9us

},

.bit1 = {

.level0 = 1,

.duration0 = 0.6 * config->resolution / 1000000, // T1H=0.6us

.level1 = 0,

.duration1 = 0.6 * config->resolution / 1000000, // T1L=0.6us

},

.flags.msb_first = 1 // SK6812 transfer bit order: G7...G0R7...R0B7...B0(W7...W0)

};

} else if (config->led_model == LED_MODEL_WS2812) {

// different led strip might have its own timing requirements, following parameter is for WS2812

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.3 * config->resolution / 1000000, // T0H=0.3us

.level1 = 0,

.duration1 = 0.9 * config->resolution / 1000000, // T0L=0.9us

},

.bit1 = {

.level0 = 1,

.duration0 = 0.9 * config->resolution / 1000000, // T1H=0.9us

.level1 = 0,

.duration1 = 0.3 * config->resolution / 1000000, // T1L=0.3us

},

.flags.msb_first = 1 // WS2812 transfer bit order: G7...G0R7...R0B7...B0

};

} else if (config->led_model == LED_MODEL_WS2811) {

// different led strip might have its own timing requirements, following parameter is for WS2811

bytes_encoder_config = (rmt_bytes_encoder_config_t) {

.bit0 = {

.level0 = 1,

.duration0 = 0.5 * config->resolution / 1000000., // T0H=0.5us

.level1 = 0,

.duration1 = 2.0 * config->resolution / 1000000., // T0L=2.0us

},

.bit1 = {

.level0 = 1,

.duration0 = 1.2 * config->resolution / 1000000., // T1H=1.2us

.level1 = 0,

.duration1 = 1.3 * config->resolution / 1000000., // T1L=1.3us

},

.flags.msb_first = 1

};

reset_ticks = config->resolution / 1000000 * 50 / 2; // divide by 2... signal is sent twice

} else {

assert(false);

}

ESP_GOTO_ON_ERROR(rmt_new_bytes_encoder(&bytes_encoder_config, &led_encoder->bytes_encoder), err, TAG, "create bytes encoder failed");

rmt_copy_encoder_config_t copy_encoder_config = {};

ESP_GOTO_ON_ERROR(rmt_new_copy_encoder(?_encoder_config, &led_encoder->copy_encoder), err, TAG, "create copy encoder failed");


led_encoder->reset_code = (rmt_symbol_word_t) {

.level0 = 0,

.duration0 = reset_ticks,

.level1 = 0,

.duration1 = reset_ticks,

};

*ret_encoder = &led_encoder->base;

return ESP_OK;

err:

if (led_encoder) {

if (led_encoder->bytes_encoder) {

rmt_del_encoder(led_encoder->bytes_encoder);

}

if (led_encoder->copy_encoder) {

rmt_del_encoder(led_encoder->copy_encoder);

}

free(led_encoder);

}

return ret;

}



審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4940

    瀏覽量

    73059
  • esp32s2
    +關(guān)注

    關(guān)注

    1

    文章

    1

    瀏覽量

    459
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項(xiàng)目添加頭文件

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項(xiàng)目添加頭文件
    的頭像 發(fā)表于 11-28 07:27 ?482次閱讀

    ESP32S工具鏈

    Xtensa LX6 ESP32、ESP32-S2 xtensa-esp-elf 早期ESP32的基礎(chǔ)架構(gòu) 2. 對(duì)你的影響 你正在開(kāi)發(fā)
    發(fā)表于 11-26 07:33

    #ESP32S3野牛小智

    ESP32
    丙丁先生
    發(fā)布于 :2025年11月25日 08:34:06

    低成本開(kāi)源!用樂(lè)鑫科技ESP32-S3開(kāi)發(fā)板輕松驅(qū)動(dòng)無(wú)刷電機(jī),保姆級(jí)教程來(lái)了!

    想用ESP32-S3開(kāi)發(fā)板驅(qū)動(dòng)無(wú)刷電機(jī)卻不知從何下手?本教程將手把手教你完成從硬件連接到軟件編程的全流程,無(wú)論你是新手還是有定經(jīng)驗(yàn)的開(kāi)發(fā)者,都能輕松掌握!本教程代碼已全部開(kāi)源!后臺(tái)私信關(guān)鍵詞
    的頭像 發(fā)表于 11-06 18:03 ?214次閱讀
    低成本開(kāi)源!用樂(lè)鑫科技<b class='flag-5'>ESP32-S</b>3開(kāi)發(fā)板輕松驅(qū)動(dòng)無(wú)刷電機(jī),保姆級(jí)教程來(lái)了!

    快速上手!帶你用LVGL工具完成樂(lè)鑫科技ESP32-S3 2.8寸串口屏UI開(kāi)發(fā)!代碼完全開(kāi)源!

    酷炫的LVGL界面效果!本教程代碼全部開(kāi)源!后臺(tái)私信關(guān)鍵詞“S3-2.8寸屏LVGL開(kāi)發(fā)“自動(dòng)獲取ESP32-S32.8寸串口屏LVGL開(kāi)發(fā)源代碼百度網(wǎng)盤(pán)鏈接!串
    的頭像 發(fā)表于 10-30 18:04 ?1025次閱讀
    快速上手!帶你用LVGL工具完成樂(lè)鑫科技<b class='flag-5'>ESP32-S</b>3 2.8寸串口屏UI開(kāi)發(fā)!<b class='flag-5'>代碼</b>完全開(kāi)源!

    ESP32 I2S音頻總線學(xué)習(xí)筆記(二):I2S讀取INMP441音頻數(shù)據(jù)

    在這上篇文章中,我們介紹了ESP32 I2S音頻總線的相關(guān)知識(shí),簡(jiǎn)要了解了什么是I2S總線、它的通信格式,以及相關(guān)的底層API函數(shù),這篇文章將介紹
    的頭像 發(fā)表于 10-23 19:55 ?3484次閱讀
    <b class='flag-5'>ESP32</b> I<b class='flag-5'>2S</b>音頻總線學(xué)習(xí)筆記(二):I<b class='flag-5'>2S</b>讀取INMP441音頻數(shù)據(jù)

    ESP32-S3的MicroPython開(kāi)發(fā)環(huán)境搭建

    本文通過(guò)搭建Thonny IDE開(kāi)發(fā)環(huán)境,了解了如何給ESP32-S3燒錄MircoPython固件和MircoPython應(yīng)用程序。
    的頭像 發(fā)表于 09-11 16:02 ?897次閱讀
    <b class='flag-5'>ESP32-S</b>3的MicroPython開(kāi)發(fā)環(huán)境搭建

    樂(lè)鑫ESP32-S3專為AIoT設(shè)計(jì),強(qiáng)化邊緣AI應(yīng)用方向

    的向量指令(vectorinstructions)。AI開(kāi)發(fā)者們通過(guò)使用這些向量指令,可以實(shí)現(xiàn)高性能的圖像識(shí)別、語(yǔ)音喚醒和識(shí)別等應(yīng)用。 ? ESP32-S3是款低功耗的MCU系統(tǒng)級(jí)芯片(SoC),支持
    的頭像 發(fā)表于 09-09 09:20 ?6889次閱讀
    樂(lè)鑫<b class='flag-5'>ESP32-S</b>3專為AIoT設(shè)計(jì),強(qiáng)化邊緣AI應(yīng)用方向

    文讀懂WAV音頻文件格式

    本文主要為后面ESP32 I2S音頻系列文章做鋪墊,所以本篇將介紹WAV音頻文件格式,并通過(guò)C代碼生成一段1S的正弦波WAV音頻寫(xiě)入到SD卡
    的頭像 發(fā)表于 08-25 17:49 ?3723次閱讀
    <b class='flag-5'>一</b>文讀懂WAV音頻文件格式

    ESP32-運(yùn)行網(wǎng)頁(yè)服務(wù)器(Web Server)-實(shí)用篇

    在前篇文章《ESP32-運(yùn)行網(wǎng)頁(yè)服務(wù)器(WebServer)-入門(mén)篇》,我們介紹了ESP32運(yùn)行網(wǎng)頁(yè)服務(wù)器(WebServer)的原理,然后我們基于ESP32實(shí)現(xiàn)了
    的頭像 發(fā)表于 07-28 18:05 ?2713次閱讀
    <b class='flag-5'>ESP32</b>-運(yùn)行網(wǎng)頁(yè)服務(wù)器(Web Server)-實(shí)用篇

    啟明云端ESP32-S3 2.8寸串口屏到手了?如何上手?看這篇!

    【場(chǎng)外插播】ESP32-S32.8寸串口屏、MX1.25-7P線、MX1.25-8P線我們都帶來(lái)了,開(kāi)箱展示如下【競(jìng)猜繼續(xù)】ESP32-S32.8寸串口屏到手還不知道如何上手點(diǎn)屏?不要擔(dān)心,我們的上手指南來(lái)了!
    的頭像 發(fā)表于 07-07 18:04 ?603次閱讀
    啟明云端<b class='flag-5'>ESP32-S</b>3 2.8寸串口屏到手了?如何上手?看這篇!

    ESP32-P4 C5開(kāi)發(fā)板燒錄小智全流程!速看!

    沒(méi)錯(cuò),你沒(méi)有看錯(cuò)!我們帶著WT99P4C5-S1開(kāi)發(fā)板燒錄小智全流程走來(lái)了!開(kāi)發(fā)板搭載樂(lè)鑫科技ESP32-P4和ESP32-C5芯片,代碼完全開(kāi)源,支持靈活二次開(kāi)發(fā)。什么?文字教程不好
    的頭像 發(fā)表于 07-04 18:03 ?1554次閱讀
    <b class='flag-5'>ESP32</b>-P4 C5開(kāi)發(fā)板燒錄小智全流程!速看!

    ESP32-S3開(kāi)發(fā)板燒錄小智AI系統(tǒng)全流程指南

    在AI語(yǔ)音交互領(lǐng)域不斷發(fā)展的今天,開(kāi)發(fā)者們對(duì)于功能強(qiáng)大、開(kāi)源靈活的開(kāi)發(fā)板需求日益增長(zhǎng)。今天,我們就來(lái)詳細(xì)了解ESP32AgentDevKit燒錄小智的全流程,這款搭載樂(lè)鑫科技ESP32-S3芯片
    的頭像 發(fā)表于 06-16 18:01 ?6836次閱讀
    <b class='flag-5'>ESP32-S</b>3開(kāi)發(fā)板燒錄小智AI系統(tǒng)全流程指南

    esp32如何接入豆包

    要在 ESP32 上接入豆包工具,本質(zhì)上是讓 ESP32 設(shè)備與豆包的 API 進(jìn)行通信,以獲取相關(guān)服務(wù)
    的頭像 發(fā)表于 02-05 13:40 ?2805次閱讀
    <b class='flag-5'>esp32</b>如何接入豆包

    ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術(shù)規(guī)格書(shū)

    電子發(fā)燒友網(wǎng)站提供《ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術(shù)規(guī)格書(shū).pdf》資料免費(fèi)下載
    發(fā)表于 12-07 15:30 ?13次下載