USB VCP를 사용하기 위해 STM32F4 Discovery Board에서 http://blog.memsme.com/stm32f4-virtual-com-port-2/의 VCP (Virtual COM Port) 예제 코드를 사용하고 있습니다. 이 코드는 ST에 의해서 작성되었으며 프로젝트의 다른 많은 사람들이 사용합니다.pyserial/Linux에서 Virtual COM이 작동하지 않지만 다른 방식으로 작동합니다.
VCP를 통한 STM32F4와의 통신은 Windows에서 정상적으로 작동합니다. 그때
echo "aasfg" > /dev/ttyACM0
와 포트로 데이터를 보내는 경우 리눅스 (우분투 12.04 86)에서의 MCU는 데이터를 가져 와서 모든 것이 잘 작동합니다. 나는 내가 고양이 명령으로 데이터를 수신하고, 다음과 같은 중지 후
import serial
sercom = serial.Serial('/dev/ttyACM0')
sercom.write('asdf')
pySerial
를 사용하는 간단한 파이썬 스크립트로 데이터를 보내는 경우 나, 그러나cat /dev/ttyACM0
으로 연속적인 데이터 스트림을받을 수 있습니다 고양이 명령도 데이터를 수신하지 않습니다. MCU는 일부 USB 인터럽트 루틴을 지속적으로 실행하고 있으며 실제 응용 프로그램 코드를 실행하기 위해 복귀하지 않습니다. 기기를 다시 연결 한 후 VCP에서 데이터를 다시 수신 할 수 있습니다.
STM32 USB VCP 코드는 아마도 완벽하지는 않지만 많은 프로젝트에서 다른 많은 사람들이 사용하기에 충분히 좋을 것입니다. 해당 코드를 디버그 할 수 없습니다. 나는 pySerial과 함께 데이터를 보내는 것이 VCP 드라이버 (STM32 나 PC에서)가 마음에 들지 않는 포트를 가지고 뭔가를하는지 의심 스럽다. 그리고 그것을 추적하고 바라건대 여전히 pySerial을 사용하고 싶다.
나는 전에stty --file=/dev/ttyACM0 -a
을 실행하고 pyserial 후 통신을 끊었다. 설정 VCP pyserial으로 파괴 후 -clocal는 CLOCAL은 1 분 = 0되었다 = 분으로 설정되었다. 이것들은 VCP 통신과 관련이 있으며, VCP를 pySerial로 수정하는 방법을 알려줄 수 있습니까?
파이썬 스크립트의 끝 부분에서 직렬 포트를 명시 적으로 닫지 않았기 때문일 수 있습니다. 'sercom.close()'. 닫지 않으면 포트가 사용중인 것처럼 보일 수 있습니다. – jramirez