目的:spi通信
如何通信?
两根线:miso mosi 输入输出全双工:读和写
光有两根线不够
时钟线 片选线 vcc gnd
时钟线clck提供工作节奏
片选线cs : 低(0)或者高(1)电平选中 反之不选中 当要读写访问芯片时必须选中,不访问是可以关闭不选中
选中可以是硬件选中,也可以是软件选中
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //cs信号由软件控制 即cs单独由一个管脚控制
stm32中spi有两个缓存寄存器 接收和发送寄存器
一次可以存8位即一个字节 所以软件编程显得更方便,不需要一位一位单独编程发送
SPIx->DR = Data;
SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个数据
同理,接收也是一样
注意:在发送和接收时要检查标志位,看是否为空或者已经满了
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET)
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
如果想要加快传输速度可以改变频率:
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler) //参数为分频值 单分频为36mhz
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
SPI2->CR1&=0XFFC7;
SPI2->CR1|=SPI_BaudRatePrescaler; //设置SPI2速度
SPI_Cmd(SPI2,ENABLE);
}