首先烧录一段五通道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”,然后通过手机端发送“你好”,发现二者可以实现信息互通: