GPIO15(RXD) 핀을 통해 Raspberry Pi에서 직렬 데이터를 수신하려고 합니다. 다음 Python 스크립트가 있습니다.
serPort = serial.Serial("/dev/ttyAMA0", baudrate=2400)
while True:
rcv = ord(serPort.read())
print(str(rcv))
Raspbian 배포판에서 원활하게 작업하는 데 사용됩니다. 들어오는 모든 바이트를 인쇄합니다.
변화하는 분포를 찾을 수 있는 곳. 그리고 DietPI를 팔로우하세요. DietPI 배포판을 사용합니다. 가비지 바이트만 수신합니다. (주로 0이 많습니다).
몇 가지 참고사항:
stty -F /dev/ttyAMA0 -a (이전 배포판에 대한 결과):
speed 2400 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
stty -F /dev/ttyAMA0 -a (새로운 Dietpi 배포판에 대한 결과):
speed 2400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke -flusho -extproc
Dietpi의 stty 명령(stty -F /dev/ttyAMA0 2400)을 통해 전송 속도를 구성하는 경우. 2400으로 변경됩니다. 하지만 직렬 데이터로 폭발시키면 다른 값으로 다시 변경됩니다. 대부분의 경우 19200입니다. 전송 속도에 자동으로 보정을 시도할 것이라고 생각했습니까? 이전 배포판에서도 여전히 작동하는 것을 확인했습니다. 이는 하드웨어 문제가 아닙니다. Dietpi 배포판의 직렬 포트 구성에 문제가 있습니까?