【蓝牙初尝试2】Keil5+nRF52832 烧录程序

本文介绍了如何在nRF52xx系列处理器上使用SAADC进行多通道采集,并通过EasyDMA提高采样速率。随后详细讲述了蓝牙串口透传程序的烧录过程,包括SoftDevice的下载和应用程序的安装,以及手机端通过NordicUART进行通信的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        首先烧录一段五通道SAADC采集程序。SA (successive-approximation) ADC意为逐次逼近模数转换,所有nRF52xx系列处理器中内部ADC成为SAADC。我使用的是EasyDMA单缓冲多通道采样案例,将其通道数改为了五个。

        官方SDK中,EasyDMA会提供软件缓冲存放ADC的结果,缓冲寄存器满了之后会触发中断,然后在中断内读取缓冲寄存器的值,这种方式可以大大提高采样速率。当ADC采样任务触发ADC的转换结果可以通过EasyDMA存储到RAM内的结果缓冲内。

        采集过程:

        烧录前,先编译一下所有文件:

        没有问题后,连接Jlink仿真器,打开nRFgo Studio,nRFgo Studio可以实现协议栈hex文件应用程序hex文件以及Boot程序hex文件的下载。

        选择:【nRFx Programming - Erase all】擦除闪存中的程序,若显示【Erase completed】则说明擦除成功。每次烧录其他程序之前,需要先擦除全片。

        当只需要运行外设部分程序时,例如这里的SAADC,可以直接下载应用hex文件,点击【Program Application-Browse】选择需要下载的应用程序hex文件,路径如下所示:        

        打开串口助手(随便哪个都可以,这里用的是Vofa+),选择正确的端口号和波特率:

        但很奇怪的是,原本与Keil中Jlink参数相对应的端口号COM4却不能正确传输数据,经过各种原因的排查,反复插拔Jlink仿真器后识别出了正确的串口COM8,不知道问题出在了哪里...

                打开串口,可以看到传输进来的ADC数据:

        然后是蓝牙串口透传程序的烧录。蓝牙串口需要单独写一个API应用文件,开通串口蓝牙服务,其功能是实现主机从机之间的数据交换。串口连接PC端,通过串口调制助手发送数据给主机,然后从机上传主机(TX,通知属性);主机写数据给从机,从机通过串口调制助手显示接收到的数据(RX,写属性),实现双向数据通道的搭建。

        蓝牙串口工程的主要结构包括:

一、建立串口工程(主函数建立 外设初始化 服务初始化)

二、建立串口服务(函数声明和结构体设计 开通主应用服务 添加接收和发送特性 应用层实现)

三、数据通道搭建(蓝牙事件派发函数 处理串口写事件 处理串口接收事件 数据包长度控制)

        烧写代码前,仍先用nRFgo Studio擦除之前写入的程序,如果下载的是BLE程序,例如这里的蓝牙串口透传程序,则需要先下载SoftDevice协议栈,然后下载应用程序。协议栈hex文件的位置如下所示,注意选择对应的协议栈版本:

        然后下载应用程序,这里提供两种方法。第一种和刚才烧写SAADC程序一样,切换到【Program Application】,按照刚才的方法选择对应的应用程序hex文件进行下载即可。另一种方法可以在Keil中下载程序到闪存,注意事先编译一下文件,确定没有报错后再下载:

        然后打开手机,下载nRF Connect,点击【Scanner】,选择自己定义的串口名,这里选择【Nordic_UART】进行连接,在【CLIENT】栏中选择【Nordic UART Service】,在RX特性中可以写入信息,TX特性中可以接受PC端发送的信息。

        为了测试效果,在PC端打开串口助手,向手机端发送“hello”,然后通过手机端发送“你好”,发现二者可以实现信息互通:

<think>好的,我需要帮用户解决在Keil 5中设置和配置NRF51822项目的教程问题。首先,用户提供的引用资料里提到了多个步骤,比如安装SDK、nRFgo Studio、Jlink驱动等。我需要把这些信息整合成一个清晰的步骤指南。 第一步,安装工具和软件。根据引用[1]和[2],用户需要安装Keil MDK 5.25及以上版本,还有nRF51 SDK和nRFgo Studio。Jlink驱动也是必须的,因为下载器要用到。引用[4]提到安装SDK时会自动安装Jlink驱动,这点需要注意。 第二步,环境配置。Keil安装完成后,需要添加Nordic的芯片支持包。引用[4]提到安装SDK后,在Keil的安装路径下会有Nordic的相关文件,这可能涉及到设备支持包的安装。用户可能需要手动安装Device Family Pack,比如NordicSemiconductor.nRF_DeviceFamilyPack.8.22.1.pack,这一步在引用中没有明确说明,但根据经验,Keil通常需要安装对应的DFP包。 第三步,创建或导入工程。引用[1]和[4]提到在SDK中有样例工程,路径类似nrf51822\Board\pca10001,用户需要打开这些工程。可能需要在Keil中导入现有的项目,或者新建项目并配置正确的设备选项。 第四步,配置工程设置。包括选择目标芯片型号(nRF51822_xxAA)、设置调试工具为J-Link/J-Trace,配置Flash下载算法。引用[3]中的GPIO使用示例可能需要包含正确的头文件路径,所以在工程设置里添加Include路径,比如SDK中的头文件目录。 第五步,编译和下载程序。确保工程配置正确后,编译并连接开发板下载程序。使用nRFgo Studio擦除和编程芯片,或者直接通过Keil下载。引用[3]和[4]都提到了使用nRFgo Studio,但用户可能更倾向于直接在Keil中操作。 第六步,验证环境。比如编写一个简单的LED闪烁程序,测试整个环境是否正常工作。引用[3]中的GPIO例子可以作为参考,确保代码正确下载到开发板。 在整理这些步骤时,需要注意引用来源,比如安装步骤来自引用[1][4],配置工程设置参考了[3][4]。同时,用户可能遇到的常见问题,比如驱动安装失败、工程路径错误、头文件未找到等,需要给出提示。例如,确保Jlink驱动正确安装,检查SDK路径是否正确添加到Keil中。 此外,用户可能需要知道如何获取SDK和样例工程,引用[4]提到解压安装sdk_6.1.0,可能需要指导用户到Nordic官网下载最新版本。同时,nRF Connect APP(引用[2])可能用于蓝牙调试,但当前问题主要关注Keil环境搭建,可以稍作提及。 最后,生成的相关问题需要围绕环境搭建的后续步骤,比如如何添加外设驱动、如何调试蓝牙应用等,这些可以帮助用户进一步学习。</think>### Keil 5 安装和配置 NRF51822 开发环境教程 #### 一、环境准备 1. **安装工具和软件** - **Keil MDK V5.25+**:需安装ARM编译器支持包(如未自动安装,手动下载并集成)[^1][^4]。 - **nRF51 SDK**:从Nordic官网下载并解压(例如`sdk_6.1.0`),安装时会自动集成Jlink驱动[^4]。 - **nRFgo Studio**:用于芯片擦除和固件烧录[^1]。 - **Jlink驱动**:确保下载器与开发板连接正常[^2][^3]。 2. **安装Nordic设备支持包** 打开Keil 5,通过`Pack Installer`搜索并安装`nRF_DeviceFamilyPack`(例如版本8.22.1),确保芯片型号`nRF51822_xxAA`被识别。 --- #### 二、工程配置 1. **导入样例工程** - 样例工程路径:`nrf51822\Board\pca10001\s110\ble_app_template`(具体路径根据SDK版本调整)。 - 在Keil中通过`Project -> Open Project`加载`.uvprojx`文件[^1]。 2. **配置目标选项** - **Device**:选择`nRF51822_xxAA`。 - **Debug**:设置调试工具为`J-Link/J-Trace`,接口选择`SWD`。 - **Flash Download**:勾选`Erase Full Chip`,添加`nRF51xxx_xxAA`下载算法[^4]。 3. **头文件路径设置** - 在`Options -> C/C++ -> Include Paths`中添加SDK中的头文件目录,例如: ```plaintext \nRF51_SDK_6.1.0\components\toolchain\gcc \nRF51_SDK_6.1.0\components\drivers_nrf\hal ``` 确保编译时能正确引用外设驱动。 --- #### 三、编译与下载 1. **编译工程** 点击`Build`按钮,确保无报错。若出现`Undefined symbol`错误,检查头文件路径和SDK版本兼容性[^4]。 2. **烧录程序** - 使用Keil内置下载功能:点击`Load`按钮,通过Jlink自动烧录。 - 或通过`nRFgo Studio`:选择`Program Application`加载生成的`.hex`文件。 --- #### 四、验证环境 1. **示例代码测试** 参考GPIO控制示例(如点亮LED),编写简单程序验证功能: ```c #include "nrf_gpio.h" int main(void) { nrf_gpio_cfg_output(18); // 假设LED连接P0.18 while(1) { nrf_gpio_pin_toggle(18); for(int i=0; i<1000000; i++); } } ``` 2. **调试功能** 在Keil中设置断点,通过`Start/Stop Debug Session`进行单步调试,观察寄存器状态。 --- #### 常见问题解决 - **Jlink无法识别设备**:检查供电和SWD接口连接,更新Jlink驱动[^2][^4]。 - **头文件缺失**:确认SDK路径无空格或中文字符,重新添加包含路径。 - **编译时报内存错误**:调整`Target -> RAM/ROM`地址配置,匹配nRF51822的16KB RAM和256KB Flash规格[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值