nRF52840DK开发板的使用初体验
有幸得到一块nRF52840DK开发板,
![]()
nRF52840是一款LE SoC,支持低功耗蓝牙、蓝牙网状网络、NFC、Thread和Zigbee的多协议蓝牙5.2SoC。nRF52840围绕32位ARM® Cortex™-M4 CPU构建,带有以64MHz运行的浮点单元。它具有用于简化配对和支付解决方案的 NFC-A 标签。ARM TrustZone® CryptoCell 加密单元包含在芯片上,并带来了广泛的加密选项,可以独立于 CPU 高效执行。它具有众多数字外设和接口,例如用于连接外部闪存和显示器的高速SPI和QSPI、用于数字麦克风和音频的PDM和I2S,以及用于数据传输和电池充电电源的全速USB设备。
按照习惯,入手开发板,肯定要先试验GPIO,测试点亮LED以及按键程序。为了能在Keil下进行开发,需要一些MCU设备软件包和编译用内核的支持。
1、nRF52840设备支持
我下载的是NordicSemiconductor.nRF_DeviceFamilyPack.8.44.1.pack这个设备包。除了这个包,我还下载了NordicSemiconductor.nRF_DeviceFamilyPack.8.40.3.pack备用。
-
编译内核的支持
需要下载ARM.CMSIS.5.6.0.pack。
有了这两个包,可以正常编译从Nordic官网下载的例程。下载的最新的nRF5_SDK_17.1.0_ddde560.zip,解压后得到如下结构的文件:
![]()
为了测试点灯,将开发板用MicroUSB数据线接入电脑。我用的是Win10,可能是系统在之前安装过驱动,开发板接入后,系统设备中出现两个Jlink CDC串口设备:
![]()
硬件连接没有问题,找到\nRF5_SDK_17.1.0_ddde560\examples\peripheral\blinky\pca10040\blank\arm5_no_packs下的blinky_pca10040.uvprojx工程,并打开(arm5_no_packs是专用于MDK的文件夹,其他示例工程也是这样的结构)。
打开工程后,设置JLink:
![]()
![]()
![]()
其实也都是默认的设置,不需要改动。
在此基础上,对工程编译、下载。结果很可惜,并没有出现LED0闪动的结果。
于是自己在main.c主程序中做了改动,追加如下代码:
#define LED_A NRF_GPIO_PIN_MAP(0,13)
#define LED_B NRF_GPIO_PIN_MAP(0,14)
void LED1_Init(void) {
nrf_gpio_cfg_output(LED_A);
nrf_gpio_cfg_output(LED_B);
}
void LED1_Open(void) {
nrf_gpio_pin_clear(LED_A);
nrf_gpio_pin_set(LED_B);
}
void LED1_Close(void) {
nrf_gpio_pin_set(LED_A);
nrf_gpio_pin_clear(LED_B);
}
void LED1_Toggle(void) {
nrf_gpio_pin_toggle(LED_A);
nrf_gpio_pin_toggle(LED_B);
}
在主循环中,修改代码如下:
int main(void) {
// /* Configure board. */
// bsp_board_init(BSP_INIT_LEDS);
// /* Toggle LEDs. */
// while (true)
// {
// for (int i = 0; i < LEDS_NUMBER; i++)
// {
// bsp_board_led_invert(i);
// nrf_delay_ms(500);
// }
// }
LED1_Init();
while(true) {
LED1_Open();
nrf_delay_ms(500);
LED1_Close();
nrf_delay_ms(500);
}
}
再次编译、下载,终于看到LED0、LED1有规律地闪烁了。至此,至少证明开发板是没有问题的,但例程看来是有问题的,需要花点时间弄明白问题所在。毕竟我后面要用到2.4GHz的无线通讯处理,不搞清楚,很可能后续的开发就进行不下去了。