我一直在尝试在raspberry和我的STM32板之间进行串行通信(固件使用MBEDOS)。在
现在,我可以从我的覆盆子到微控制器进行串行写入,并且成功了。在
但是,我想尝试从微控制器到树莓写一些东西,树莓应该会处理它。但是,它似乎没有做到这一点。在
树莓的密码很简单:
import time
import serial
ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
while 1:
x=ser.readline()
if x[2] == "e":
break
print x
print("stop")
对我的代码做一个小小的解释,我想做的是当我的微控制器发送一个“e”时,它应该从循环中中断。我使用x[2],因为我注意到当我们打印串行数据时,它将打印:
^{pr2}$因此,我决定使用x[2]。在
在微控制器部分,我使用了:
if(butn == 1) {
// raspi.putc('e');
raspi.printf("eeeeeee");
swo.printf("e is printed");
}
其中butn是用户按钮。我已经试过使用.putc('e'),但它也是一样的。在
我该如何处理这个问题?在
谢谢你!!在
代码中的问题是
Serial.readline()
返回一个bytes
对象,而不是字符串。这就是为什么打印时会看到b
。在现在,使用bytes对象建立索引不计算出现在其字符串中的b和' 表示;所以如果你想要第一个字符,你应该使用
x[0]
。但是,当你在bytes对象中使用索引时,你不会得到一个字符,而是你所请求的特定字节的数字表示。在令人惊讶的是,101是“e”的ascii码。在
你需要把x[0]投给一个角色。结果是:
^{pr2}$相关问题 更多 >
编程相关推荐