RS232 포트에서 RTS 핀을 전환할 때 출력 차이가 발생하지 않는 이유는 무엇입니까?

RS232 포트에서 RTS 핀을 전환할 때 출력 차이가 발생하지 않는 이유는 무엇입니까?

RS232 신호의 RTS 또는 DTR 핀을 제어하여 출력을 켜거나 끄거나 릴레이 등을 전환하려고 합니다. DTR 또는 RTS 플래그를 켜거나 끄는 스크립트를 C로 만들었지만 직렬 포트와 터미널 어댑터의 출력에는 차이가 없습니다(아래 이미지 참조).

여기에 이미지 설명을 입력하세요.

RS232의 구조는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

그림에 표시된 대로 RTS 신호는 핀 8에 있으며 "on"으로 표시했을 때 핀 1(접지)과 핀 8(RTS) 사이를 측정하여 3V를 얻었습니다. 다시 끄면 3V로 유지되므로 DTR이나 RTS를 전환해도 아무 변화가 없습니다.

내가 뭘 잘못하고 있는지 아는 사람 있나요?

고쳐 쓰다

아래 코드를 시도했습니다 (@Vincent Achard의 답변과 일치한다고 생각합니다). 이것은 작동하지 않습니다. 핀 1(접지)과 핀 6(5V 출력) 사이를 측정하면 스크립트를 실행할 때 5V가 남아 있습니다. 또한 핀 1(접지)과 핑 8(RTS) 사이를 측정하면 스크립트를 실행할 때 전압이 여전히 2.8V입니다. 이 코드에 문제가 있는 사람이 있나요?

여기에 이미지 설명을 입력하세요.

미리 감사드립니다!

답변1

직렬 인터페이스의 DTR 및 RST 핀은 GPIO와 다르게 작동합니다. 즉, 레벨이 높거나 낮게 유지되지 않습니다.

기본값이 아닌 영구적인 상태를 얻기 위해 커널 tty 드라이버를 수정하여 이 동작을 재정의할 수 있습니다.

파일: drivers/tty/tty_port.c

내부에

function tty_port_shutdown() 

바꾸다

tty_port_lower_dtr_rts(port);

통과

tty_port_raise_dtr_rts(port); 

어쩌면 더 간단한 해결책이 있을까요? ? ?

관련 정보