inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

1-Wire통신! 나름 유명했다. (온도센서) 2

78번 강의 관련 온도센서 질문이 있습니다.

19

서정민

작성한 질문수 1

0

해당 모듈의 타이밍도가 LOW만 밑으로 강하게 당기고, 풀업 저항이 기본적으로 붙어있는 점을 보았을때, GPIO mode를 Open Drain으로 설정해야하지 않을까요? 강사님께선 해당 온도 모듈을 Push Pull 모드로 설정하셨는데 이유가 궁금합니다

스크린샷 2026-10-12 444.png.webp
스크린샷 2026-10-12 154213.png.webp

!

Raspberry-Pi arduino 임베디드

답변 1

0

ojtube5

안녕하세요! 타이밍도와 회로도를 같이 보시고 정확하게 짚어주셨네요 👍

결론부터 말씀드리면, 원칙적으로는 말씀하신 대로 Open Drain이 맞습니다. 제가 CubeMX에서 습관적으로 Push-Pull로 설정했는데, 이 예제에서는 그 설정이 실제 동작에 영향을 주지 않아서 문제없이 동작했습니다.

1. 왜 Open Drain이 맞을까요?

1-Wire는 MCU와 센서가 선 하나를 같이 쓰는 방식입니다. 그래서 각 장치는 선을 LOW로 당기기만 하고, HIGH는 10K 풀업 저항이 만들어 줍니다. 말씀하신 대로 타이밍도에서 LOW만 강하게 당기는 이유가 이것입니다.

  • Open Drain: LOW 출력과 손 놓기(High-Z)만 할 수 있어서 1-Wire와 잘 맞습니다.

  • Push-Pull: HIGH도 직접 출력합니다. MCU가 HIGH를 출력하는 동안 센서가 LOW로 당기면 두 출력이 부딪혀(쇼트) 신호가 깨지거나 핀에 무리가 갈 수 있습니다.

2. 그런데 이 예제에서는 왜 괜찮았을까요?

이유는 두 가지입니다.

① 온도 센서 라이브러리(onewire.c)가 통신할 때마다 핀 모드를 직접 다시 설정합니다. LOW로 당길 때는 GPIO_MODE_OUTPUT_OD(Open Drain), 선을 놓을 때는 GPIO_MODE_INPUT으로 바꿉니다. 그래서 CubeMX에서 정한 Push-Pull 설정은 통신이 시작되면 바로 덮어써집니다.

② HIGH가 필요할 때도 라이브러리는 HIGH를 직접 출력하지 않고, 핀을 입력 모드로 바꿔서 풀업 저항이 HIGH를 만들게 합니다. 그래서 출력끼리 부딪히는 상황이 생기지 않습니다.

3. 정리하면

  • 이론적으로 맞는 설정은 Open Drain입니다. 질문하신 내용이 정확합니다.

  • 이 예제에서는 라이브러리가 모드를 직접 바꿔서 Push-Pull로 둬도 동작에 차이가 없었습니다.

직접 하실 때는 CubeMX에서 GPIO Output Open Drain / No pull로 설정하시는 걸 추천드립니다. 그렇게 바꿔도 동작은 똑같습니다.

결론은 저의 실수네요.
감사합니다.

디버깅이 잘연결되다가 연결이 끊어졌어요

0

91

2

디버깅 오류

0

128

2

ST Link 유무에 따른 main 프로그램 시작 유무

0

86

2

111번째 강의까지 진행했는데, 온도 정보 받아오는 게 안돼요.

0

108

2

GPIO 간단 제어해보기 강의

0

172

2

브레이크포인트

0

96

2

STM IDE 설치 과정 중 에러 문의

0

103

1

STM IDE 설치 강의 중 문의

0

156

2

102. 난방실만들기4에서 디버깅 질문드립니다

0

80

2

13강 프로젝트생성해보기 관련 질문

0

190

3

난방실만들기.4 진행 중, m_state 값 초기화가 안됩니다..

0

115

2

IDE 설치 영상 관련 문의

0

107

2

[정보 공유] STM32CubeIDE 버전별 이슈 정리 (1.19 미만 / 2.0.0 이상)

0

457

2

스위치회로 value값 바뀌지 않음

0

137

2

FND 점등에 성공했는데, Controller.c 디버깅 중 문제가 생겼습니다.

0

139

2

FND 7세그먼트 처음 킬 때의 '7777'불이 안 들어옵니다.

0

158

2

포트에 안잡히면 x쉘에서 Port설정을 어떻게 하죠..?

0

162

2

빌드 및 디버깅 오류

0

313

2

보드에 불이 안들어옵니다.

0

160

2

씽크 오류

0

96

1

고추건조기 개발보드 전원연결 문제점..

0

161

2

회로도 핀 연결 질문

0

119

2

elf 파일을 찾을수 없다는 오류

0

170

2

Nucleo 보드로 대체

0

132

2