Nucleo와 Arduino 간에 SPI 통신이 잘 이루어지나요?
현재 Nucleo-F401re와 Arduino Uno 보드 간에 SPI 통신이 이루어지는 작업을 진행중입니다.
Uno를 Master Nucleo를 Slave로 설정하려고 하는데...
오랜 시간의 구글링에도 둘 사이의 SPI 통신에 대한 내용이 나오질 않고 있습니다...
여러 코드를 구현한 결과 일단 Nucleo에서 Uno로 데이터가 송신은 되는거 같은데, 자꾸 쓰레기 값만 나오게 됩니다.
제 생각에 이 이유는 Uno에서 Nucleo로 먼저 데이터를 송신하지 않았기 때문에 발생한거 같은데...
Nucleo에서 데이터를 받는 방법을 도무지 모르겠습니다;;
아래 코드는 STM32CubeIDE를 통해 작성한 SPI 데이터 수신 확인을 위한 코드 입니다.
uint8_t m[] = {};
HAL_SPI_Receive_IT(&hspi1,(uint8t*)m,(uint16_t)sizeof(m));
printf("Received Data : %x or %x\n", m, (uint8t*)SPI1->DR);
HAL_SPI_Receive_IT 함수가 문제인것 같은데
만약 문제라면 어떻게 고쳐야 하는지 궁금합니다.
제가 퇴근 중이라 정확하게 설명 드리기는 어렵지만
위의 코드에서 HALSPIReceive_IT에서 m에 값이 써지면 다시 말해서 수신 이벤트가 발생하면 ISR로 들어갑니다. callback함수에 그 이후에 처리할 기능을 넣으셔야 합니다.
IDE에서 프로젝트 검색으로 callback을 찾으시던가 아니면 프로젝트를 cube에서 생성하셨으면 IT(interrupt)관련 c파일에서 관련 callback 함수를 확인 할 수 있습니다.
위에서 언급된 수신값 출력하는 printf문이 callback 함수에 들어가야겠지요..
아니면 polling으로 먼저 검증해 보시기 바립니다.
두서없이 써서 죄송하네요..