串口集成
stm32 串口读取分类结果
适用产品
拥有串口的摄像头:
- SingTown AI Vision Module SC(yes)
目的
使用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
- 直接下载:点此下载
代码介绍:
此代码框架由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 全局变量中。