#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
того, который равен at3.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.