nRF52实践:Keil工程

195 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

本文为nRF52实践:Keil工程。主要介绍从官方 SDK 目录抽离文件形成自己的工程库。

原由

为了不依赖整个SDK目录(主要是因为SDK示例工程目录太深),将必要的目录单独拷贝出来,形成自己的工程库,同时也为了了解工程搭建的机制。

创建工程的方式有两种:

  • 直接在Keil中从头创建工程,指定芯片,再添加文件。此方式略显麻烦。
  • 使用现成的官方例子修改,新加文件或删除文件。

工程目录设计思路:保留SDK中必要的目录,新建 app 目录,专门存放自定义文件(即除SDK代码外的代码)。其下再创建子目录,如外设目录driver,头文件目录inc。再创建目录存放工程相关的代码和配置。比如app1为从机工程,app2为主机工程。如此设计,是为了共用SDK、共用部分自定义代码(如外设)。

由于依赖文件太多,因此使用方式二。

使用的例子为BLE从机示例,目录:nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_blinky\pca10040\s132\arm5_no_packs

主机端例程也是类似的操作方法。

步骤

步骤一:新建 ble_project 目录。

步骤二:从SDK目录拷贝SDK源码目录到ble_project下:components、 external、 integration、 modules。这些目录中有部分内容是不必要的,根据需要取舍,也可以全部保留。

步骤三:在ble_project下新建app目录,根据实际情况,可再创建driver、inc、app1目录。此处创建app_blinky_p目录,将上面例子目录arm5_no_packs的ble_app_blinky_pca10040_s132.uvprojx和ble_app_blinky_pca10040_s132.uvoptx放到该目录下,并分别改名。

步骤四:用编辑器打开uvprojx文件 ,将..\..\..\..\..\..\替换为..\..\。因为工程创建工程是直接沿用已有工程,只是路径变化而已,所以不需要修改太多。如文件..\..\..\..\..\..\modules\nrfx\mdk\nrf52.svd替换为 ..\..\modules\nrfx\mdk\nrf52.svd

最终形成的目录结构示例如下:

.
|-- README.md
|-- app
|   |-- app_blinky_c c表示主机工程
|   |-- app_blinky_p p表示从机工程
|   |-- app_my_c
|   |-- app_my_p
|   |-- driver       驱动文件
|   |-- gatt         自实现的gatt服务
|   |-- inc          头文件
|   `-- readme.txt
|-- components
|   |-- 802_15_4
|   |-- ant
|   |-- ble
|   |-- boards
|   |-- drivers_ext
|   |-- drivers_nrf
|   |-- libraries
|   |-- nfc
|   |-- sdk_validation.h
|   |-- serialization
|   `-- softdevice
|-- external
|   |-- cJSON
|   |-- cifra_AES128-EAX
|   |-- fatfs
|   |-- fnmatch
|   |-- fprintf
|   |-- freertos
|   |-- infineon
|   |-- licenses_external.txt
|   |-- lwip
|   |-- mbedtls
|   |-- micro-ecc
|   |-- nano
|   |-- nano-pb
|   |-- nfc_adafruit_library
|   |-- nrf_cc310
|   |-- nrf_cc310_bl
|   |-- nrf_oberon
|   |-- nrf_tls
|   |-- protothreads
|   |-- segger_rtt
|   |-- thedotfactory_fonts
|   |-- tile
|   `-- utf_converter
|-- integration
|   `-- nrfx
|-- modules
|   `-- nrfx
`-- note.txt

app目录:

.
|-- app_blinky_c
|   |-- app_blinky_c.uvoptx
|   |-- app_blinky_c.uvprojx
|   |-- main.c
|   `-- sdk_config.h
|-- app_blinky_p
|   |-- app_blinky_p.uvoptx
|   |-- app_blinky_p.uvprojx
|   |-- main.c
|   `-- sdk_config.h
|-- app_my_c
|   |-- app_my_c.uvoptx
|   |-- app_my_c.uvprojx
|   |-- main.c
|   `-- sdk_config.h
|-- app_my_p
|   |-- app_my_p.uvoptx
|   |-- app_my_p.uvprojx
|   |-- main.c
|   `-- sdk_config.h
|-- driver
|   |-- device.c
|   `-- utils.c
|-- gatt
|   |-- ble_dts.c
|   |-- ble_dts.h
|   `-- ble_dts_common.h
|-- inc
|   |-- device.h
|   |-- my_types.h
|   `-- utils.h
`-- readme.txt

目录相对较规整。

开发方式

笔者的开发方式:

  • 使用 nrf Studio 下载程序,但当前只用来下载协议栈,该协议栈一般只需下载一次即可。
  • 使用 keil 编译(快捷键F7)、下载(快捷键F8)
  • 使用 VS Code 编辑代码,查看 SDK 源码。
  • 使用串口或RTT查看日志。
  • 因为只有一个下载器(下载板子有点小贵),故开发主机、从机时需换线下载,但两者均打开串口和RTT日志输出。