【问题标题】:twai/can RX messages receiving is not working is not working in the ESP32-S2 codetwai/can RX 消息接收不起作用 在 ESP32-S2 代码中不起作用
【发布时间】:2021-07-26 09:18:45
【问题描述】:

所以,我一直在尝试测试 esp32-s2 芯片中称为“twai”的 CAN 总线通信协议。

我有芯片 - Arduino 线 - 可以收发器 (SN65HVD230)。 Rx 连接到端口 4 Tx连接到port5

消息的接收不起作用,我知道为什么 以下输出显示。

Failed to receive message
Message queued for transmission
Failed to receive message
Message queued for transmission
Failed to receive message
Message queued for transmission
Failed to receive message
Message queued for transmission
Failed to receive message
Message queued for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission
Failed to receive message
Failed to queue message for transmission

这是我使用的代码,我知道其中有什么问题,我从 espressif 链接获得了命令

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/twai.html

应该类似于普通esp32芯片中的CAN接口。

这是使用的代码


#include "driver/gpio.h"
#include "driver/twai.h"

void setup()

{
  Serial.begin(115200);

    //    Initialize configuration structures using macro initializers

    twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(GPIO_NUM_5, GPIO_NUM_4, TWAI_MODE_NORMAL);
    twai_timing_config_t t_config = TWAI_TIMING_CONFIG_250KBITS();
    twai_filter_config_t f_config = TWAI_FILTER_CONFIG_ACCEPT_ALL();



    //    Install TWAI driver
    if (twai_driver_install(&g_config, &t_config, &f_config) == ESP_OK)
    {
        printf("Driver installed\n");
    } else {
        printf("Failed to install driver\n");
        return;
    }



    //    Start TWAI driver
    if (twai_start() == ESP_OK) {
        printf("Driver started\n");
    } else {
        printf("Failed to start driver\n");
        return;
    }
}


void loop() {

//Configure message to transmit
twai_message_t message;
message.identifier =0x12;
message.extd =1;              

message.data_length_code = 8;
for (int i = 0; i < 8; i++) {
    message.data[i] = 0;
}



//Queue message for transmission
if (twai_transmit(&message, pdMS_TO_TICKS(1000)) == ESP_OK) {
    printf("Message queued for transmission\n");
} else {
    printf("Failed to queue message for transmission\n");
}

delay(2000);

twai_message_t messagerx;
if (twai_receive(&messagerx, pdMS_TO_TICKS(10000)) == ESP_OK) {
    printf("Message received\n");
} else {
    printf("Failed to receive message\n");
    return;
}


//Process received message
if (messagerx.extd) {
    printf("Message is in Extended Format\n");
} else {
    printf("Message is in Standard Format\n");
}
printf("ID is %d\n", messagerx.identifier);
if (!(messagerx.rtr)) {
    for (int i = 0; i < messagerx.data_length_code; i++) {
        printf("Data byte %d = %d\n", i, message.data[i]);
    }
}

}

【问题讨论】:

    标签: esp32 can-bus arduino-esp32


    【解决方案1】:

    这是目前 ESP32-S2 设备的一个已知问题,其中 TWAI 接收无法正常工作,而传输将正常工作。在撰写此答案时,它会影响 ESP-IDF TWAI 驱动程序的 v4.3。

    EspressIF 将根据这个 Github 问题将修复移植到 v4.3; https://github.com/espressif/esp-idf/issues/5604 ,但似乎尚未完成,因为拉取请求仍标记为 WIP。

    通过切换回 ESP32 模块,我能够确认使用与您类似的代码,然后接收将正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多