1

所以这是我用来每2秒发送四次微秒时间到微控制器stm32f4的脚本,但不幸的是它只发送一些数字(从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")
4

1 回答 1

1

乍一看,我看不出有什么明显的错误。我在这里运行了几乎相同的代码片段。我的猜测是串口的设置不匹配。仔细检查波特率、奇偶校验和停止位设置是否匹配。

第二个猜测是编码混乱。您是否将python中的默认编码设置为utf-8?如果是这样你可以试试

ser.write(str(TM1).encode('ascii'))

发布您获得的输出也会有所帮助。

编辑:避免微控制器跳过一些字符。您可以使用这样的小功能。(我用它向有同样问题的传感器发送命令。当我发送类似 `ser.write("start logging") 这样的命令时,它会收到类似 "sart lgging" 的信息。

def write_safe(cmd):
    for x in cmd:
        ser.write(x)
        sleep(0.05)
    ser.write('\r\n')
于 2016-05-30T09:23:25.837 回答