2025-05-05 10:57 AM
NUCLEO-WB55RG communicating via SPI1 to an ADXL362 eval board
I set up the project (attched below) using CubeIDE, generated the code & placed my own callbacks for the SPI in main.
When I look at the value for the Z direction I should be getting a value that indicates roughly 1g but all I get is 0. The same for all the other axis, no change in any value no matter how I orient the sensor.
To check that the acceleromter was working I hooked it up to an Arduino using a 3rd party library especially for the ADXL362. That all worked as expected, so I know the accelerometer is working.
When I go through the code with the debugger it doesn't hang anywhere so I'm guessing my callbacks are working, its just I dont get any data back, all values remain at 0
Anyone see anything obvious that I'm doing wrong?
Solved! Go to Solution.
2025-05-08 3:31 AM - edited 2025-05-08 3:31 AM
Found it!!
I had configured PA4 as SPI1_NSS as soon as I reconfigured it as a GPIO output it all worked fine.
Thanks fellas for walking me through the debugging of this.
2025-05-05 11:21 AM
Check if Arduino Library is doing something to initialize/start the accelerometer. I remember the Bosch devices needing a quick magic sequence and scale selection.
Get a scope or logic analyzer on the pins and review working and non-working signals.
Link to github library for working driver you're using / attempting to port
2025-05-06 6:10 AM
The Arduino library I used Winkelict ADXL362 Arduino library
The only thing I've spotted is that they do is a soft reset first, which I've now added to ADXL362_Init()
SPI_WriteRegister(ADXL362_SOFT_RESET, 0x52);
HAL_Delay(500);
Which doesn't change the behaviour, I still get 0 readings.
I changed the power control register to disable auto-sleep and remain in measurement mode
SPI_WriteRegister(ADXL362_POWER_CTL, 0x02);
Still no readings. So I decided to check if I could even read the chip ID, I cant I just get a value of 0.
2025-05-06 6:19 AM
To prove basic SPI comms, can you successfully read the Device ID register ?
As @Tesla DeLorean said, use a scope and/or logic analyser to verify comms - compare & contrast with the Arduino.
Have you checked the AD Product Page:
2025-05-06 6:46 AM - edited 2025-05-06 6:47 AM
Not even getting the device ID.
Yes I have the device datasheet with the register map & the SPI settings.
As soon as I get a working scope I'll check the comms.
2025-05-06 10:26 AM
Sorry I should add, the example software doesn't include the hardware specific SPI drivers & I have zero experience with no_OS
2025-05-07 1:01 AM
@NicRoberts wrote:the example software doesn't include the hardware specific SPI drivers
Of course not: that's what makes it portable to use on any microcontroller!
The only part which is specific to the STM32 is the hardware-specific SPI part.
@NicRoberts wrote:I have zero experience with no_OS
It simply means that it's plain, portable code with no dependencies on any OS.
2025-05-07 3:33 AM - last edited on 2025-05-07 3:35 AM by Andrew Neil
@Andrew Neil wrote:Of course not: that's what makes it portable to use on any microcontroller!
The only part which is specific to the STM32 is the hardware-specific SPI part.
I'm aware of that, its the hardware-specific SPI driver that I'm having an issue with.
2025-05-07 3:36 AM
This is where the scope/analyser really comes in ...
Have you looked at ST's SPI examples?
2025-05-07 4:58 AM - edited 2025-05-07 5:16 AM
Yeah, I followed how to set up SPI using Cube & the HAL. I've also tried a tutorial implementing SPI from bare metal but none of them work.
I've even swapped the board out but still nothing. I'm not getting why the call-backs would pass their checks if no comms were happening, shouldn't they just hang until they get their appropriate IRQ?
Anyway just got my hands on scope, we'll see...