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的代码
代码下载:
GitHub: https://github.com/SingTown/singtown-ai-cam-stm32-example/blob/main/read_singtownaicam_cls_simple.c
直接下载:
download
.
代码介绍:
此代码框架由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 全局变量中。