一个用了两年单片机的人遇到的openmv和stm32 串口通讯的问题,不是那么容易解决,求大神
-
我只能解决OpenMV上的问题,不能解决你的STM32上的问题。
-
也许你应该用逻辑分析仪,看看tx,rx上的数据。
-
如果有数据就说明OpenMV发送出去了,
如果没有数据没准你OpenMV的操作步骤不对,根本没运行程序。比如脱机运行的步骤之类的。
-
脱机用串口助手是能收到数据的
-
那可能是接线的问题?或者是测试的数据不一样。
-
import sensor, image, time from pyb import UART threshold = [(37, 67, 45, 84, 4, 68), #red # (0, 80, -70, -10, -0, 30), #green (25, 67, -37, 26, -63, -26)] #blue #设置红色的阈值,括号里面的数值分别是L A B 的最大值和最小值(minL, maxL, minA, # maxA, minB, maxB),LAB的值在图像左侧三个坐标图中选取。如果是灰度图,则只需 #设置(min, max)两个数字即可。 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000 ) sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,需要关闭白平衡。 clock = time.clock() uart = UART(3, 115200) uart.init(115200, bits=8, parity=None, stop=1) #8位数据位,无校验位,1位停止位、 while(True): clock.tick() img = sensor.snapshot() blob = img.find_blobs(threshold, area_threshold=300) if blob: #如果找到了目标颜色 # print(blob) uart.write("B3 B3 ") #一帧数据的帧头 for b in blob: #迭代找到的目标颜色区域 img.draw_rectangle(b[0:4]) # rect img.draw_cross(b[5], b[6]) # cx, cy x = b.cx() y = b.cy() print(x, y, end = ',') uart.write("%x %x "%(x,y)) #以16进制的格式输出 #img.draw_circle((50, 50, 30), color = (250, 0, 0)) print(clock.fps())
这是我openmv上的代码,请看看有什么问题吗
-
我今天发现了,有的串口助手能给我的单片机发数据,有的不能,这是为什么呢,感觉和我遇到的问题很像
-
终于解决了,特地再来回复一下,希望以后的小伙伴不要在绕弯路了
转载自:https://blog.csdn.net/zzzzjh/article/details/80725348
penmv发送16进制数据需要转换为字节的形式,假设要发送 0x80,0x06,0x02,0x78这几个16进制数据代码如下:
uart = UART(3, 9600) #波特率9600
uart.init(9600, bits=8, parity=None, stop=1)
data=bytearray([0x80,0x06,0x02,0x78])
uart.write(data)
-
你上面代码
uart.write("%x %x "%(x,y))
的是字符串。
-
其实你要发送单个的数值(num)的时候只需要使用uart.writechar(num)就行了,uart.write()是发送字符串。
-
@17072969344 同学,您修改后的串口通信代码能再发一下吗?谢谢了