spi 学习笔记

目的: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); 





猜你喜欢

转载自blog.csdn.net/shenlong1356/article/details/79922810
SPI
今日推荐