我将 HAL 与 stm32 (H735) 一起使用,并且使用 SPI5 和 SPI4。两者均设置为 DMA 传输。 SPI5 工作正常并将数据从外设返回到 RAM。输出的数据是静态的,所以一切都很好。 SPI 4 已更改数据但未更改。似乎它被复制到外围设备一次。我有一些设置数据的函数,首先使用的函数就是发送的数据。我在调试器中验证 SPI 已完成且没有错误。我尝试了很多方法来设置我的数据,包括使用 LinkerScript 将其放置在 D2 中。
目前我有这样的。
.spi_data :
{
. = ALIGN(4);
*(.dma_buffer)
} >RAM_D2
typedef struct tagDACoutput {
uint8_t Dac;
uint8_t Data[2];
} DACOUTPUT;
__attribute__((__section__(".spi_data"))) static DACOUTPUT ToTheDac;
//during transfer
ToTheDac.Dac = 0x34;
ToTheDac.Data[0]= (dac1 >> 8) & 0xff;
ToTheDac.Data[1]= dac1 & 0xff;
for ( int t = 0;t < 30; t ++) asm("NOP"); //I needed to add a small wait. Like to not do this.
HAL_SPI_Transmit_DMA(&hspi4,(uint8_t*)&ToTheDac, sizeof(ToTheDac));
我看到不需要数据刷新,但不确定是否需要执行某些操作来刷新数据。
使用D!对于内存位置已修复。