STM32F4 USB CDC, не может использовать данные с pyserial
У меня проблема с сочетанием STM32F4 USB CDC и pyserial. Если мой код в STM32 хочет работать с полученными данными в main.c, я не могу открыть порт. Если нет, я могу отправлять и получать без проблем, информация успешно сохраняется в UserRxBufferFS.
Я получаю следующую ошибку:
>>> ser.open() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Program Files\Anaconda2\lib\site-packages\serial\serialwin32.py", line 78, in open
self._reconfigure_port() File "C:\Program Files\Anaconda2\lib\site-packages\serial\serialwin32.py", line 222, in
_reconfigure_port
'Original message: {!r}'.format(ctypes.WinError())) serial.serialutil.SerialException: Cannot configure port, something went wrong. Original message: WindowsError(87, 'Falscher Parameter.')
Я пытался сохранить данные в глобальной переменной, которую я объявил в usbd_cdc_if.h:
usbd_cdc_if.h: extern int my_buf[8];
usbd_cdc_if.c: my_buf[0]=UserRxBufferFS[0];
-> ошибка
Пытался вызвать функцию в обратном вызове, которая приносит информацию в мой main.c -> ошибка
Попробовал глобальный указатель, который указывает на буфер -> ошибка
Все это работает, когда я использую терминал Windows. Но мне нужно использовать pyserial. Когда я не работаю с данными, я могу подключиться, отправить и получить все без проблем.
У кого-нибудь есть представление о проблеме и способ ее решения?
1 ответ
WindowsError(87, "Параметр Фальшера")
Я полагаю, вы знаете, что означает "неправильный параметр". Вы отправили неверный параметр в процедуру?
Обратите внимание, что, очень вероятно, UserRxBufferFS
будет определяться как что-то вроде unsigned char
(Длиной 1 байт), потому что сообщение является байтовым. Вы определяете свой буфер как int
, который, вероятно, имеет длину 2 или 4 байта.
Может быть, вы проходите мимо int
к процедуре передачи или инициализации, где эта процедура ожидает байты? (или же unsigned char
s)
my_buf[0]=UserRxBufferFS[0];
передает первый элемент из UserRxBufferFS
в my_buf
который, вероятно, копирует unsigned char
в int
, что также может дать неожиданные результаты.