본문 바로가기
임베디드.일렉트로닉스/STM32

STM32. SPI 읽기 쓰기. 동작특성.

by i.got.it 2019. 11. 11.

 

 

개요.

 

STM32 의 SPI 이용하여 Keil MDK-ARM 에서 읽기 쓰기 간단한 코드와 쓰기 , 읽기 동작 특성 스코프로 확인.

 

SPI설정 : 상세보기 -> http://igotit.tistory.com/653 

클럭 10.5MHz, 데이터 8비트.

 

SPI 통신 상황.

본 STM32 는 디스커버리 보드 (http://igotit.tistory.com/156)  이용하였고, SPI slave 는 아래 붉은색 보드인 cc3100 개발보드 (http://igotit.tistory.com/294).

 

 

 

 

 

 

SPI Read, Write 코드 동작특성 스코프 확인.

 

 

SPI Read 함수.

1
2
3
4
5
6
7
8
9
10
11
12
13
 
#define L_SPI2CS GPIOB->BSRRH = GPIO_PIN_12 // macro for SPI2 CS to low command
#define H_SPI2CS GPIOB->BSRRL = GPIO_PIN_12 // macro for SPI2 CS to high command
 
 //SPI Read 
int spi_Read(Fd_t fd, unsigned char *pBuff, int len)
{
  L_SPI2CS; // SPI2_CS LOW
  HAL_SPI_Receive(&hspi2, pBuff, len, 10000);
  H_SPI2CS; // SPI2_CS HIGH
  return len;
}
 

SPI Write 함수.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#define L_SPI2CS GPIOB->BSRRH = GPIO_PIN_12 // macro for SPI2 CS to low command
#define H_SPI2CS GPIOB->BSRRL = GPIO_PIN_12 // macro for SPI2 CS to high command
 
 // SPI Write
int spi_Write(Fd_t fd, unsigned char *pBuff, int len)
{
 int len_to_return = len;
 L_SPI2CS; // SPI2_CS LOW
 HAL_SPI_Transmit(&hspi2, pBuff, len, 10000); //Transmit an amount of data in blocking mode
 H_SPI2CS;  // SPI2_CS HIGH
  return len_to_return;
}
 

위 2개의 함수를 시험하는 코드는 main.c 의 while문 내에 아래처럼 호출됨.  각 함수 1회 호출시 2바이트 연속으로 읽기, 2바이트 연속으로 쓰기 처리 이뤄진다.

 

  while (1)
  {
    spi_Write(0, testbytes, 2);
    spi_Read(0, testbytes, 2);
  }
 

 

spi_Read(0, testbytes, 2);  실행시 SPI 클럭과 CS

SPI Read 2바이트 연속 시 CS(아래), SPI 클럭. 1바이트 읽고 한참 있다가 1바이트 읽음.

 

spi_Write(0, testbytes, 2); 실행시 SPI클럭과 CS

SPI Write 2바이트 연속 쓰기. CS(아래), SPI 클럭(위) 1바이트 쓰기 이후 끊김없이 2번째 바이트 기록됨.

 

 

 

  spi_Write(0, testbytes, 2);
  spi_Read(0, testbytes, 2); 
 쓰기 읽기 연속 실행시 SPI 클럭과 CS. 

 

 

 

주요 동작 특징.

spi read 동작에서 여러바이트 읽기 하면, 바이트들 사이에 쉬었다가 읽기 처리된다는점. write 는 연속으로 라이팅됨.

SPI읽기 동작시 바이트 단위로 잠시 쉬는 구간이 발생하는 것이 칩의 원천적인 특성인지, 혹은 제공되는 라이브러리 함수인 HAL_SPI_Receive() 에서 의도된 쉬었다가 읽기 인지 현재 명확하지 않음. 

 

 

 

 

 

 

 

연관 

https://igotit.tistory.com/2377

 

SimpleLink . STM32 (이클립스 GCC ) 에 포팅하기

주의사항 : 본 글의 이클립스 관련. 본 글이 첫 작성된 시점은 2014년 8월 14일 이며, 그 당시엔 이클립스에서 STM32 개발환경 구축하기도 하였기에 이클립스 포팅예를 보이고 있다. 현재(2019년 11월)는 무료 활..

igotit.tistory.com

 

SPI mode 필수 점검 

https://igotit.tistory.com/2088

 

SPI mode 4종. CPOL, CPHA

SPI Mode 4종. SPI master 와 SPI Slave 의 모드가 동일해야 정상 SPI 통신 가능함. ( -동시에 SPI 클럭도 칩마다 최고 속도가 다르며 최고속도 이하에서만 정상통신 가능) SPI 통신 규격의 CPOL(0, 1) , CPHA(0,..

igotit.tistory.com

 

 

 

 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

상위 정리글 

http://igotit.tistory.com/244 의 STM32

 

STM32. nRF52. ESP32. EFM8. EFM32. PSoC 활용 정리.

STM32. nRF52. ESP32. EFM8. EFM32. PSoC 총정리 제조사 칩 주요특징 실리콘랩 8bit MCU EFM8 시리즈 32bit EFM32 시리즈 EFM8 싸다. STM STM32 . 최고 항상 만족. Cypress pSoC pSoC6 은 기대해볼만. NORDIC nRF5..

igotit.tistory.com

 


첫 등록 : 2016년 6월 

최종 수정 : 2019년 11월 11일 

단축 주소 : https://igotit.tistory.com/654

 


 

///654.

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5