USB 인터페이스가 있는 STM32F4 마이크로 컨트롤러가 있고 이를 Raspberry Pi에 연결합니다. 연결되면 로 표시됩니다 /dev/ttyACM0
. 매초마다 장치에서 일부 문자를 보내고 있습니다.
창문에서는 퍼티를 사용하면 모든 것이 잘 작동합니다. 캐릭터 잘 받았습니다.
Raspberry Pi에서 다음 명령을 실행하면:
>> sudo tail -f /dev/ttyACM0
화면에는 아무것도 표시되지 않습니다. 내 디버거에서 장치가 "정지"되지 않고 올바르게 전송되는 것처럼 보입니다.
명령이 실행되지 않으면 tail
장치(간단한 프로그램 포함)가 정지되고 감시 타이머가 시간 초과됩니다.
퍼티가 목록에 없을 때 Windows에서 동일한 증상이 나타나므로 이 동작은 정상적인 것 같습니다.
보낸 문자를 어떻게 표시하나요?
이게 권리 문제인가요? 다른 프로그램을 사용해야 하나요? 포럼에서 몇 가지 제안을 시도해 보았습니다. 99-com.rules, set all rights to
/dev/ttyACM0`에서 규칙을 변경했지만 운이 없었습니다.
답변1
PuTTY는 터미널 에뮬레이터이므로 한 번에 한 문자를 처리하도록 설계되었습니다.
반면 tail
에 명령 설계로 인해 또는 TTY 드라이버가 출력을 버퍼링하기 때문에(기본 설정이 재정의되지 않는 한) 기본적으로 전체 문자 라인이 필요할 수 있습니다.
.minicom
cu
작동하지만 사용하기에 적합하지 않다고 판단되는 경우 stty -a -F /dev/ttyACM0
포트를 사용하는 동안 TTY 장치 설정 목록을 사용한 다음 stty
명령을 사용하여 해당 설정을 재현한 후 사용할 수 있습니다 tail -f
. 이 사용 사례에 필요하지 않은 모든 TTY 장치 기본 기능을 비활성화하려면 다음과 같은 것이 필요할 수 있습니다.
stty -F /dev/ttyACM0 -crtscts ignbrk -icrnl -onlcr -ixon -opost -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
참고: stty
옵션 구문은 더 이상 사용되지 않습니다. 각 옵션 키워드 앞에 있는 빼기 기호는장애를 입히다해당 TTY 장치 옵션; 빼기 기호 없이 키워드를 사용하면 활성화됩니다.
tail
사용 중인 명령 버전(아마도 GNU 패키지뿐만 아니라 RasPi에서 실행 중인 배포판 coreutils
에서도 가능 )이 완전히 라인 지향적이고 변경할 수 없는 것으로 밝혀지면 여전히 적합하지 않을 수 있습니다. busybox
때때로 마이크로컨트롤러가 보낸 문자에 Unix 스타일 개행 문자가 포함되어 있는 경우가 아니면 작업을 위해. (마이크로컨트롤러가 LF 대신 CR을 보내는 경우 icrnl
해당 옵션을 활성화하면 TTY 드라이버가 문제를 해결할 수 있습니다.)
답변2
#!/bin/bash
cat < /dev/ttyACM0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"}\
/GPGGA/ { print "ID: ", $1, "Time: ", $2, "Lat: ", $3, "Lon: ", $5, "Höhe: ", $10}' > data
이 스크립트는 라즈베리파이용입니다. 데이터는 "data" 파일에 저장됩니다.