Openmv通过串口接收数据、发送数据与stm32通信

博主联系方式:
QQ:1540984562
微信:wxid_nz49532kbh9u22
QQ交流群:892023501(嵌入式方向)
QQ交流群:856398158(后端方向)

【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176

目录

  • 参考
    • 接线
    • 星瞳教程
    • openmv传送数据
    • STM32解码程序


参考

接线

Openmv通过串口接收数据、发送数据与stm32通信_第1张图片


星瞳教程

发送数据
接收数据
不过我比较奇怪为何它们的uart不需要初始化

openmv传送数据

1、初始化以及uart参数设置

uart = pyb.UART(3, 115200)  #串口3,波特率115200
uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位

2、将数据和帧头(一般来说是两个帧头)打包,发送打包好的数据
关于函数的用法请见:https://docs.openmv.io/library/ustruct.html?highlight=ustruct

ustruct.pack(fmt,v1,v2,… )
根据格式字符串fmt打包值v1,v2 … 。返回值是对值进行编码的字节对象。

fmt 参数意义
Openmv通过串口接收数据、发送数据与stm32通信_第2张图片

def send_data_packet(x, y):
    temp = struct.pack(",                #格式为俩个字符俩个整型
                   TITLE1,                       #帧头1
                   TITLE2,                       #帧头2
	               int(x),                       #数据1
                   int(y))                       #数据2
    uart.write(temp)                           #串口发送

可以根据自己的需求添加变量以及帧头。
一帧数据的每一个Byte必须要以字节的显示发送(data = bytearray([x,y])),而不能是用16进制发送(uart.write("%x %x \r"%(x,y))),他们两个函数在串口助手里面看到的内容是一样的(大小写的区别),但是后者是无法让单片机接收到的。

STM32解码程序

void Optical_Flow_Receive_Prepare(u8 data)
{
    /* 局部静态变量:接收缓存 */
    static u8 RxBuffer[10];
    /* 数据长度 *//* 数据数组下标 */
    static u8  _data_cnt = 0;
    /* 接收状态 */
    static u8 state = 0;
 
    /* 帧头1 */
    if(state==0&&data==TITLE1)
    {
        state=1;
    }
    /* 帧头2 */
    else if(state==1&&data==TITLE2)
    {
        state=2;
        _data_cnt = 0;
    }
    /* 接收数据租 */
    else if(state==2)
    {
        RxBuffer[++_data_cnt]=data;
        if(_data_cnt>=8)
        {
            state = 0;
            Data_Processing(RxBuffer,_data_cnt);
        }
    }
    /* 若有错误重新等待接收帧头 */
    else
        state = 0;
}
 
 
void Data_Processing(u8 *data_buf,u8 num)
{
	int theta_org,rho_org;
    /* 读取偏移角度原始数据  */
    theta_org = (int)(*(data_buf+1)<<0) | (int)(*(data_buf+2)<<8) | (int)(*(data_buf+3)<<16) | (int)(*(data_buf+4)<<24) ;
    theta_err = theta_org;
 
    /* 读取偏移尺寸原始数据 */
    rho_org = (int)(*(data_buf+5)<<0) | (int)(*(data_buf+6)<<8) | (int)(*(data_buf+7)<<16) | (int)(*(data_buf+8)<<24) ;
    rho_err = rho_org;
}

参考的一些链接:
【1】https://blog.csdn.net/weixin_40484766/article/details/89319253
【2】https://blog.csdn.net/zzzzjh/article/details/80725348
【3】https://blog.csdn.net/weixin_45030703/article/details/103747349?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159918166619725250326440%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159918166619725250326440&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v2-23-103747349.first_rank_ecpm_v3_pc_rank_v2&utm_term=openmv%E4%B8%B2%E5%8F%A3%E9%80%9A%E4%BF%A1&spm=1018.2118.3001.4187
https://blog.csdn.net/liluan_sama/article/details/96283653?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param

【没事儿可以到我主页看看】https://blog.csdn.net/qq_42604176

你可能感兴趣的:(#,电子设计竞赛,单片机,串口通信,python)