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

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

정민지님의 프로필 이미지

작성한 질문수

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

난방실 만들기. (온도에 따른 드라이기 제어) 4

온도 소스코드 작성 후 디버깅

작성

·

81

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 자주 묻는 질문에 혹시 답이 있을 수 있어요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요 강의에 나온 것처럼 메인함수에서 TogglePin과 HAL_Delay함수를 실행했을 때 2초마다 드라이기가 커졌다 꺼졌다 하는 것까진 되는데 아래 사진처럼 코드 작성하고 디버깅을 하면 Ds18b20_Init();에서 넘어가지않고 온도만 업뎃됩니다 ㅠ 그리고 넘어간 적도 있었는데 넘어가면 Ds18b20_ManualConvert(); 이 부분에서 아무리 계속 Resume을 눌러도 계속 이 부분에 머물러서 온도정보만 업뎃되네요 어떤 게 문제인지 잘 모르겠어서 여쭤보게되었습니다 (온도센서랑 stm 핀들도 pa3이랑 잘 연결했어요 )

image.pngimage.png

 

답변 3

0

ojtube5님의 프로필 이미지
ojtube5
지식공유자

이건 코드를 봐야알것 같아요.
타이머 설정을 잘 못해서 너무 많은 인터럽트가 일어 나면서
온도 정보만 주구 장창 가져오는게 아닌가.. 한번 봐보세요.

그리고, 인터럽트 안에서 또 인터럽트를 호출하는 구조가 있지는 않은지..

이것도 저것도 안되면.

기능을 하나씩 주석 처리 해보면서..

어떤 기능을 동작 시켰을 때 문제가 시작되는지 봐보세요.

그러면 문제를 찾을 수 있어요.

정민지님의 프로필 이미지
정민지
질문자

클럭설정과 관련해서는 강의영상이랑 똑같이 설정했는데 디버깅해보니까 while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))

{

if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)

{

return HAL_TIMEOUT;

}

}

여기서 문제가 생기는 것 같은데 그럼 클럭을 조정해야하는건지 알 수 있을까요?

찾아보니까 HSE를 써서 그런 것 같은데 외부오실레이터를 사용하지 않는 방법은 없는걸까요..?!

image.png

 아니면 제가 아까 ioc 작업할 때 갑자기 디버깅하려는데 SPI1에 오류가 떠있길래 프리스케일러를 spi2와 동일하게 설정했었는데 이게 문제가 되었을까요?

0

정민지님의 프로필 이미지
정민지
질문자

아 제가 breakpoint를 걸어놨어서 그걸 해제하고 다시 디버깅해봤는데 SystemClock_Config에서 멈추는 것 같네요..live expression에선 온도 정보가 계속 업뎃되긴해요 그치만 이 함수에서 resume 버튼도 이제 안되어서 어디가 문제인건지 잘 모르겠네요 ㅠ

image.png

 

ojtube5님의 프로필 이미지
ojtube5
지식공유자

resume버튼은, 디버거에 걸렸을때 활성화가 돼요.
원래 활성화가 안 되는게 정상이예요.

침착하게, 하나씩 하나씩 생각하면서 해결하셔야 해요.
한번에 다 보려고 하지말고, 이해를 바탕으로 하나씩 점검을 하셔야 합니다.

아무튼, 클럭을 건드셨으면 문제가 될 수 있는 건 맞아요.
제거 TIM 쪽 강의 하는 부분에서, 클럭이 어떻게 설정되면, 몇 초 간격으로 인터럽트가 일어난다 라고 설명한 부분이 있는데.
그부분을 잘 이해보시면, 문제가 해결이 될 것 같아요.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 정민지님!

DS18B20 온도 센서를 사용하면서 코드 실행 중 디버깅을 하다 특정 함수에서 멈추는 것에 대해 고민이 많으신 것 같습니다. 이런 상황에서 확인해야 할 몇 가지 사항을 정리해 드리겠습니다.

  1. 센서 초기화 실패:

    • Ds18b20_Init(); 함수에서 멈춘다면, 센서 초기화 과정에 문제가 발생했을 가능성이 있습니다. 센서가 제대로 연결되어 있으며, 모든 핀이 맞게 설정되었는지 확인하세요.
  2. 라이브러리 및 설정 확인:

    • 사용 중인 라이브러리가 최신인지, 설정이 올바르게 되었는지 점검하세요. 간혹 라이브러리 버전 차이로 인해 생길 수 있는 문제입니다.
  3. 전원 공급 확인:

    • DS18B20 센서는 올바른 전원 공급(3.0V 이상)이 필요합니다. 전압이 부족하면 작동이 불안정할 수 있으니, 전원이 정상인지 확인하세요.
  4. 디버깅 툴 활용:

    • 디버깅 도구를 사용하여 함수들이 어떻게 호출되고 있는지, 어느 부분에서 지연이 발생하는지 자세히 확인해 보세요. Resume 기능 사용시 무한 대기 상태로 넘어가고 있다면, 논리 로직을 다시 점검해보는 것이 중요합니다.
  5. 풀업 저항:

    • 데이터 라인에 풀업 저항이 제대로 연결되어 있는지 확인합니다. 이 저항은 특히 1-Wire 통신에 필수적입니다.

비슷한 문제를 해결할 수 있는 기존 게시물들도 참고해 보세요:
- DS18B20 센서의 초기화 및 통신 문제 해결 방법
- 임베디드 개발 관련 DS18B20 데이터 처리 방법 사례

위의 정보를 바탕으로 문제를 확인하시고, 해결해 보시길 바랍니다. 만약 문제 해결이 여전히 어렵다면, 1:1 문의하기를 통해 직접적인 지식공유자의 조언을 받아보시기를 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.