持续创作,加速成长!这是我参与「掘金日新计划 · 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日志输出。