STM8的硬件SPI当作主设备时从设备可以通过NSS(E5)端口自动选择或通过其它IO口用软件来选择,但是对于没有E5这个引脚的芯片,如STM8S003来说只能用软件选择。
但是起初还以为既然没有NSS这个引脚,那设备成硬件模式也无妨,可这个想法是错误的,设置主模式后的CR2寄存器全0时SPI无法正常工作,只有将CR2寄存器设置成3,即SSM,和SSI位置位SPI才开始工作,这个不是很理解。也许SSM,和SSI引脚只是为从模式准备的,在主模式下工作时这两个位必须是1硬件SPI才能工作。
硬件SPI在主模式下配置及读写代码:
void spi_init(void)
{
SPI->CR1=SPI_CR1_SPE|/*SPI_CR1_CPHA|SPI_CR1_CPOL|*/SPI_CR1_MSTR|(3<<3); //16分频
SPI->CR2=SPI_CR2_SSM|SPI_CR2_SSI; //在主模式下这两个位必须设置?
}
uint8_t spi_rw_byte(uint8_t dat)
{
while(!(SPI->SR & SPI_SR_TXE));
SPI->DR=dat;
while(!(SPI->SR&SPI_SR_RXNE));
return SPI->DR;
}
|
|