完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Code: Select all
[///esp32s3在使用RMT多通道发送时总有一个通道比别的通道慢20ns//代码如下]//esp32s3在使用RMT多通道发送时总有一个通道比别的通道慢20ns//代码如下rmt_config_t config1; config1.channel = RMT_CHANNEL_0; config1.clk_div = 4; config1.gpio_num = GPIO_NUM_40; config1.mem_block_num = 1; config1.rmt_mode = RMT_MODE_TX; config1.tx_config.carrier_en = false; config1.tx_config.idle_output_en = true; // 空闲输出打开 config1.tx_config.idle_level = RMT_IDLE_LEVEL_LOW; // 空闲时候为低电平 config1.tx_config.loop_en = false; // 关闭持续发送 rmt_config_t config2 ; config2.channel = RMT_CHANNEL_1; config2.clk_div = 4; config2.gpio_num = GPIO_NUM_39; config2.mem_block_num = 1; config2.rmt_mode = RMT_MODE_TX; config2.tx_config.carrier_en = false; config2.tx_config.idle_output_en = true; // 空闲输出打开 config2.tx_config.idle_level = RMT_IDLE_LEVEL_LOW; // 空闲时候为低电平 config2.tx_config.loop_en = false; // 关闭持续发送 rmt_config_t config3; config3.channel = RMT_CHANNEL_2; config3.clk_div = 4; config3.gpio_num = GPIO_NUM_38; config3.mem_block_num = 1; config3.rmt_mode = RMT_MODE_TX; config3.tx_config.carrier_en = false; config3.tx_config.idle_output_en = true; // 空闲输出打开 config3.tx_config.idle_level = RMT_IDLE_LEVEL_LOW; // 空闲时候为低电平 config3.tx_config.loop_en = false; rmt_config_t config4; config4.channel = RMT_CHANNEL_3; config4.clk_div = 4; config4.gpio_num = GPIO_NUM_37; config4.mem_block_num = 1; config4.rmt_mode = RMT_MODE_TX; config4.tx_config.carrier_en = false; config4.tx_config.idle_output_en = true; // 空闲输出打开 config4.tx_config.idle_level = RMT_IDLE_LEVEL_LOW; // 空闲时候为低电平 config4.tx_config.loop_en = false; rmt_config(&config1); rmt_config(&config2); rmt_config(&config3); rmt_config(&config4); rmt_driver_install(config1.channel, 0, 0); rmt_driver_install(config2.channel, 0, 0); rmt_driver_install(config3.channel, 0, 0); rmt_driver_install(config4.channel, 0, 0); rmt_add_channel_to_group(RMT_CHANNEL_0); rmt_add_channel_to_group(RMT_CHANNEL_1); rmt_add_channel_to_group(RMT_CHANNEL_2); rmt_add_channel_to_group(RMT_CHANNEL_3); static const rmt_item32_t morse_esp[] = { {{{1, 1, 1, 0}}}, {{{1, 1, 1, 0}}}, {{{1, 1, 1, 0}}}, {{{1, 1, 1, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{2, 1, 2, 0}}}, {{{0, 0, 0, 0}}}}; while (1) { ESP_ERROR_CHECK(rmt_write_items(RMT_CHANNEL_0, morse_esp,sizeof(morse_esp) / sizeof(morse_esp[0]), false)); ESP_ERROR_CHECK(rmt_write_items(RMT_CHANNEL_1, morse_esp,sizeof(morse_esp) / sizeof(morse_esp[0]), false)); ESP_ERROR_CHECK(rmt_write_items(RMT_CHANNEL_2, morse_esp,sizeof(morse_esp) / sizeof(morse_esp[0]), false)); ESP_ERROR_CHECK(rmt_write_items(RMT_CHANNEL_3, morse_esp,sizeof(morse_esp) / sizeof(morse_esp[0]), false)); vTaskDelay(1000 / portTICK_PERIOD_MS); } |
|
相关推荐
1个回答
|
|
根据您提供的代码片段,您正在使用ESP32-S3的RMT模块进行多通道发送。您提到有一个通道比别的通道慢20ns。为了解决这个问题,我们需要分析可能的原因并提供解决方案。
1. 检查GPIO配置:确保所有通道使用的GPIO引脚没有其他功能冲突,如其他外设占用或引脚复用。这可能会导致信号传输延迟。 2. 检查RMT配置:确保所有通道的RMT配置相同,包括clk_div、mem_block_num等参数。不同的配置可能会导致信号传输速度不同。 3. 检查信号完整性:在硬件设计中,确保信号传输路径尽可能短且没有过多的噪声干扰。这有助于减少信号传输延迟。 4. 检查代码逻辑:检查您的代码逻辑,确保所有通道的发送操作是同步进行的。如果某个通道的发送操作比其他通道晚开始,可能会导致20ns的延迟。 5. 检查硬件问题:如果以上步骤都无法解决问题,可能是硬件本身的问题。您可以尝试更换ESP32-S3模块或联系硬件供应商寻求帮助。 以下是一些建议的代码优化: 1. 使用RMT初始化函数确保所有通道配置相同: ```c rmt_config_t config = { .channel = RMT_CHANNEL_0, .clk_div = 4, .gpio_num = GPIO_NUM_40, .mem_block_num = 1, .rmt_mode = RMT_MODE_TX, .tx_config.carrier_en = false, // ...其他配置 }; for (int i = 0; i < NUM_CHANNELS; i++) { config.channel = i; rmt_config(&config); } ``` 2. 使用RMT驱动函数确保所有通道同步发送: ```c rmt_item32_t item = { .duration0 = DURATION, .level0 = LEVEL_HIGH, .duration1 = DURATION, .level1 = LEVEL_LOW, // ...其他配置 }; for (int i = 0; i < NUM_CHANNELS; i++) { rmt_write_items(i, &item, 1, false); } ``` 通过以上步骤,您可以尝试解决ESP32-S3使用RMT多通道发送时某个通道比其他通道慢20ns的问题。如果问题仍然存在,请考虑检查硬件或联系技术支持。 |
|
|
|
只有小组成员才能发言,加入小组>>
528浏览 6评论
438浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
425浏览 5评论
422浏览 4评论
396浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-6 07:24 , Processed in 0.801471 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号