[sdiy] STM32G4 SAI problems

rburnett at richieburnett.co.uk rburnett at richieburnett.co.uk
Sun Jul 16 13:42:44 CEST 2023

Thanks for all your tips and suggestions with this guys.  I really 
appreciate it.  Particularly the STM32 gotchas which will be handy 
generally as I'm new to STM32.

I've gone through the output generated by the graphical config tool 
CubeMX and it doesn't seem to contain anywhere near enough code.  For 
example when I enable one of the peripherals like I2S the pins light up 
around the package drawing and take on the labels I2S2_MCK, I2S2_SD, 
I2S2_CK & I2S2_WS and appear in a little table in the "GPIO settings" of 
the "Configuration" window but there doesn't seem to be any 
corresponding code generated to actually perform this pin configuration. 
  All I can see in the automatically generated code is config for a pin 
with a LED attached (which works!) and a pushbutton which I haven't 
tested.  Likewise all of the clocks look valid and enabled in the RCC 
clock tree diagram and appear to be being fed to the I2S peripheral, but 
I can't actually find anything in the generated code to make this 
happen!  This would seem like a decent explanation for why the relevant 
pins just appear floating (tri-stated) when probed with the scope.

Am I right in thinking that CubeMX should be automatically generating 
code to configure pins correctly when I enable a peripheral like I2S?  
They're names change and they light up in the pin diagram and appear in 
a table, but am I meant to be writing the code to switch the pins from 
tri-state to the correct "Alternative Function" myself?  Likewise with 
the clock enabling.  I can't actually find the line of code that enables 
the bus clock to the I2S.

I'm relatively new to this idea of using a graphical config tool to 
configure peripherals although by no means new to embedded firmware 
development.  As others have said its a nice idea when it works, but 
when it doesn't you're left trawling through loads of automatically 
generated spaghetti code referencing multiple sprawling include files 
(>.<)  At this point I can't help but feel like abandoning the graphical 
config tool and just grabbing a highlighter and printing out the 
relevant 55 pages or so of the device manual and thrash my way through 
writing the peripheral configuration manually.  (The actual I2S protocol 
part and the ping-pong DMA buffering, etc. that comes next is familiar 
to me from projects on other platforms, so I'm confident of what I'm 
trying to achieve.  I should be able to answer the questions of what 
bits to set/clear to talk to my chosen CODEC chip.)  It just doesn't 
seem like the graphical config tool is even asking anywhere near enough 
questions or generating enough code.

For example, the timings that Vlad quoted would be perfect for me.  I 
just can't make it do that (>.<)

Perhaps I'm putting too much faith in the IDE tool.  Is there a fair 
chance that the graphical config tool (CubeMX) is just broken?  I have 
read some pretty scathing stuff about CubeMX and HAL in other forums, 
but had hoped things had improved over the years.


More information about the Synth-diy mailing list