我认为我的问题更多是缺乏理解力,但这是一个概述:
我正试图与使用串行通信的老三菱进行讨论。初始化通过以5个波特率切换K线(此技术似乎在其他地方使用)来进行,然后将K线作为INPUT传递,读取一些代码,然后您可以直接在K线上进行读写。 here详细说明了该协议的详细信息(以及我们仅使用一行的事实)。
这让我有点困惑,因为我已经习惯了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);
}
谢谢!
答案 0 :(得分:2)
从技术上讲,您不能将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命令引脚。 我没有测试这种方法,因为我没有这种车,但是值得尝试一下。
edit2:要更具体地回答op的问题,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);来配置波特率。