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


!
답변 1
1
안녕하세요! 타이밍도와 회로도를 같이 보시고 정확하게 짚어주셨네요 👍
결론부터 말씀드리면, 원칙적으로는 말씀하신 대로 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
93
2
디버깅 오류
0
128
2
ST Link 유무에 따른 main 프로그램 시작 유무
0
87
2
111번째 강의까지 진행했는데, 온도 정보 받아오는 게 안돼요.
0
109
2
GPIO 간단 제어해보기 강의
0
181
2
브레이크포인트
0
100
2
STM IDE 설치 과정 중 에러 문의
0
105
1
STM IDE 설치 강의 중 문의
0
159
2
102. 난방실만들기4에서 디버깅 질문드립니다
0
83
2
13강 프로젝트생성해보기 관련 질문
0
192
3
난방실만들기.4 진행 중, m_state 값 초기화가 안됩니다..
0
117
2
IDE 설치 영상 관련 문의
0
107
2
[정보 공유] STM32CubeIDE 버전별 이슈 정리 (1.19 미만 / 2.0.0 이상)
0
460
2
스위치회로 value값 바뀌지 않음
0
137
2
FND 점등에 성공했는데, Controller.c 디버깅 중 문제가 생겼습니다.
0
139
2
FND 7세그먼트 처음 킬 때의 '7777'불이 안 들어옵니다.
0
159
2
포트에 안잡히면 x쉘에서 Port설정을 어떻게 하죠..?
0
164
2
빌드 및 디버깅 오류
0
315
2
보드에 불이 안들어옵니다.
0
162
2
씽크 오류
0
96
1
고추건조기 개발보드 전원연결 문제점..
0
162
2
회로도 핀 연결 질문
0
120
2
elf 파일을 찾을수 없다는 오류
0
170
2
Nucleo 보드로 대체
0
132
2





