Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python向微控制器STM32F4发送串行数据_Python_Pyserial_Uart_Stm32f4 - Fatal编程技术网

Python向微控制器STM32F4发送串行数据

Python向微控制器STM32F4发送串行数据,python,pyserial,uart,stm32f4,Python,Pyserial,Uart,Stm32f4,这就是我用来每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=seri

这就是我用来每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")

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

第二种猜测会把编码搞得一团糟。您是否已将python中的默认编码设置为utf-8?如果是这样,你可以试试

ser.write(str(TM1).encode('ascii'))
发布您获得的输出也会有所帮助

编辑:以避免微控制器跳过某些字符。你可以使用这样一个小函数。(我用它向一个有同样问题的传感器发送命令。当我发送这样的命令“ser.write”(“start logging”)时,它会收到类似“sart lgging”的消息


相同。设置匹配。例如,我打印TM1:1464600660433102,控制台上的输出是:164064312。我将beaudrate更改为9600,所以它现在发送更多的数字。好的,在我看来,您的微控制器跳过了一些字符/字节。可能是从停止位(但您说设置匹配),或者您的uc尚未准备好接收下一个字节。您可以尝试发送每个字符,中间有一个延迟,以隔离问题。如何发送每个字符,中间有一个延迟?例如:
对于str(TM1)中的c:ser.write(c)time.sleep(0.5)
当然,每个命令都在其自己的行中,我还不习惯编辑器这样做。
def write_safe(cmd):
    for x in cmd:
        ser.write(x)
        sleep(0.05)
    ser.write('\r\n')