This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Someone, anyone PLEASE point me in the right direction

Im not entirely new to the embedded world, been programming since I was a kid and been working on embedded projects for 3 years now.. In fact the few first steps I can take with relative ease.. I can build projects, debug and program the device with the given examples. The problem is (my best guess anyway) that I come from a different world, Microchip.. and really want to get into the ARM wolrd and Nordic Semi really seems to fit all my RF and development needs. Powerful and affordable CPUs + Sweet RF transceivers make me drool over the posibilities..

I can see the potential, its obvious.. BUT I CANT EVEN GET A REGISTER CORRECTLY CONFIGURED.. I've been at it for 4 days now, in a row.. I can see layers upon layers of abstraction and middleware and nowhere to be found is an explanation in code "Pass 0 to this function to configure this pin as an output".. how am I gonna get into BLE and Bluetooth 5 if I cant even turn on a LED ffs >:( 

I know the learning curve and all that but guys.. hire a youtuber to make a tutorial series or something.. explain what to pass to the drivers and all the abstraction layers.. I have to pass a custom "nrf_gpio_config" <- what is that? I thought the purpose of a driver was to make the thing more understandable, but no where in the documentation you guys explain what type of argument your functions are expecting..

Compare that to:

PORTA.PORTA1 = 0 //Output

LATA.LAT1 = 1 //Now its on

Pardon my rant.. I really want to understand how the ARM world works, specially since i saw the 9160 I really like what you guys at Nordic are doing.

Parents
  • Dear Daniel,
    Firstly, I'm sorry for the other heartless responses you have received along the lines of RTFM.
    The documentation is terrible for beginners to learn from because they have just run doxygen on a code base that wasn't meaningfully commented to begin with. This has resulted in "documentation" that is just a list of function names with no context or English-language description of what the functions are for, or how to use them. The example code also contains no comments or description, so a beginner needs to be psychic to be able to learn how they work.

    To begin with, include the relevant headers

    #include <stdio.h>
    #include <stdlib.h>
    #include "nrfx_config.h"
    #include "nrf_gpio.h"
    #include "nrfx_gpiote.h"


    Define your pin names with macros like these:
    #define UART_RTS_PIN NRF_GPIO_PIN_MAP(0,5)  // P0.05 = SIO_05
    #define UART_TX_PIN  NRF_GPIO_PIN_MAP(0,6)  // P0.06 = SIO_06
    #define UART_CTS_PIN NRF_GPIO_PIN_MAP(0,7)  // P0.07 = SIO_07
    #define UART_RX_PIN  NRF_GPIO_PIN_MAP(0,8)  // P0.08 = SIO_08
    #define KG_PIN       NRF_GPIO_PIN_MAP(1,2)  // P1.02 = SIO_34
    

    Then, define their directions and pull up/down, as follows:

      // Digital Outputs
      nrf_gpio_cfg_output(UART_TX_PIN);
      nrf_gpio_cfg_output(UART_RTS_PIN);
      nrf_gpio_cfg_output(KG_PIN);
      
      // Digital Inputs
      nrf_gpio_cfg_input(UART_RX_PIN, NRF_GPIO_PIN_PULLUP);
      nrf_gpio_cfg_input(UART_CTS_PIN, NRF_GPIO_PIN_PULLUP);  

    Finally, you can set or clear the value on IO pins as follows:

    // Clear a pin
        nrf_gpio_pin_clear(KG_PIN); // P1.02 = SIO_34
    
    // Set a pin
        nrf_gpio_pin_set(KG_PIN); // P1.02 = SIO_34
    


Reply
  • Dear Daniel,
    Firstly, I'm sorry for the other heartless responses you have received along the lines of RTFM.
    The documentation is terrible for beginners to learn from because they have just run doxygen on a code base that wasn't meaningfully commented to begin with. This has resulted in "documentation" that is just a list of function names with no context or English-language description of what the functions are for, or how to use them. The example code also contains no comments or description, so a beginner needs to be psychic to be able to learn how they work.

    To begin with, include the relevant headers

    #include <stdio.h>
    #include <stdlib.h>
    #include "nrfx_config.h"
    #include "nrf_gpio.h"
    #include "nrfx_gpiote.h"


    Define your pin names with macros like these:
    #define UART_RTS_PIN NRF_GPIO_PIN_MAP(0,5)  // P0.05 = SIO_05
    #define UART_TX_PIN  NRF_GPIO_PIN_MAP(0,6)  // P0.06 = SIO_06
    #define UART_CTS_PIN NRF_GPIO_PIN_MAP(0,7)  // P0.07 = SIO_07
    #define UART_RX_PIN  NRF_GPIO_PIN_MAP(0,8)  // P0.08 = SIO_08
    #define KG_PIN       NRF_GPIO_PIN_MAP(1,2)  // P1.02 = SIO_34
    

    Then, define their directions and pull up/down, as follows:

      // Digital Outputs
      nrf_gpio_cfg_output(UART_TX_PIN);
      nrf_gpio_cfg_output(UART_RTS_PIN);
      nrf_gpio_cfg_output(KG_PIN);
      
      // Digital Inputs
      nrf_gpio_cfg_input(UART_RX_PIN, NRF_GPIO_PIN_PULLUP);
      nrf_gpio_cfg_input(UART_CTS_PIN, NRF_GPIO_PIN_PULLUP);  

    Finally, you can set or clear the value on IO pins as follows:

    // Clear a pin
        nrf_gpio_pin_clear(KG_PIN); // P1.02 = SIO_34
    
    // Set a pin
        nrf_gpio_pin_set(KG_PIN); // P1.02 = SIO_34
    


Children
  • I do not mind the responses from Andy, reading the manual is what a developer should always do, I was just frustrated because, as you point out, they are not well documented in the code.

    Your comment here was more insightful than the 4 days of reading examples and documentations, thank you very much.

    Howeverm I would like to know what I can read to know what header files must be included for the different functions, is there a table of contents or something along the lines?

  • Dear Daniel,
    There is no good list of what header files you need for what functions. That would be far too easy.
    The process seems to be to first find what you think might be the function you need in the "documentation" and then use the windows File Explorer search function to scan all the .h files in your SDK installation to find out which one contains the function declaration.
    Typically you will start the search in the directory: C:\Nordic_Semi\nRF5_SDK_15.3.0_59ac345\modules\nrfx\drivers\include
    Nordic are busy transitioning from using functions starting in "nrf" to functions ending in "nrfx". Try and use the new ones exclusively, as if you mix and match then it breaks all the configuration and all hell breaks loose.
    I'm sorry to say that most the example code was written using the old functions and hasn't been updated, so be careful when copying code segments.
    This linked guide should help explain how the migration works, so you can translate any example code you need.
    To get a project that works, start from the most modern example project you can find that works and modify that.
    The projects are normally configured by a huge sdk_config.h file, with a tool called CMSIS Wizard, documented here.
    The other main "gotcha" if/when you get linker errors is to make sure that whatever module and driver features you enable in the sdk_config.h file, you have also added the corresponding module files to your project, added the header file include directive to your main.c, and added the paths to the header files of all the dependencies to the User Include Directories section of the Preprocessor section of the (common) Project options.
    I hope that helps you get started, I have found it to be an unnecessarily obfuscated process.

    If you want to cut-and-paste, here's my list of "User Include Directories"

    $(ProjectDir)
    $(SdkDir)/components
    $(SdkDir)/config
    $(SdkDir)/external
    $(SdkDir)/modules
    $(SdkDir)/components/802_15_4
    $(SdkDir)/components/ant
    $(SdkDir)/components/ble
    $(SdkDir)/components/boards
    $(SdkDir)/components/iot
    $(SdkDir)/components/libraries
    $(SdkDir)/components/nfc
    $(SdkDir)/components/proprietary_rf
    $(SdkDir)/components/serialization
    $(SdkDir)/components/softdevice
    $(SdkDir)/components/softdevice/common
    $(SdkDir)/components/toolchain
    $(SdkDir)/components/802_15_4/api
    $(SdkDir)/components/802_15_4/raw
    $(SdkDir)/components/802_15_4/secure
    $(SdkDir)/components/802_15_4/src
    $(SdkDir)/components/802_15_4/api/HAL
    $(SdkDir)/components/802_15_4/api/MAC
    $(SdkDir)/components/802_15_4/api/PHY
    $(SdkDir)/components/802_15_4/api/RAL
    $(SdkDir)/components/802_15_4/api/SecAL
    $(SdkDir)/components/802_15_4/api/SysAL
    $(SdkDir)/components/802_15_4/api/HAL/nrf52_soc
    $(SdkDir)/components/802_15_4/api/RAL/nrf52_soc
    $(SdkDir)/components/ant/ant_channel_config
    $(SdkDir)/components/ant/ant_encryption
    $(SdkDir)/components/ant/ant_fs
    $(SdkDir)/components/ant/ant_key_manager
    $(SdkDir)/components/ant/ant_profiles
    $(SdkDir)/components/ant/ant_search_config
    $(SdkDir)/components/ant/ant_state_indicator
    $(SdkDir)/components/ant/ant_key_manager/config
    $(SdkDir)/components/ant/ant_profiles/ant_bpwr
    $(SdkDir)/components/ant/ant_profiles/ant_bsc
    $(SdkDir)/components/ant/ant_profiles/ant_common
    $(SdkDir)/components/ant/ant_profiles/ant_hrm
    $(SdkDir)/components/ant/ant_profiles/ant_sdm
    $(SdkDir)/components/ant/ant_profiles/ant_bpwr/pages
    $(SdkDir)/components/ant/ant_profiles/ant_bpwr/simulator
    $(SdkDir)/components/ant/ant_profiles/ant_bpwr/utils
    $(SdkDir)/components/ant/ant_profiles/ant_bsc/pages
    $(SdkDir)/components/ant/ant_profiles/ant_bsc/simulator
    $(SdkDir)/components/ant/ant_profiles/ant_bsc/utils
    $(SdkDir)/components/ant/ant_profiles/ant_common/ant_request_controller
    $(SdkDir)/components/ant/ant_profiles/ant_common/pages
    $(SdkDir)/components/ant/ant_profiles/ant_hrm/pages
    $(SdkDir)/components/ant/ant_profiles/ant_hrm/simulator
    $(SdkDir)/components/ant/ant_profiles/ant_hrm/utils
    $(SdkDir)/components/ant/ant_profiles/ant_sdm/pages
    $(SdkDir)/components/ant/ant_profiles/ant_sdm/simulator
    $(SdkDir)/components/ant/ant_profiles/ant_sdm/utils
    $(SdkDir)/components/ble/ble_advertising
    $(SdkDir)/components/ble/ble_db_discovery
    $(SdkDir)/components/ble/ble_dtm
    $(SdkDir)/components/ble/ble_link_ctx_manager
    $(SdkDir)/components/ble/ble_racp
    $(SdkDir)/components/ble/ble_radio_notification
    $(SdkDir)/components/ble/ble_services
    $(SdkDir)/components/ble/nrf_ble_gatt
    $(SdkDir)/components/ble/nrf_ble_scan
    $(SdkDir)/components/ble/common
    $(SdkDir)/components/ble/nrf_ble_gatt
    $(SdkDir)/components/ble/nrf_ble_qwr
    $(SdkDir)/components/ble/nrf_ble_scan
    $(SdkDir)/components/ble/peer_manager
    $(SdkDir)/components/ble/ble_services/ble_ancs_c
    $(SdkDir)/components/ble/ble_services/ble_ans_c
    $(SdkDir)/components/ble/ble_services/ble_bas
    $(SdkDir)/components/ble/ble_services/ble_bas_c
    $(SdkDir)/components/ble/ble_services/ble_bps
    $(SdkDir)/components/ble/ble_services/ble_cscs
    $(SdkDir)/components/ble/ble_services/ble_cts_c
    $(SdkDir)/components/ble/ble_services/ble_dfu
    $(SdkDir)/components/ble/ble_services/ble_dis
    $(SdkDir)/components/ble/ble_services/ble_dis_c
    $(SdkDir)/components/ble/ble_services/ble_escs
    $(SdkDir)/components/ble/ble_services/ble_gls
    $(SdkDir)/components/ble/ble_services/ble_hids
    $(SdkDir)/components/ble/ble_services/ble_hrs
    $(SdkDir)/components/ble/ble_services/ble_hrs_c
    $(SdkDir)/components/ble/ble_services/ble_hts
    $(SdkDir)/components/ble/ble_services/ble_ias
    $(SdkDir)/components/ble/ble_services/ble_ias_c
    $(SdkDir)/components/ble/ble_services/ble_ipsp
    $(SdkDir)/components/ble/ble_services/ble_lbs
    $(SdkDir)/components/ble/ble_services/ble_lbs_c
    $(SdkDir)/components/ble/ble_services/ble_lls
    $(SdkDir)/components/ble/ble_services/ble_nus
    $(SdkDir)/components/ble/ble_services/ble_nus_c
    $(SdkDir)/components/ble/ble_services/ble_rscs
    $(SdkDir)/components/ble/ble_services/ble_rscs_c
    $(SdkDir)/components/ble/ble_services/ble_tps
    $(SdkDir)/components/ble/ble_services/eddystone
    $(SdkDir)/components/ble/ble_services/experimental_ble_lns
    $(SdkDir)/components/ble/ble_services/experimental_ble_ots
    $(SdkDir)/components/ble/ble_services/experimental_gatts_c
    $(SdkDir)/components/ble/ble_services/experimental_nrf_ble_cgms
    $(SdkDir)/components/ble/ble_services/experimental_nrf_ble_ots_c
    $(SdkDir)/components/ble/ble_services/nrf_ble_bms
    $(SdkDir)/components/drivers_ext/adns2080
    $(SdkDir)/components/drivers_ext/bh1745
    $(SdkDir)/components/drivers_ext/ccs811
    $(SdkDir)/components/drivers_ext/cherry8x16
    $(SdkDir)/components/drivers_ext/ds1624
    $(SdkDir)/components/drivers_ext/hts221
    $(SdkDir)/components/drivers_ext/ili9341
    $(SdkDir)/components/drivers_ext/lis2dh12
    $(SdkDir)/components/drivers_ext/lps22hb
    $(SdkDir)/components/drivers_ext/max9850
    $(SdkDir)/components/drivers_ext/mcp4725
    $(SdkDir)/components/drivers_ext/mpu6050
    $(SdkDir)/components/drivers_ext/nrf6350
    $(SdkDir)/components/drivers_ext/st7735
    $(SdkDir)/components/drivers_ext/sx1509b
    $(SdkDir)/components/drivers_ext/synaptics_touchpad
    $(SdkDir)/components/drivers_ext/uda1380
    $(SdkDir)/components/drivers_nrf/radio_config
    $(SdkDir)/components/drivers_nrf/sdio
    $(SdkDir)/components/drivers_nrf/spi_master
    $(SdkDir)/components/drivers_nrf/twi_master
    $(SdkDir)/components/drivers_nrf/usbd
    $(SdkDir)/components/drivers_nrf/sdio/config
    $(SdkDir)/components/drivers_nrf/twi_master/deprecated
    $(SdkDir)/components/drivers_nrf/twi_master/deprecated/config
    $(SdkDir)/components/libraries/atomic
    $(SdkDir)/components/libraries/atomic_fifo
    $(SdkDir)/components/libraries/atomic_flags
    $(SdkDir)/components/libraries/balloc
    $(SdkDir)/components/libraries/block_dev
    $(SdkDir)/components/libraries/bootloader
    $(SdkDir)/components/libraries/bsp
    $(SdkDir)/components/libraries/button
    $(SdkDir)/components/libraries/cli
    $(SdkDir)/components/libraries/crc16
    $(SdkDir)/components/libraries/crc32
    $(SdkDir)/components/libraries/crypto
    $(SdkDir)/components/libraries/csense
    $(SdkDir)/components/libraries/csense_drv
    $(SdkDir)/components/libraries/delay
    $(SdkDir)/components/libraries/ecc
    $(SdkDir)/components/libraries/experimental_libuarte
    $(SdkDir)/components/libraries/experimental_section_vars
    $(SdkDir)/components/libraries/experimental_task_manager
    $(SdkDir)/components/libraries/fds
    $(SdkDir)/components/libraries/fifo
    $(SdkDir)/components/libraries/fstorage
    $(SdkDir)/components/libraries/gfx
    $(SdkDir)/components/libraries/gpiote
    $(SdkDir)/components/libraries/hardfault
    $(SdkDir)/components/libraries/hci
    $(SdkDir)/components/libraries/led_softblink
    $(SdkDir)/components/libraries/log
    $(SdkDir)/components/libraries/low_power_pwm
    $(SdkDir)/components/libraries/memobj
    $(SdkDir)/components/libraries/mem_manager
    $(SdkDir)/components/libraries/mpu
    $(SdkDir)/components/libraries/mutex
    $(SdkDir)/components/libraries/pwm
    $(SdkDir)/components/libraries/pwr_mgmt
    $(SdkDir)/components/libraries/queue
    $(SdkDir)/components/libraries/ringbuf
    $(SdkDir)/components/libraries/scheduler
    $(SdkDir)/components/libraries/sdcard
    $(SdkDir)/components/libraries/sensorsim
    $(SdkDir)/components/libraries/serial
    $(SdkDir)/components/libraries/sha256
    $(SdkDir)/components/libraries/simple_timer
    $(SdkDir)/components/libraries/slip
    $(SdkDir)/components/libraries/sortlist
    $(SdkDir)/components/libraries/spi_mngr
    $(SdkDir)/components/libraries/stack_guard
    $(SdkDir)/components/libraries/stack_info
    $(SdkDir)/components/libraries/strerror
    $(SdkDir)/components/libraries/svc
    $(SdkDir)/components/libraries/timer
    $(SdkDir)/components/libraries/twi_mngr
    $(SdkDir)/components/libraries/twi_sensor
    $(SdkDir)/components/libraries/uart
    $(SdkDir)/components/libraries/usbd
    $(SdkDir)/components/libraries/util
    $(SdkDir)/components/libraries/block_dev/empty
    $(SdkDir)/components/libraries/block_dev/qspi
    $(SdkDir)/components/libraries/block_dev/ram
    $(SdkDir)/components/libraries/block_dev/sdc
    $(SdkDir)/components/libraries/bootloader/ble_dfu
    $(SdkDir)/components/libraries/bootloader/dfu
    $(SdkDir)/components/libraries/bootloader/serial_dfu
    $(SdkDir)/components/libraries/cli/ble_uart
    $(SdkDir)/components/libraries/cli/cdc_acm
    $(SdkDir)/components/libraries/cli/libuarte
    $(SdkDir)/components/libraries/cli/rtt
    $(SdkDir)/components/libraries/cli/uart
    $(SdkDir)/components/libraries/crypto/backend
    $(SdkDir)/components/libraries/crypto/backend/cc310
    $(SdkDir)/components/libraries/crypto/backend/cc310_bl
    $(SdkDir)/components/libraries/crypto/backend/cifra
    $(SdkDir)/components/libraries/crypto/backend/mbedtls
    $(SdkDir)/components/libraries/crypto/backend/micro_ecc
    $(SdkDir)/components/libraries/crypto/backend/nrf_hw
    $(SdkDir)/components/libraries/crypto/backend/nrf_sw
    $(SdkDir)/components/libraries/crypto/backend/oberon
    $(SdkDir)/components/libraries/hardfault/nrf52
    $(SdkDir)/components/libraries/hardfault/nrf52/handler
    $(SdkDir)/components/libraries/log/src
    $(SdkDir)/components/libraries/timer/experimental
    $(SdkDir)/components/libraries/usbd/class
    $(SdkDir)/components/libraries/usbd/class/audio
    $(SdkDir)/components/libraries/usbd/class/cdc
    $(SdkDir)/components/libraries/usbd/class/dummy
    $(SdkDir)/components/libraries/usbd/class/hid
    $(SdkDir)/components/libraries/usbd/class/msc
    $(SdkDir)/components/libraries/usbd/class/nrf_dfu_trigger
    $(SdkDir)/components/libraries/usbd/class/cdc/acm
    $(SdkDir)/components/libraries/usbd/class/hid/generic
    $(SdkDir)/components/libraries/usbd/class/hid/kbd
    $(SdkDir)/components/libraries/usbd/class/hid/mouse
    $(SdkDir)/components/nfc/ndef
    $(SdkDir)/components/nfc/t2t_lib
    $(SdkDir)/components/nfc/t2t_parser
    $(SdkDir)/components/nfc/t4t_lib
    $(SdkDir)/components/nfc/t4t_parser
    $(SdkDir)/components/nfc/ndef/connection_handover
    $(SdkDir)/components/nfc/ndef/conn_hand_parser
    $(SdkDir)/components/nfc/ndef/generic
    $(SdkDir)/components/nfc/ndef/launchapp
    $(SdkDir)/components/nfc/ndef/parser
    $(SdkDir)/components/nfc/ndef/text
    $(SdkDir)/components/nfc/ndef/uri
    $(SdkDir)/components/nfc/ndef/connection_handover/ac_rec
    $(SdkDir)/components/nfc/ndef/connection_handover/ble_oob_advdata
    $(SdkDir)/components/nfc/ndef/connection_handover/ble_pair_lib
    $(SdkDir)/components/nfc/ndef/connection_handover/ble_pair_msg
    $(SdkDir)/components/nfc/ndef/connection_handover/common
    $(SdkDir)/components/nfc/ndef/connection_handover/ep_oob_rec
    $(SdkDir)/components/nfc/ndef/connection_handover/hs_rec
    $(SdkDir)/components/nfc/ndef/connection_handover/le_oob_rec
    $(SdkDir)/components/nfc/ndef/conn_hand_parser/ac_rec_parser
    $(SdkDir)/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser
    $(SdkDir)/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser
    $(SdkDir)/components/nfc/ndef/generic/message
    $(SdkDir)/components/nfc/ndef/generic/record
    $(SdkDir)/components/nfc/ndef/parser/message
    $(SdkDir)/components/nfc/ndef/parser/record
    $(SdkDir)/components/nfc/t2t_lib/hal_t2t
    $(SdkDir)/components/nfc/t4t_lib/hal_t4t
    $(SdkDir)/components/nfc/t4t_parser/apdu
    $(SdkDir)/components/nfc/t4t_parser/cc_file
    $(SdkDir)/components/nfc/t4t_parser/hl_detection_procedure
    $(SdkDir)/components/nfc/t4t_parser/tlv
    $(SdkDir)/components/proprietary_rf/esb
    $(SdkDir)/components/proprietary_rf/gzll
    $(SdkDir)/components/proprietary_rf/gzll/arm
    $(SdkDir)/components/proprietary_rf/gzll/config
    $(SdkDir)/components/proprietary_rf/gzll/gcc
    $(SdkDir)/components/proprietary_rf/gzll/iar
    $(SdkDir)/components/serialization/application
    $(SdkDir)/components/serialization/common
    $(SdkDir)/components/serialization/connectivity
    $(SdkDir)/components/serialization/application/codecs
    $(SdkDir)/components/serialization/application/hal
    $(SdkDir)/components/serialization/application/transport
    $(SdkDir)/components/serialization/application/codecs/ant
    $(SdkDir)/components/serialization/application/codecs/ble
    $(SdkDir)/components/serialization/application/codecs/common
    $(SdkDir)/components/serialization/application/codecs/ant/middleware
    $(SdkDir)/components/serialization/application/codecs/ant/serializers
    $(SdkDir)/components/serialization/application/codecs/ble/middleware
    $(SdkDir)/components/serialization/application/codecs/ble/serializers
    $(SdkDir)/components/serialization/common/struct_ser
    $(SdkDir)/components/serialization/common/transport
    $(SdkDir)/components/serialization/common/struct_ser/ant
    $(SdkDir)/components/serialization/common/struct_ser/ble
    $(SdkDir)/components/serialization/common/transport/ser_phy
    $(SdkDir)/components/serialization/common/transport/ser_phy/config
    $(SdkDir)/components/serialization/connectivity/codecs
    $(SdkDir)/components/serialization/connectivity/hal
    $(SdkDir)/components/serialization/connectivity/codecs/ant
    $(SdkDir)/components/serialization/connectivity/codecs/ble
    $(SdkDir)/components/serialization/connectivity/codecs/common
    $(SdkDir)/components/serialization/connectivity/codecs/ant/middleware
    $(SdkDir)/components/serialization/connectivity/codecs/ant/serializers
    $(SdkDir)/components/serialization/connectivity/codecs/ble/middleware
    $(SdkDir)/components/serialization/connectivity/codecs/ble/serializers
    $(SdkDir)/components/softdevice/common
    $(SdkDir)/components/softdevice/mbr
    $(SdkDir)/components/softdevice/mbr/nrf52840
    $(SdkDir)/components/softdevice/mbr/nrf52840/headers
    $(SdkDir)/components/softdevice/mbr/nrf52840/hex
    $(SdkDir)/components/softdevice/s140
    $(SdkDir)/components/softdevice/s140/doc
    $(SdkDir)/components/softdevice/s140/headers
    $(SdkDir)/components/softdevice/s140/headers/nrf52
    $(SdkDir)/components/softdevice/s140/hex
    $(SdkDir)/components/toolchain/cmsis/include
    $(SdkDir)/external/fprintf
    $(SdkDir)/modules/nrfx
    $(SdkDir)/modules/nrfx/drivers
    $(SdkDir)/modules/nrfx/hal
    $(SdkDir)/modules/nrfx/mdk
    $(SdkDir)/modules/nrfx/soc
    $(SdkDir)/modules/nrfx/drivers/include
    $(SdkDir)/modules/nrfx/drivers/src
    $(SdkDir)/modules/nrfx/drivers/src/prs

    NB: The macro defining $(SdkDir) needs to be added under the Segger menu

    Tools->Options->Environment Options->Building->Global Macros

    Here you add:

    SdkDir=C:/Nordic_Semi/nRF5_SDK_15.3.0_59ac345
    CMSIS_CONFIG_TOOL=C:/Nordic_Semi/CMSIS_Configuration_Wizard.jar

    Kind Regards,
    Nicholas Lee

Related