인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

채우정님의 프로필 이미지
채우정

작성한 질문수

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

다른 사람 소스 분석하는 방법 5

OneWire_WriteBit와 OneWire_ReadBit함수에 대해 궁금한 점이 있습니다.

작성

·

9

·

수정됨

0

if (bit)

{

/* Set line low */

ONEWIRE_LOW(OneWireStruct);

ONEWIRE_OUTPUT(OneWireStruct);

ONEWIRE_DELAY(10);

 

/* Bit high */

ONEWIRE_INPUT(OneWireStruct);

 

/* Wait for 55 us and release the line */

ONEWIRE_DELAY(55);

ONEWIRE_INPUT(OneWireStruct);

}

 

위는 OneWire_WriteBit의 한 부분으로 이 부분에서 LOW로 만들어서 output모드로 만든 다음에 10us만큼 딜레이를 줘서 input 모드로 만들어서 버스를 high로 만드는 것이라고 이해했습니다. 그런데 이 이후에 딜레이를 55us 만큼 준 다음에 다시 input 모드로 만드는 이유는 무엇인가요?

inline uint8_t OneWire_ReadBit(OneWire_t* OneWireStruct)

{

uint8_t bit = 0;

 

/* Line low */

ONEWIRE_LOW(OneWireStruct);

ONEWIRE_OUTPUT(OneWireStruct);

ONEWIRE_DELAY(2);

 

/* Release line */

ONEWIRE_INPUT(OneWireStruct);

ONEWIRE_DELAY(10);

 

/* Read line value */

if (HAL_GPIO_ReadPin(OneWireStruct->GPIOx, OneWireStruct->GPIO_Pin)) {

/* Bit is HIGH */

bit = 1;

}

 

/* Wait 50us to complete 60us period */

ONEWIRE_DELAY(50);

 

/* Return bit value */

return bit;

}

그리고 OneWire_ReadBit에서 input모드로 바꾸는 것이 버스를 high로 만든다는 것을 주석으로 짐작한거라서 정확히 바꾼 이유를 잘 모르겠습니다. input모드가 디폴트 모드인건가요?

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
채우정님의 프로필 이미지
채우정

작성한 질문수

질문하기