程序使用SPI和别的芯片通讯,开始没使用DMA时,数据正常,数据一个一个发送,每次都是先检查寄存器,ran后发送一个数据。
后来改用DMA方式结果就异常了。现象是连续发送数据时编码乱掉了,不清楚什么原因。测试如下图:测试内容是使用DMA方式连续发送4个0xaa,在发送第一个字节最后一个bit时时钟和数据信号冲突了。
程序使用SPI和别的芯片通讯,开始没使用DMA时,数据正常,数据一个一个发送,每次都是先检查寄存器,ran后发送一个数据。
后来改用DMA方式结果就异常了。现象是连续发送数据时编码乱掉了,不清楚什么原因。测试如下图:测试内容是使用DMA方式连续发送4个0xaa,在发送第一个字节最后一个bit时时钟和数据信号冲突了。
您好,建议你可以按照下方法试一下,DMA传输程序配置时,可以加上一段代码,在使能DMA传输之后,可以使用查询方式等待DMA传输完成,然后关闭DMA,清除对应标志,在开启新的传输时再开启DMA。此外在DMA初始化配置时,建议可以先清除一下对应的标志位。若方便,可将你的代码发至我的邮箱(lzs@wch.cn),这边可以具体看一下并基于你的代码修改测试一下,后续的问题也可以通过邮箱和我沟通。
我的测试代码内就是在死循环内调用上面那个测试函数,然后延时10ms再次循环。? ?
在正式代码内是检测发送完成标志的,但发送数据不正常,具体现象是连续收发51个字节,但其中前3个后最后一个很容易误码。
晚上我将我的代码整理下发你邮箱
我疑惑的是时钟信号和数据信号的冲突,感觉是中间SPI的配置变化了一样