Я должен отправить массив данных между ядром f446re и ПК с Ubuntu, используя класс UARTSerial.
Код, который я использую на mbed, следующий:
int main() {
UARTSerial pc(USBTX, USBRX, 921600);
uint8_t buff[256] = {
5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4
};
pc.sync();
while(true) {
pc.write(buff, 23);
pc.sync();
wait(1);
}
return 0;
}
Код, который я запускаю на ПК:
int main() {
struct termios tattr{0};
// open the device in read/write sync
int com = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_SYNC );
if (com == -1)
throw std::runtime_error("ERROR: can't open the serial");
tcgetattr(com, &tattr);
tattr.c_iflag &= ~(INLCR|IGNCR|ICRNL|IXON);
tattr.c_oflag &= ~(OPOST|ONLCR|OCRNL|ONLRET);
tattr.c_cflag = CS8 | CREAD | CLOCAL;
tattr.c_lflag &= ~(ICANON|ECHO);
tattr.c_cc[VMIN] = 1;
tattr.c_cc[VTIME] = 0;
tattr.c_ispeed = 921600;
tattr.c_ospeed = 921600;
tcsetattr (com, TCSAFLUSH, &tattr);
while (true) {
usleep(1000);
tcflush(com, TCIOFLUSH);
uint8_t buff[24];
::read(com, buff, 23);
printf("reading frame... ");
for (auto b : buff) {
printf("%02X ", b);
}
puts("\n");
}
}
Вывод, который я получаю на ПК:
[...]
reading frame... 00 00 8D 9C 1E 7F 00 00 00 00 00 00 00 00 00 00 70 5B C7 01 AD 55 00 00
reading frame... 00 00 8D 9C 1E 7F 00 00 00 00 00 00 00 00 00 00 70 5B C7 01 AD 55 00 00
[...]
Как видите, результат не тот, который я ожидаю.
Я уже пытался посылать по одному байту за раз с циклом, но результат тот же.
Я не могу понять, почему я не могу прочитать USB, я пытался сбросить USB как на ПК, так и на плате с ядром.