本文采用同步传输方式,发送(接收)32bit数据
1.添加Mcu、Port、Spi模块
2.将所有模块都设为预编译模式
3.port模块配置:添加引脚CS、CLK、MOSI、MISO以及片选芯片的使能脚(使能脚可能有多个,具体参照芯片手册),这里需要注意MISO的引脚配置,选择SIN_IN,不能选择SIN_OUT,否则返回的数据能测到波形,但变量不会更新
4.SPI模块配置
1)SpiPhyUint配置,主要选择哪一路SPI,主从模式、同步异步传输配置
2)SpiDriver配置:SpiMaxChannel是配置的通道数,SpiMaxJob、SpiMaxSequence与SpiMaxChannel保持一致即可
SpiChannelType:EB是采用外部Buffer,IB是采用内部Buffer,这里与SpiGenernal--SpiChannelBuffersAllowed的配置有关联
SpiDataWidth:数据长度
SpiEbMaxLength:Eb的最大长度,我这里发送32位数据,以uint8 Tx[4]的数组形式发送,因此是4;如果还是发送32位数据,以uint32 Tx的形式发送,这里就是32
3)片选相关配置(核心)
SpiCsPolarity:片选极性,看SPI时序图,低电平的时候在传输数据,因此选择LOW
SpiDataShiftEdge:选择上升沿转换数据还是下降沿,看SPI时序图,是上升沿开始转换数据
SpiShiftClockIdleLevel:选择空闲电平是高还是低,这里时序图非常容易误解是高电平,这里是看CS拉低时的电平,这里是低电平
4)SpiJob、SpiSequence:这里注意配多个SPI时SpiChannel、SpiJob、SpiSequence要一一对应
5.MCU模块配置
需要手动打开添加的模块LPSPI3
6.代码
1)配置完成后生成代码,添加相关头文件,建一个Tx Buffer和一个Rx Buffer
2)在main函数里初始化MCU、Port、Spi,初始化完后即可发送/接收
3)这里主要讲一下SPI传输的两个函数
Spi_SetupEB(),有四个参数,第一个选择使用的哪个Channel,第二个参数是发送地址指针,第三个参数是接收地址指针,第四个参数是外部缓冲区的数据长度
Spi_SyncTransmit() 发送、接收都是调用这个函数
Channel与Sequence两个参数,代码生成的位置如下图