nrf51822 / YJ-14015 мигает

#c #bluetooth-lowenergy #nrf51

#c #bluetooth-низкое энергопотребление #nrf51

Вопрос:

Я пытаюсь создать simply first blinky на китайском клоне nrf51822 (YJ-14015), как часть построения redox wireless и отладки, почему связь BLE не работает.

В качестве SDK я использую nrf5_SDK_11 , поскольку на нем основана пользовательская прошивка клавиатур.

Теперь я попробовал очень минимальный пример blinky с main.c

 #include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "nrf_gpio.h"

#define LED_PIN_1 1           // LED connected to pin 1       

/* --> from nrf5_SDK_11/components/drivers_nrf/hal/nrf_gpio.h
__STATIC_INLINE void nrf_gpio_pin_set(uint32_t pin_number)
{
    NRF_GPIO->OUTSET = (1UL << pin_number);
}

__STATIC_INLINE void nrf_gpio_pin_clear(uint32_t pin_number)
{
    NRF_GPIO->OUTCLR = (1UL << pin_number);
}
*/

int main(void)
{

    // Make LED pin an output pin
    nrf_gpio_cfg_output(LED_PIN_1);
    nrf_gpio_pin_set(LED_PIN_1);

    // Toggle LEDs.
    while (true)
    {
        // Down
        NRF_GPIO->OUTCLR = (NRF_GPIO->OUT amp; (1UL << LED_PIN_1));
        // nrf_gpio_pin_clear(LED_PIN_1);
        nrf_delay_ms(1000);

        // Up
        NRF_GPIO->OUTSET= (NRF_GPIO->OUT | (1UL << LED_PIN_1));
        // nrf_gpio_pin_set(LED_PIN_1);
        nrf_delay_ms(1000);
    }
}
 

Я ожидал бы, что я могу видеть, как напряжение каждую секунду меняется с высокого на низкий на высокий PIN 01 и т. Д… К сожалению, я получаю 1.55 V заземление только в том случае, если подключаю его к своему мультиметру, но напряжение остается постоянным и ничего не меняется. Что-нибудь я сделал не так с этим циклом?

Для перепрошивки я использую клон ST-LinkV2 контейнеры docker для openocd и набор инструментов проекта redox wireless, который в основном использует telnet поверх openocd. После настройки правильных путей мигание кажется успешным и, как упоминалось выше, PIN 01 может быть установлено на 1.55V , поэтому я предполагаю, что с самим миганием проблем нет.

Комментарии:

1. Тот факт, что ваш мультиметр измеряет примерно половину ожидаемого напряжения (я полагаю, 3,3 В), говорит о том, что выходной сигнал, вероятно, переключается между 0 и 1. Просто быстрее, чем вы ожидали, возможно, что-то не так с nrf_delay_ms функцией. Я не знаю о NRF SDK, но, возможно, есть какая-то функция инициализации, которую необходимо вызвать для настройки часов и т. Д. Перед использованием функции задержки.

2. Спасибо за ваше предложение. Я попытался проверить это, просто установив PIN 01 внешнюю часть цикла while, а затем не изменяя его. К сожалению, это все еще просто повышает его до 1.5V . Как бы то ни было, все остальные контакты находятся на уровне ок 300mV , кроме SWCLK того, который равен at 3.3V . Также я попытался поднять другие контакты с тем же эффектом. Поднятые находятся у 1.5V всех остальных 300mV .

Ответ №1:

На случай, если кто-то еще столкнется с теми же трудностями:

Через некоторое время я нашел способ исправить blinky пример для yj-14015 . Ключевым моментом было настроить Makefile то, что я взял из nordic SDK, в соответствии с файлом Makefile в прошивке redox.

Соответствующие строки следующие:

 #flags common to all targets
CFLAGS  = -DNRF51
CFLAGS  = -DGAZELL_PRESENT
CFLAGS  = -DBOARD_CUSTOM
CFLAGS  = -DBSP_DEFINES_ONLY
CFLAGS  = -mcpu=cortex-m0
CFLAGS  = -mthumb -mabi=aapcs --std=gnu99
CFLAGS  = -Wall -Werror -O3 -g3
CFLAGS  = -Wno-unused-function
CFLAGS  = -Wno-unused-variable
CFLAGS  = -mfloat-abi=soft
# keep every function in separate section. This will allow linker to dump unused functions
CFLAGS  = -ffunction-sections -fdata-sections -fno-strict-aliasing
CFLAGS  = -fno-builtin --short-enums


# Assembler flags
ASMFLAGS  = -x assembler-with-cpp
ASMFLAGS  = -DNRF51
ASMFLAGS  = -DGAZELL_PRESENT
ASMFLAGS  = -DBOARD_CUSTOM
ASMFLAGS  = -DBSP_DEFINES_ONLY
 

Здесь будет полный Makefile.