|
由于本人最近在简单复刻2020年电赛f题,然后碰到的关于openmv和STM32串口通信的问题,在这里跟大家分享一下心得(新手,程序写的很烂,并且红外测温的程序因为没找到模块所以未测试,不喜勿喷)
1、 硬件
openmv,正点原子STM32精英板
这里我们32的串口选用的是串口1,openmv选择的是串口3
连接的话openmv的P4接32的PA10,P5接32的PA9
2、 程序
在传统的单片机应用中,两个单片机串口通信,都是自己定义一些帧,包括帧头,数据帧,校验帧,帧尾。
这种方式,稳定,高效。缺点也很明显:开发难度稍大,需要自己制定协议,编码解码需要手动编写。如果想快速尝试两个单片机通信的推荐使用串口传输json字符串
优点:不需要了解底层的事情,比如:
· 不考虑大端小端
· 不考虑数据的byte转换
· 支持任意长的int,float
· 简单易懂,容易开发。
缺点:效率稍低。json的编码和解码会占用cpu。
其实传输json在网络编程中已经成为标准,比如在restful api中,前端和后端使用json来获取信息。只是在传统单片机的领域中不常见,一方面是效率稍低,嵌入式通常对成本的控制要求比较高。但是随着芯片成本的降低,很多应用对物料成本要求不是很高了,对开发效率越来越重视。
openmv端
OpenMV有json的模块,json.dumps(obj)和ujson.loads(str)可以很容的生成json字符串和解析json字符串。
import json
obj =[[12,0],[10,12],[22,10],[99,11]]
print(json.dumps(obj))
obj = {
"number":10,
"color" :[255,0,0],
"rate" :0.65
}
print(json.dumps(obj))
输出如下
'[[12, 0], [10, 12],[22, 10], [99, 11]]'
'{"color":[255, 0, 0], "number": 10, "rate": 0.65}'然后把字符串通过串口发送出去,然后在另一端,把json字符串解析成对象/数组。然后进行接下来的逻辑操作。
刚开始直接用自带的串口发送函数,最后发现行不通,所以才考虑用json字符串
STM32端
配置串口1,编写中断函数即可
|
评分
-
查看全部评分
|