작성
·
81
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 자주 묻는 질문에 혹시 답이 있을 수 있어요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요 강의에 나온 것처럼 메인함수에서 TogglePin과 HAL_Delay함수를 실행했을 때 2초마다 드라이기가 커졌다 꺼졌다 하는 것까진 되는데 아래 사진처럼 코드 작성하고 디버깅을 하면 Ds18b20_Init();에서 넘어가지않고 온도만 업뎃됩니다 ㅠ 그리고 넘어간 적도 있었는데 넘어가면 Ds18b20_ManualConvert(); 이 부분에서 아무리 계속 Resume을 눌러도 계속 이 부분에 머물러서 온도정보만 업뎃되네요 어떤 게 문제인지 잘 모르겠어서 여쭤보게되었습니다 (온도센서랑 stm 핀들도 pa3이랑 잘 연결했어요 )
답변 3
0
이건 코드를 봐야알것 같아요.
타이머 설정을 잘 못해서 너무 많은 인터럽트가 일어 나면서
온도 정보만 주구 장창 가져오는게 아닌가.. 한번 봐보세요.
그리고, 인터럽트 안에서 또 인터럽트를 호출하는 구조가 있지는 않은지..
이것도 저것도 안되면.
기능을 하나씩 주석 처리 해보면서..
어떤 기능을 동작 시켰을 때 문제가 시작되는지 봐보세요.
그러면 문제를 찾을 수 있어요.
0
아 제가 breakpoint를 걸어놨어서 그걸 해제하고 다시 디버깅해봤는데 SystemClock_Config에서 멈추는 것 같네요..live expression에선 온도 정보가 계속 업뎃되긴해요 그치만 이 함수에서 resume 버튼도 이제 안되어서 어디가 문제인건지 잘 모르겠네요 ㅠ
resume버튼은, 디버거에 걸렸을때 활성화가 돼요.
원래 활성화가 안 되는게 정상이예요.
침착하게, 하나씩 하나씩 생각하면서 해결하셔야 해요.
한번에 다 보려고 하지말고, 이해를 바탕으로 하나씩 점검을 하셔야 합니다.
아무튼, 클럭을 건드셨으면 문제가 될 수 있는 건 맞아요.
제거 TIM 쪽 강의 하는 부분에서, 클럭이 어떻게 설정되면, 몇 초 간격으로 인터럽트가 일어난다 라고 설명한 부분이 있는데.
그부분을 잘 이해보시면, 문제가 해결이 될 것 같아요.
0
안녕하세요, 인프런 AI 인턴입니다. 정민지님!
DS18B20 온도 센서를 사용하면서 코드 실행 중 디버깅을 하다 특정 함수에서 멈추는 것에 대해 고민이 많으신 것 같습니다. 이런 상황에서 확인해야 할 몇 가지 사항을 정리해 드리겠습니다.
센서 초기화 실패:
Ds18b20_Init();
함수에서 멈춘다면, 센서 초기화 과정에 문제가 발생했을 가능성이 있습니다. 센서가 제대로 연결되어 있으며, 모든 핀이 맞게 설정되었는지 확인하세요.라이브러리 및 설정 확인:
전원 공급 확인:
디버깅 툴 활용:
풀업 저항:
비슷한 문제를 해결할 수 있는 기존 게시물들도 참고해 보세요:
- DS18B20 센서의 초기화 및 통신 문제 해결 방법
- 임베디드 개발 관련 DS18B20 데이터 처리 방법 사례
위의 정보를 바탕으로 문제를 확인하시고, 해결해 보시길 바랍니다. 만약 문제 해결이 여전히 어렵다면, 1:1 문의하기를 통해 직접적인 지식공유자의 조언을 받아보시기를 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
클럭설정과 관련해서는 강의영상이랑 똑같이 설정했는데 디버깅해보니까 while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos))
{
if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
}
여기서 문제가 생기는 것 같은데 그럼 클럭을 조정해야하는건지 알 수 있을까요?
찾아보니까 HSE를 써서 그런 것 같은데 외부오실레이터를 사용하지 않는 방법은 없는걸까요..?!
아니면 제가 아까 ioc 작업할 때 갑자기 디버깅하려는데 SPI1에 오류가 떠있길래 프리스케일러를 spi2와 동일하게 설정했었는데 이게 문제가 되었을까요?