所以这是我用来向微控制器stm32f4发送4秒时间(以微秒为单位)的2秒钟的脚本,但不合适的是它只发送一些数字(从1 - > 4),这与以下时间不同我打印,就像随机数字。
import time
import serial from datetime
import datetime from time
import gmtime, strftime
ser = serial.Serial(
port='/dev/ttyACM0',
baudrate=115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
ser.writeTimeout = 0
ser.isOpen()
TM1 = int(round(time.time()*1000000))
ser.write(str(TM1).encode())
#ser.write( str(TM1)+" \r\n")
time.sleep(2)
TM2 = int(round(time.time()*1000000))
ser.write(str(TM2)+" \r\n")
time.sleep(2)
TM3 = int(round(time.time()*1000000))
ser.write(str(TM3)+" \r\n")
time.sleep(2)
TM4 = int(round(time.time()*1000000))
ser.write(str(TM4)+" \r\n")
答案 0 :(得分:1)
我一眼就看不出任何明显错误的东西。我有一个几乎完全相同的代码片段在这里运行。我的猜测是串口的设置不匹配。仔细检查波特率,奇偶校验和停止位设置是否匹配。
第二个猜测将是编码的混乱。你有没有在python中将你的默认编码设置为utf-8?如果是这样,你可以尝试
ser.write(str(TM1).encode('ascii'))
发布你得到的输出也会有所帮助。
编辑以避免微控制器跳过某些字符。你可以使用像这样的小功能。 (我用它来发送命令到一个有相同问题的传感器。当我发送一个像`ser.write("开始记录")这样的命令时,它会收到像#34; sart lgging&#这样的东西。 34。
def write_safe(cmd):
for x in cmd:
ser.write(x)
sleep(0.05)
ser.write('\r\n')