DWM1001 Segger Embedded Studio IDE, Keil MDK Project -TWR Example - GITHUB

Hi Guys

Here are some simple C example projects for any DWM1001 based hardware. Also contain compiling project files for Keil uvision and Segger Embedded Studio IDE.



Thanks Denis for the example! We tried to run it however getting an error when flashing the DWM1001 (attached a pic) any help much appreciated!

Hi tearus,

I ran into the same problem but managed to resolve it by erasing the DWM1001 using J-Flash Lite (https://www.segger.com/products/debug-probes/j-link/technology/flash-download/) and afterwards flashing it using uVision.

This might be due to uVision being unable to erase the nrf52 SoftDevice but this is just a guess.

Hope this helps,

Thanks for the question.

There appears to be a continuing problem with the nRF softdevice programmed into the flash of the DWM1001-Dev board.

As far as I currently understand it, you need to erase all of the flash using a tool such as Segger J-Flash lite. This can be downloaded for free. Select NRF52832_XXAA and then ‘OK’. Select Erase Chip.

Then go back to flashing the nRF again.

Let me know your progress.



You are welcome :wink:

Thanks for the prompt reply! Your workaround works, we were able to flash it now!

The DWM1001 (non DEV) does not have a usb port. Is it possible to update the nRF52832 using DFU? Can someone give me some pointers? Thanks!

You will have to connect up the SWD pins on the module to a suitable ARM 10 Pin header and use ULINK, JLINK or similar to program.

Thanks, I will use a nRF52 DK to flash the DWM1001 using the SWD pins.


I am trying to set up interrupts for dwt events but the DW1000’s IRQ pin doesn’t show any changes.
Do I have to do any additional setup apart from

 nrf_gpio_cfg_input(DW1000_IRQ, NRF_GPIO_PIN_NOPULL);

for interrupts to trigger correctly?

I am calling

dwt_setinterrupt(DWT_INT_RFCG | DWT_INT_TFRS, 1); dwt_setcallbacs(&sentFrame_ISR, &receiveFrame_ISR, NULL, NULL);
to set up DW1000 to trigger interrupts.

Thank you,

Thanks for this example code.
When I used the DWM1000 before with Arduino, it was quite easy to print stuff out through serial and read it with Python.
How could I send ranging data out to my pc with this J-Link where I could capture it in Python and process it?

Hi users,

FYI, the DWM1001’s examples are now available on github :

There is support for both Keil uvision and Segger Embedded Studio IDE

Feedback is welcome.



Are there examples/instructions on how to setup a MDEK1001 kit to read (whether through an anchor, tag, or gateway) the range measurements through the USB port? This is a simple use case for RTLS, no? Though the Android app is a great testing & evaluation tool, I don’t see much production use for that part of the product.


Hey, Do you have any documentation on this process? I’m trying to do exactly the same thing.


Hi guys,

The git repo has been updated with a new example adding DW1000 interrupt.

Also, if using SES, please keep with v3.34a because we’re seeing issues with v3.40.

Thank you,

Thank you very much.

Could you also please add a BLE example to this repo?

Hi Avimash,

Please refer to Nordic Semiconductor for a BLE example as the BLE is a Nordic IP.


Thank you,

Hi guys,

I am trying to bring up my DW1001 units using the examples in dwm1001-examples , namely the ss_twr_init and ss_twr_resp, by building them on two different DW1001 (one initiator, one responder) using Segger Embedded Studio with J-lik. Basically, I want to make the initiator communicate with the responder and display the result (pairing and ranging results for example).

I am able to build both ss_twr_init and ss_twr_resp on each DW1001 but I am not able to display the messages or results or output.

I am on macOS.

How can I display the output/ranging results of this example?


Stick the initiatior into your mac usb, Then serial
Monitor at 1152000 baud