nRF52840DK开发板的使用初体验
本帖最后由 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的无线通讯处理,不搞清楚,很可能后续的开发就进行不下去了。
原因找到了,原来是打开的工程不对。\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的,使用工程的时候,一定要找到匹配的,否则会出现我之前犯的错误。 这板子看起来很高大上啊,实际可以测一下蓝牙的信号如何,实际低功耗的电流是多少。 作为单片机使用的例子都是没问题,作为BLE使用的发现一个都跑不起来,不知道为何,蓝牙助手监测不到这个板子。 本帖最后由 GlenX 于 2024-1-11 15:36 编辑
个人感觉nRF528XX程序是多任务的,要找到任务系统、定义和调度好几处才能修改好例程,不是直接可以使用的。有一次我在主程序做了个延时电灯的程序,实际的执行比我定义的快很多,
证明是有任务调度程序的,不是你在主程序想执行什么就能执行什么.
页:
[1]