stm32串口读取分类结果

适用产品

拥有串口的摄像头:

  • SingTown AI Vision Module SC(yes)

  • SingTown AI Vision Module EC(no)

目的

使用stm32,通过串口获取 SingTown AI Vision Module 的分类识别结果。

前提条件

模型已上传到摄像头

连接电路

  • SingTown AI Vision Module RX 不连接

  • SingTown AI Vision Module TX 连接 nucleo PA10 (uart1 rx)

  • SingTown AI Vision Module GND 连接 nucleo GND

  • SingTown AI Vision Module VIN 连接 nucleo 5V (可选)

运行stm32的代码

代码下载:

代码介绍:

此代码框架由cubemx生成。

#define CLASSES_MAX 64  // Max 64 Classes, If you know the exact number, you can change smaller.
uint8_t cls[CLASSES_MAX];

全局变量 cls ,用于存放读取的结果。

int checkCrc(unsigned char *payload) {
    unsigned char num = payload[0];
    unsigned char crc = 0;
    int i = 0, j = 0;
    for (i = 0; i < num + 2; i++) {
        crc ^= payload[i];
        for (j = 0; j < 8; j++) {
            if (crc & 1)
                crc ^= 0x91;
            crc >>= 1;
        }
    }
    return crc;
}

check_crc 为校验函数,用于校验数据帧是否正确。

int read_singtownaicam_cls() {
    int i;
    unsigned char num;
    unsigned char payload[CLASSES_MAX + 2];
    int byte;
    while (1) {
        if (readByte() != 0xeb)
            continue;
        if (readByte() != 0x90)
            continue;

        num = readByte();
        if (num < 0 || num > CLASSES_MAX)
            continue;
        payload[0] = num;

        for (i = 1; i < num + 2; i++) {
            byte = readByte();
            if (byte == -1)
                break;
            payload[i] = byte;
        }

        if (checkCrc(payload) != 0)
            continue;

        memcpy(cls, &payload[1], num);
        return num;
    }
}

read_singtownaicam_cls 是读取数据函数,结果存放在 cls 全局变量中。