How to use dw1000 api functions?

Good morning,

My question is a basic and probably simple one, but since it’s a first time I am using this kindof system I am a bit lost.

I want to use the dwm1000 connected to a STM32 microcontroller via SPI to get some rangings. Therefore I would like to use the dw1000 API functions. I redthe documentation and the examples code, but I am not sure it fits in every situation.

Let’s say I wanna use dwt_writetxdata(…) for example. Should I right it in the STM32 code ? If so how do I configure the spi bus (just to locate the chip for example) ?

Thank you in advance.

Hi Jacky,

You are right, all Decawave API is used in customer choosen MCU, DW1000 will only accessed by SPI, regarding how to config the SPI, please refer our demo example:


Thank you for your answer jesen !

Actually I checked the files and examples and I got an answer to my initial question.

What about the API portability ? I want to use STM32f7 instead of stm32f10. Do I have to modify only the port.c/port.h files according to my system to be able to use it ?

Thanks !

Hi Jack,

except port.c/port.h , i think the stm32 driver libaray also need to be changed from stm32F1x to stm32f7x


Hey Jack,

I wanted to know if you were able to find a way to use the DW1000 API with other micro-controllers, I am trying the same thing and want to try using a STM32F4 and ESP8266 to control the DW1000. Could you explain how can i use the API from this on these micro-controllers

Thank you

The driver files are split into two directories, decaPlatform and decadriver. When porting to a completely different architecture you need to go through all of the files in the decaPlaftorm directory and modify these to contain the appropriate function calls for your hardware platform.

So after creating a new project for a new microcontroller, i need copy these two folders and make changes to the decaplatform directory. Do you know if porting works for and arduino or ESP8266 based microcontrollers to implement TWR and RTLS. Sorry if this seems trivial, i am fairly new this.

Thank you

I’m not too familiar with arduino, I avoid it for all but the most trivial projects, but from my understanding it doesn’t normally support interrupts. That will require a little bit of work to get around (probably poll the interrupt line and if high manually call the dwt_isr function). Beyond that the other issue is how painfully slow most of the arduino processors are. There is an app note on porting to 8 bit micros that would be good to read. The main issue is that things take longer and so the assumed maximum turn around times for messages need to be increased.
If going the arduino route there are already 3rd party libraries for using the DW1000, they may be simpler than porting the official drivers.

I’ve only ported it to other ARM based systems but SPI, IO pins, timers and interrupts are all standard things so I don’t see why you’d hit any particular problems porting to ESP8266.