打印
[M4]

nRF52840DK开发板的使用初体验

[复制链接]
17389|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 suncat0504 于 2022-12-31 12:04 编辑

#申请原创# @21小跑堂

有幸得到一块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备用。
2、编译内核的支持
   需要下载ARM.CMSIS.5.6.0.pack。  
有了这两个包,可以正常编译从Nordic官网下载的例程。下载的最新的nRF5_SDK_17.1.0_ddde560.zip,解压后得到如下结构的文件:

为了测试点灯,将开发板用MicroUSB数据线接入电脑。我用的是Win10,可能是系统在之前安装过驱动,开发板接入后(注意在开发板左下角有个开关,连接USB数据线,必须拨动这个开关,让开发板加电),系统设备中出现两个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的无线通讯处理,不搞清楚,很可能后续的开发就进行不下去了。


使用特权

评论回复
沙发
suncat0504|  楼主 | 2022-12-31 12:23 | 只看该作者
原因找到了,原来是打开的工程不对。\nRF5_SDK_17.1.0_ddde560\examples\peripheral\blinky\pca10040\blank\arm5_no_packs下的blinky_pca10040.uvprojx工程是针对nRF52832的,而开发板是nRF52840的。nRF52840的工程应该是nRF5_SDK_17.1.0_ddde560\examples\peripheral\blinky\pca10056\blank\arm5_no_packs下的blinky_pca10056.uvprojx工程,打开这个工程,编译、下载后,四个LED会以逐个点亮、逐个灭掉的方式周期运行。官网提供的nRF5_SDK_17.1.0_ddde560压缩包,是针对多个类型MCU的,使用工程的时候,一定要找到匹配的,否则会出现我之前犯的错误。

使用特权

评论回复
板凳
cooldog123pp| | 2022-12-31 17:37 | 只看该作者
这板子看起来很高大上啊,实际可以测一下蓝牙的信号如何,实际低功耗的电流是多少。

使用特权

评论回复
评论
suncat0504 2023-1-1 12:02 回复TA
正摸索中,得花些时间了 
地板
gaoyang9992006| | 2023-1-1 14:38 | 只看该作者
作为单片机使用的例子都是没问题,作为BLE使用的发现一个都跑不起来,不知道为何,蓝牙助手监测不到这个板子。

使用特权

评论回复
5
GlenX| | 2024-1-11 15:34 | 只看该作者
本帖最后由 GlenX 于 2024-1-11 15:36 编辑

个人感觉nRF528XX程序是多任务的,要找到任务系统、定义和调度好几处才能修改好例程,不是直接可以使用的。有一次我在主程序做了个延时电灯的程序,实际的执行比我定义的快很多,
证明是有任务调度程序的,不是你在主程序想执行什么就能执行什么.

使用特权

评论回复
评论
suncat0504 2024-1-11 18:14 回复TA
的确。有系统处理,方便做好多事儿。越来越像计算机干活了。不过就是在单片机上搞系统,会遇到好多问题。 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:大连伊飞特信息技术有限公司软件工程师
简介:本人于1993年毕业于大连理工大学。毕业后从事单片机开发工作5年,之后转入软件开发工作至今。

130

主题

3873

帖子

5

粉丝