Skip to main content
Associate II
July 27, 2024
Question

STM32H723 SPI6 with BDMA doesn't work under Arduino Framework

Here's the definition of some functions that is used to allocate variable in D3 SRAM.

 

typedef struct {
 uint16_t PackType;
 uint8_t Data[8];
 uint8_t reserved[2];
}PinBasePack;

#define sMemory(mem,type) ((type *)(sMem(&mem,sizeof(type))))

typedef struct {
 size_t heapPointer;
}MemoryController;

void* sMem(MemoryController* mc, size_t size) {
 if (size > 4) {
 size_t alignment = 4; // 4Byte Align
 mc->heapPointer = (mc->heapPointer + (alignment - 1)) & ~(alignment - 1);
 }
 void* ptr = (void*)(mc->heapPointer);
 mc->heapPointer += size;
 memset(ptr,0,size);
 return ptr;
}

MemoryController RD3 = {
	.heapPointer = 0x38000000+0x1000,
};

PinBasePack *DMASyncTX = 0;
PinBasePack *DMASyncRX = 0;

 

Here's the code under setup/main.

 

DMASyncTX = sMemory(RD3,PinBasePack);
DMASyncRX = sMemory(RD3,PinBasePack);
HAL_SPI_TransmitReceive_DMA(&hspi6, (uint8_t *)DMASyncTX, (uint8_t*)DMASyncRX, sizeof(PinBasePack));

 

 DMASyncRX can be overwritten by BDMA using CubeIDE, but nothing happened using Arduino.

I checked all configurations of SPI6 and BDMA are the same (even watching the values of SPI6 and BDMA).

The counter of hdma_spi6_rx is changing in both CubeIDE and Arduino.

Any clue for this difficult miscellaneous problem?:thinking_face:

This topic has been closed for replies.

1 reply

STOne-32
ST Technical Moderator
July 28, 2024

Hi @thisdp ,

You need to check how linker is setup and compare the addresses of buffers if same inside SRAM areas.

Hope it helps ,

STOne-32