HAL SPI DMA 1바이트씩 데이터 송신 시 송신함수 갯수?
0x00 0x01 0x02 0x03 이라는 데이터를 1바이트씩 송신하려고 합니다.
master 측에서
uint8_t buff = { 0x00, 0x01, 0x02, 0x03};
HAL_SPI_Transmit_DMA(&hspi2, buff, 1);
HAL_SPI_Transmit_DMA(&hspi2, buff, 1);
HAL_SPI_Transmit_DMA(&hspi2, buff, 1);
HAL_SPI_Transmit_DMA(&hspi2, buff, 1);
while(HAL_SPI_GetState(&hspi2) != HAL SPI STATE READY) {}
이렇게 사용해줘야 맞는건가요?
만약 그렇다면 slave 측에서도 receive 함수를 4번을 써야하는건가요??
#### 추가사항
SLAVE와 MASTER 둘 다 송수신 함수를 사용합니다.
둘 사이에 서로 다량의 바이트인 데이터를 주고 받으려는게 현재 목표입니다!
- 안녕하세요. - SPI 통신을 하기 위해서는 slave를 선택하는 CS 신호를 먼저 enable하고 송신 함수를 처리해야 합니다. - 아래 코드는 가장 기본적으로 구성한 예 입니다. 또는 한 번에 송신해도 됩니다. uint8_t buff = { 0x00, 0x01, 0x02, 0x03}; SPI_CS_ENABLE; //<<HAL_GPIO_WritePin() Set / Reset으로 제어 여기서는 reset값이 enable HAL_SPI_Transmit(&hspi1, buff[0], 1, 100); SPI_CS_DISABLE; //<<HAL_GPIO_WritePin() Set / Reset으로 제어 여기서는 set값이 disable HAL_Delay(10); SPI_CS_ENABLE; HAL_SPI_Transmit(&hspi1, buff[1], 1, 100); SPI_CS_DISABLE; HAL_Delay(10); SPI_CS_ENABLE; HAL_SPI_Transmit(&hspi1, buff[2], 1, 100); SPI_CS_DISABLE; HAL_Delay(10); SPI_CS_ENABLE; HAL_SPI_Transmit(&hspi1, buff[3], 1, 100); SPI_CS_DISABLE; HAL_Delay(10);- 4개의 버퍼값을 한 번에 보낼 때는 다음과 같습니다. SPI_CS_ENABLE; HAL_SPI_Transmit(&hspi1, buff, 4, 100); SPI_CS_DISABLE; HAL_Delay(10);
- 흐, 이게 말로 설명하기 보다는 동영상 강의를 하고 싶은 욕망이 드네요 - 그냥 쉽게 더 설명을 드리자면, - 마스터/슬레이브 역활을 하는 임베디드이든 그 무엇이든(중요) - 동기화가 중요하구요 사람으로 치면, - 마스터 - 손바닥에 있는 1개의 공을 슬레이브 쪽으로 던지는 역활 - 슬레이브 - 눈과 귀가 멀어서, 언제 손바닥에 공이 올지 모르지만, - 공이 손바닥에 닿으면 그 공을 호주머니에 넣는 역활이 되는거죠. - 그러니깐 , 슬레이브가 준비가 안되어 있는데 무조건 글자를 보내면, - 슬레이브의 상황에 따라 첫번째 글자는 받을수 있으나, - 호주머니에 공을 넣기도전에 또 마스터가 글자1개 보내고 또 글자 1개 보내면, - 슬레이브는 셋팅 상황에 따라 가운데 글자는 못받고 다음 글자를 받을수도 있습니다 - (보통 버퍼크기보다 작게 글자수 들어오면 탈락없이 다 수신되기는 합니다) - 이런걸 유념해두고 개발하시면 됩니다! - 이제 위 질문에 대한 답변을 하자면, 
 둘 사이에 서로 다량의 바이트인 데이터를 주고 받으려는게 현재 목표라고 하셨죠?- 그러면 지금과 같은 방식을 사용하시면 안됩니다 ^^ - 이게 워낙 다양한 내용인지라 한번에 답변은 안되고, 최저 통신사양(능력)에 맞춰서 프로그램을 개발하시라는 말밖에 못드리겠네요