有个FlySky X6B接收器,有IBUS输出接口。我从STM32F407VGT6 的USB端口读取IBUS信号。波特率为115200。预计会读取到的值在1000到2000之间,但实际读到的结果是5900 4899。IBUS的逻辑是它有32字节信号。头两个字节是header。第一个字节是0x20,第二个字节伊势0x40。之后发射机信号的每一通道消息为2字节。最后2个字节是校验和。
以下是程序
void readRx() { HAL_UART_Receive(&huart2, &val, sizeof(val), 200); //HAL_UART_Transmit(&huart2, val, sizeof(val), 200); if (val == 0x20 || ibus[0] == 0x20) { ibus[0] = 0x20; if (val == 0x40 || ibus[1] == 0x40) { ibus[1] = 0x40; if (ibusIndex == IBUS_BUFFSIZE) { ibusIndex = 0; int high = 3; int low = 2; for (int i = 0; i < IBUS_MAXCHANNELS; i++) { //left shift away the first 8 bits of the first byte and add the whole value of the previous one rcValue[i] = (ibus[high] << 8) + ibus[low]; sprintf(value,"%hu", rcValue[i]); HAL_UART_Transmit(&huart2, value, sizeof(value), 200); HAL_UART_Transmit(&huart2, "\n\r", sizeof("\n\r"), 200); high += 2; low += 2; } return; } else { ibus[ibusIndex] = val; ibusIndex++; } } else { return; } } else { return; } }
|