STM8S - SPI 테스트
STM8S의 SPI는 최대 클럭 스피드 10Mhz로 동작한다. 동급의 8bit MCU인 AVR과 비교하면 조금더 성능이 좋아 보인다.
S-Type EVM 보드를 이용하여 SPI인터페이스의 가속도센서를 테스트 해 보았다.
STM8S SPI블록도
8bit MCU의 전형적이 SPI구조 이고 AVR과 비교 했을때 큰 차이가 없어 보인다.
STM8S SPI초기화 함수
void SPI0_Init(void)
{
SPI_DeInit();
SPI_Init(SPI_FIRSTBIT_MSB,
SPI_BAUDRATEPRESCALER_32,
SPI_MODE_MASTER,
SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_2EDGE,
SPI_DATADIRECTION_2LINES_FULLDUPLEX,
SPI_NSS_HARD, 0x00);
SPI_Cmd(ENABLE);
}
STM8S SPI송수신 함수
레지스터의 SPI_FLAG_TXE 비트를 검사해서 1이면 SPI버퍼가 비어 있으므로 데이터를 쓰고, SPI_FLAG_RXNE비트가 1이되면 읽을 준비가 되었으므로 수신한 값을 리턴하면 된다.
unsigned char SPI0_WriteReadByte(unsigned char Data)
{
while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
SPI->DR = Data;
while(SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);
return SPI->DR;
}