nrf51822 / YJ-14015 闪烁
nrf51822 / YJ-14015 Blinky
我正在尝试先在 nrf51822 china clone (YJ-14015), as part of building a redox wireless 上构建一个简单的 blinky
并调试为什么 BLE 通信不起作用。
我使用 nrf5_SDK_11
作为 SDK,因为键盘自定义固件基于它。
现在我用 main.c
尝试了一个非常简单的例子 blinky
#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 & (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 clone + the docker containers for openocd and the toolchain of the redox wireless 项目,它基本上使用 telnet 而不是 openocd。调整好路径后,刷机似乎成功了,如上所说,PIN 01
可以设置为1.55V
,所以我认为刷机本身没有问题。
如果其他人遇到同样的困难:
一段时间后,我想出了一个方法来修复 yj-14015
的 blinky
示例。关键是调整我从 nordic SDK according to the Makefile in the redox firmware.
中获取的 Makefile
相关行如下:
#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。
我正在尝试先在 nrf51822 china clone (YJ-14015), as part of building a redox wireless 上构建一个简单的 blinky
并调试为什么 BLE 通信不起作用。
我使用 nrf5_SDK_11
作为 SDK,因为键盘自定义固件基于它。
现在我用 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 & (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 clone + the docker containers for openocd and the toolchain of the redox wireless 项目,它基本上使用 telnet 而不是 openocd。调整好路径后,刷机似乎成功了,如上所说,PIN 01
可以设置为1.55V
,所以我认为刷机本身没有问题。
如果其他人遇到同样的困难:
一段时间后,我想出了一个方法来修复 yj-14015
的 blinky
示例。关键是调整我从 nordic SDK according to the Makefile in the redox firmware.
Makefile
相关行如下:
#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。