
我打算使用stm32u575rg通过spi读取外置adc的数据,通过lptim2的ch2提供外置ad的触发信号,ch1提供触发信号给spi1,SPI->TSIZE=1, SPI-CFG1-DSIZE=31,RXDMAEN=1,SPI工作在只接收模式,TRIGSEL=7。GPDMA的C0CR->LAP=1, SDW_LOG2=2, SBL_1=3,DDW_LOG2=2 DBL_1=3,DINC=1, BNDT=64. 测试时候发现SPI只能读取2组数据,共8个字节,EOT=1. 需要开启EOT中断然后再中断函数中重新关闭再开启SPI才能继续读数据。如何设置才能让spi不需要中断重启持续读取数据 |
STM32N6570-DK开发板,哪里还有卖的?
在其他电脑上编译成功没有错误并且能够烧录,换了电脑之后编译出现一堆错误,并且不能烧录程序
SD卡初始化第一次初始化后再次初始化时会失败。
关于三轴陀螺仪 I3G4250D
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
STM32H7双核调试问题:CM7能成功调试但CM4始终报"Failed to read ROM table via AP 3"错误
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G070CBT6使用硬件SPI无法读出W25Q128的ID
STM32的TIM触发SPI的DMA发送使用NSS时MSSI的问题
如果是配置在Circular模式,正常情况下会循环接收。
如果Normal模式,如果接收到预先配置的数据个数后,DMA会停下来,需要重新启动。
我看你配置的BNDT为64,即使Normal模式的话,应该是接收到64字节数据后才会停下来,具体的
数据个数跟你的数据宽度配置有关。
我看你的配置,源端、目的端数据宽度设置为4字节,即1个字,BURST传输长度为4,即每次DMA被触发后传输4个数据?
即每次就传输4个字,即16个字节? 你是这个设计思路吗?
感谢回复
DMA目前配置的是normal,后面打算改成circular。每个触发信号spi通讯是4个字节(2个16bit数据) 现在碰到的问题是每次触发spi收到数据需要重启一下spi,如果不重启spi的话只能接受2次数据(共2*4=8bytes)。清除eot标志位没用,只能重启SPI
我的想做的是lptim2每次触发spi接受216bit的数据,然后循环填充1024004Bytes的内存
现在LPTIM的相关事件触发外部ADC的转换,STM32这边
的SPI是做MASTER吗?它将ADC结果接收进来是通过
什么同步的,即STM32的SPI模块如何知道有数据要接收了,
还是说它是做从SPI,外部ADC模块提供时钟并发送数据?
我是使用LPTIM2->CH2作为触发信号给外部ADC的,CH1提供给SPI做触发信号,两个触发信号调好了时间差可以正常触发采集,触发信号512kHz
主频设置128M
SPI使用SPI1&SPI2, 设置是MASTER RECEIVE ONLY,datasize32bit(16*2)MSB First,baudrate64M,trig:lptim2ch1 下降沿;CRC不启用;NSS:软件,FIFO Threshold默认1,SS Idleness, data Idleness都是0,IOSWAP关闭,RDY MASTER:内部,RDY POLARITY:HIGH
GPDMA使用CH0 CH1, CH0->REQUEST=SPI1_RX, CH1->REQUEST=SPI2_RX, 两个通道其他配置一样。源数据设置DATASIZE: WORD, BURST LENGTH=1 Allocated Port for Transfer=Port0. 目标数据设置dataWidth=word, burstLength=1 Allocated Port for Transfer=port1; dataHandling=disable, trig=disable; BNDT=32768
我尝试了一下burst length设置为1,不开启SPI中断的情况下还是只能采集2组数据一共8个字节
[md]嗯
了解你的应用思路,这样应该是可以的。LPTIM控制整个采样及数据提取的节奏。
LPTIM2-CH2事件作为SPI RX DMA的同步事件,每次触发过来后,SPI主动接收一块数据即完成。
下次触发时再来获取下一批数据。 你再检查下配置,是否哪里有点小问题。
[md]我不太清楚那里出的问题,现在就是卡在spi只能接收2组数据就不工作了。结果每次spi收完1组数据都需要重新启动一下,已经卡了几个礼拜了。
正常情况下这些寄存器的值应该是多少可以实现这个功能呀
[md]你这个问题我这边不太好模拟,你可以先简化下,就利用LPTIM触发 uart的DMA发送,看看这个基本流程有没有问题。
看到楼主使用TSIZE 去控制一次接收数据数量。
但是手册里表明,确实需要关闭和从新启动SPI 才能恢复状态机。
所以看来中断里的代码是必要的。
我注意到这一个了,如果tsize这个不控制的话在1次触发会一次性接收很多组数据。按照手册来说应该在完成1次接收之后就需要重启SPI。实际测试中发现是接收了2组数据之后才停止的。
[md]这个我也有用到,用LPTIM1触发LPDMA通过LPUART定时发送数据,这个功能是正常的