Loading...
 

SW4STM32 and SW4Linux fully supports the STM32MP1 asymmetric multicore Cortex/A7+M4 MPUs

   With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world. And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
You can get more information from the ac6-tools website and download (registration required) various documents highlighting:

System Workbench for STM32


SPI Rx DMA with variable length data

I am using an STM32G474. I am setup as an SPI slave and have the DMA setup with the SPI to receive data. The SPI master will be sending a variable length of data. I would like the DMA to finish and call the callback function when the CS pin goes high. However, the callback function is only called when I receive the amount of data I asked for or a timeout occurs. I don’t know how much data will be coming, so I can’t rely on that, and a finding an appropriate timeout value doesn’t seem possible. (Data is coming every 5ms. If I set the timeout to short, I will cut off data in middle of the packet, and if I make the timeout too long, I will start to get the next packet before the timeout ends.)
Is there a way to setup the SPI Rx to generate a callback when the CS pin goes high?

thanks in advance,
Brent

Well, I believe I found a way to implement this...
I changed changed by CS pin to act as an external interrupt that triggers on the rising edge. I call my SPI DMA setup function as usual. Then when I receive the callback for this interrupt (ie CS has gone high), I call HAL_DMA_Stop(). The buffer I provided the DMA when setting it up now has my data in it.
I’m surprised no one else has had to deal with this before and that I couldn’t find any forums talking about it. I’ve tested it out with various sized buffers and everything appears to be working how I want. If anyone reading this, knows of a “gotcha” that I haven’t found yet, please let me know.