0. 简介
一些配置项:
CPHA:相序
CPLO:极性
看着demo需要按键,于是去掉按键,去掉打印,直接输出波形看逻辑分析仪的信号。
其实现在做这些demo测试应该都有逻辑分析仪,直接看波形更直观一点。
发现没有波形,而且时钟跟奇怪。看着只有几个信号
原来是采样速率设置太小了,只有500K,于是直接拉到最高50Mhz。
时钟OK,但是数据还是不对
仔细核对代码和配置项之后OK
1. 两个板子互相通信
其中经历了两三个小时的各种问题,包括但不限于线焊错了(PB3焊到旁边的PC14),动来动去PB2松了,MOSI和MISO接反了(我们的代码里面MOSI和MISO不需要互相换,因为使能了从机模式,做从机就是输入主机就是输出Master out slave in)。。。
主机代码修改如下
都是把其他代码屏蔽直接每隔100ms发送数据
cpp
ret = SPI_DRV_MasterTransferBlocking(SPI_INSTANCE, g_spiTxBuff1, g_spiRxBuff1, DATA_SIZE, SPI_TIMEOUT); /*! SPI通信 */
OSIF_TimeDelay(100);
从机代码修改如下
cpp
ret = SPI_DRV_SlaveTransferBlocking(SPI_INSTANCE, g_spiTxBuff1, g_spiRxBuff1, DATA_SIZE, SPI_TIMEOUT); /*! SPI通信 */
OSIF_TimeDelay(100);
主机从机的数组修改了下方便观察
至此SPI0已经跑起来了
2. 修改波特率
如下,测试,时钟源120M,波特率16M没问题,但是实际的时钟频率大概是10M。
波特率设置到到20以上,接收数据就乱了
3. 注意事项
超过2M需要设置为DMA模式:不用中断的原因是,需要频繁进入中断,CPU负载高的时候,SPI会出问题