1

我认为我的问题更多是缺乏理解,但这里有一个概述:

我正在尝试与使用串行通信的旧三菱讨论。初始化工作是通过以 5 波特切换 K 线(这种技术似乎在其他地方使用),然后将 K 线作为 INPUT 传递,读取一些代码,之后您可以直接在 K 线上读写。所述协议的细节(以及我们只使用一行的事实)在此处详述

这让我有点困惑,因为我习惯了一个 TX 引脚和一个 RX 引脚,不必在每次读写后在 TX 和 RX 之间切换一个引脚,但让我们假设这是可行的。

如何在 Teensy 3.2 上设置串行通信(指定波特率和 RX/TX 引脚,此处相同)?(经典的 Arduino C++ 东西)

或者也许我可以有两个引脚,每个引脚都连接到 K 线。这在物理上是相同的,但允许我在软件中将其定义为标准序列。

这是到目前为止编写的代码:

void setup() {

    // HERE: SETUP SERIAL WITH ONE PIN
    // Or do the two-pins-on-same-wire-thing with HWSerial.begin(15625, SERIAL_8N1); 
    pinMode(DATA_PIN, OUTPUT);


    // MUT Init
    int init = MUT_INIT_CODE; 
    for (int i= 0; i < 9; i++){
        if (init & 1){ 
            digitalWrite(DATA_PIN, HIGH);
            digitalWrite(LED_PIN, HIGH);
        } else {
            digitalWrite(DATA_PIN, LOW);
            digitalWrite(LED_PIN, LOW);
        }
        init >>= 1;
        delay(MUT_INIT_DELAY);
    }

    byte answer[3];
    pinMode(DATA_PIN, INPUT);
    HWSerial.readBytes(answer, 3);

}

提前致谢!

4

1 回答 1

3

从技术上讲,您不能将 RX 和 TX 绑定在一起,因为硬件串行模块(如 Teensy 内部的模块)默认会将 TX 驱动为高电平,因此 RX 也将始终为高电平。您有时需要将引脚配置为输入,有时将其配置为输出。

您不能使用硬件串行模块,因为 TX 和 RX 引脚是预定义的并且是分开的,您应该尝试使用软件串行仿真库,例如https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

尝试更改代码以添加功能,根据需要将您的唯一引脚重新配置为输入或输出,并为 TX 和 RX 声明相同的引脚。

编辑:硬件方法是使用模拟多路复用器,如 MAX4619。这样你就可以在 Teensy 上使用硬件串行模块,将 TX 和 RX 连接到多路复用器的 X0/X1 引脚,以及 X 引脚上的 K 线。您可以使用 Teensy GPIO 切换多路复用器的 A 命令引脚。我没有测试这种方法,因为我没有这种车,但可能值得一试。

编辑2:为了更具体地回答操作员的问题,teensy 的串行模块的引脚是硬连线的。在 Teensy 3.2 上,Serial1 连接到引脚 0/1 或 5/21,Serial2 连接到引脚 9/10 或 26/31 等。该列表可在此处获得:https ://www.pjrc.com/teensy/td_uart .html 波特率通过调用 Serial1.begin(YOUR_BAUD_RATE) 来配置;

于 2019-01-23T14:31:20.593 回答