盘古UE-STM32F407工控板原理图
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
STM32F407 的1588问题(已解决)
最近也遇到了这个问题,来解答一下
CS被提早拉高的原因,
先从是发送数据缓冲区空判定说起
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
这里的判断是 判断的DR寄存器空,当DR寄存器空的时候,实际数DR寄存器数据并行移入8bit的移位寄存器,此时本条while判断就跳出来。往下执行代码了。
而实际的SPI物理层的传输还在进行,即移位寄存器的8个bit,一个接着一个在SPI总线上传输
当SPI速度为21Mhz时。传输一个bit的时间为48ns。一个字节就是384ns;
同理,基于SPI通信双向性,接收缓冲区判定非空的时候,判定的是从DR有数据或者接受满了
当接收到一个bit在DR中就结束判断了。