시리얼 포트를 사용하여 마이크로 컨트롤러 (STM32F103C8T6)와 통신하는 간단한 파이썬 스크립트가 있습니다. 한 번에 두 개의 44 바이트 메시지를 작성하기 위해 pySerial을 사용하고 있습니다.Python을 사용하여 시리얼을 통해 통신하기위한 최소 지연
[...]
serial = serial.Serial(serial.tools.list_ports.comports()[0].device, 115200)
packet0 = bytearray(INSERT_RELEVANT_44-BYTES)
packet1 = bytearray(INSERT_RELEVANT_44-BYTES)
serial.write(packet0)
time.sleep(0.1) # Delay between communications
serial.write(packet1)
[...]
통신 사이에 지연을 삽입해야합니다. 그렇지 않으면 작동하지 않습니다. 내 추론은 115200 bps의 전송 속도의 경우 메시지는 44 * 8/115200 = ~ 0,003 초 전송되어야하므로 패킷 전송 사이의 최소 간격이되어야합니다. 그러나 코드는 0,1보다 작은 값에서는 작동하지 않습니다.
왜? 내가 놓친 게 있니? 운영 체제 및 USB로 인해 지연이 발생한다고 가정하겠습니다 만, 0,7 초를 고려해서는 안됩니다. 최소 지연 시간을 사용하려면 어떻게 최적화 할 수 있습니까?
* "작동하지 않을 것입니다"* - 진단 정보가 포함되지 않은 요약입니다. 당신의 * "추론"*은 약간 꺼져 있습니다. 그것은 문자 당 프레이밍의 2 비트를 설명하지 못합니다. 당신은 최소한의 지연으로 전송하는 것이 실용적이라고 생각하게합니다; 즉 그러한 패킷 레이트를 처리 (수신 및 처리) 할 수있는 수신기인가? 또한 수면 기능의 정확성과 해석 된 언어의 오버 헤드를 고려하십시오. – sawdust
그것은 stm32에서 직렬 포트를 사용하는 방법에 따라 다릅니다. stm32에서 작성한 코드를 공유 할 수 있습니까? – saygins
발신 측에서만 원인을 찾고있는 것 같습니다. 문자를 잃을 수있는 발신자와 수신자가 있습니다 (귀하의 경우 문자 그대로 문자가 손실 될 수있는 USB 대 직렬 어댑터가있는 것 같습니다). * 문제가있는 곳에서 더 많은 진단을하지 않으면 아마 도움이되지 않을 것입니다. – tofro