Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
出现问题时,STS 寄存器有错误标志吗?
有的
Frank 提示RX Fifo为空,TX Fifo 中的数据小于预设值,是因为已经完成了最后一次接收,数据已经收到了,所以寄存器是这样吗?接收Buff里有正确的数据,但是不进中断。
这个是正常的,看下DMA的状态呢?
Frank
Frank 我配置的通道0 和 通道1,应该关注哪个寄存器?
把 DMA 每个通道的CTS相关的寄存器截个图
发送有问题,还有3个字节的数据没搬完。 请提供下BOOT中使用的:core clock, Fast Bus clock, Slow Bus Clock, SPI的外设时钟频率
麻烦看下,SPI时钟给的40M。
感觉跟信号质量有一定关系,用示波器抓波形看下
Frank 不是时序或者配置哪里有问题吗?因为APP是可以的,所以没用示波器抓,用逻辑分析仪抓了波形,在接收的时候,发送buff里面填的是0x00,但是看波形出现了1个字节的0xFF。
APP能正常使用,然后Boot跟APP使用相同的配置的话,说明你的配置没有问题。最大可能是Boot的一些应用在某些状态下影响到了SPI信号,导致信号失真。你可以试着逐渐降低下通信速率,找出出现该问题时通信速率的临界点。然后再结合你的应用来分析最可能影响SPI通信的因素是那个,再逐一排查。
Frank 我测试在接收后加 while (Spi_GetSequenceResult( SpiConf_SpiSequence_Spi2SlaveSequence_1) != SPI_SEQ_OK); 可以正常接收,不卡就会出现失败。我仿真查看了不卡的后续运行,在while循环里,有些状态的检查和判断,没有其它的操作。有什么可能有影响吗?
加while等待Sequence完成,会block MCU不去执行其他的任务。你看下应用在执行过程中有修改port或gpio的操作吗。另外着重检查SPI master和slave之间通信线路上的电路状态是否有其他任务去改变或影响到。
Frank 检查了下,没有port的操作,只有if else ,switch 这些状态的判断。我是在GPIO中断里使用 Spi_AsyncTransmit 函数,这个会有影响吗?
有影响,不要在中断服务函数里面直接调用
xianghan IWDG没有初始化,在while循环中连续调用 Wdg_180_Inst0_Service 函数会影响SPI 接收吗?初始化IWDG就可以,还是不能这么操作?
喂狗不影响SPI通信,一般使用GPT定时周期喂狗,或者在任务调度里面Wdg_180_Inst0_Service手动喂狗。通常不在while死循环喂。
xianghan 那在死循环里面喂狗为什么会影响SPI通讯,目前看来是影响了DMA 通道1的传输,DMA通道0的传输没有受影响。
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...