目录

  • 1 课程简介
    • 1.1 课程简介
    • 1.2 课程标准
    • 1.3 职业证书对接
    • 1.4 课程分工
  • 2 数据采集
    • 2.1 数据采集之数字量传感数据采集
    • 2.2 数据采集之模拟量传感数据采集
    • 2.3 数据采集之模拟量转换为数字量
    • 2.4 数据采集之开关量传感数据采集
  • 3 STM32微控制器基本外设应用开发
    • 3.1 STM32基础知识
    • 3.2 任务1 开发环境搭建和工程建立
    • 3.3 任务2 LED流水灯应用开发
    • 3.4 任务3 按键控制LED灯亮灭
    • 3.5 任务4 串行通信控制LED流水灯应用开发
    • 3.6 任务5 电池电量检测应用开发
  • 4 RS-485总线通信应用
    • 4.1 RS-485基本知识
    • 4.2 RS-485通信协议及网关通信协议
    • 4.3 Modbus通信协议
    • 4.4 任务1 案例分析及工程代码编写
    • 4.5 任务2 系统搭建及云平台项目创建
  • 5 CAN总线通信应用
    • 5.1 CAN总线基本知识
    • 5.2 CAN通信帧
    • 5.3 CAN控制器和收发器
    • 5.4 任务1 案例分析及工程代码编写
    • 5.5 任务2 系统搭建及云平台项目创建
    • 5.6 任务3 CAN通信数据抓包与解析
  • 6 BasicRF的无线通信应用
    • 6.1 BasicRF基础知识
    • 6.2 任务1创建工程项目
    • 6.3 任务2 温湿度节点数据采集
    • 6.4 任务3 火焰节点数据采集
    • 6.5 任务4 传感器节点组网
    • 6.6 任务5 传感数据汇聚
  • 7 WiFi数据通信
    • 7.1 WI-FI基础知识
    • 7.2 使用AT指令配置WI-FI工作模式
    • 7.3 WI-FI接入云平台
  • 8 NB-IoT联网通信
    • 8.1 NB-IoT技术简介
    • 8.2 利尔达NB-IoT模组介绍
    • 8.3 任务1 “智慧路灯”AT指令代码编写
    • 8.4 任务2.烧写智能路灯
    • 8.5 任务3NB-IoT接入云平台
  • 9 LoRa 通信技术
    • 9.1 基础知识
    • 9.2 项目分析与LoRa驱动移植
    • 9.3 任务2 LoRa温湿度传感器节点应用程序开发
    • 9.4 任务3 LoRa光照传感器节点数据采集
    • 9.5 任务4 LoRa网关节点汇聚传感器数据
    • 9.6 讨论
BasicRF基础知识
  • 1 知识介绍
  • 2 PPT
  • 3 学习视频
  • 4 章节测试
  • 5 拓展内容
  • 6 国之重器

一、BasicRF概述

(一) BasicRF的定义

BasicRF是简单无线点对点传输协议,功能较为简单,通过BasicRF能够进行数据的发送和接收,可用于无线设备数据传输的入门学习。TI公司提供了基于CC253x芯片的BasicRF软件包,其中包括硬件层(Hardware layer)、硬件抽象层(Hardware Abstraction layer)、基本无线传输层(Basic RF layer)和应用层(Application)。

(二) BasicRF基本架构

图 5-1所示为BasicRF的基本架构图,最下层的硬件层是使用BasicRF所需要的硬件平台,倒数第二层的硬件抽象层为无线和板载资源,比如:LCD,UART等,为其提供访问接口。倒数第三层是占图比例最小的基本无线传输层,这一层提供了一个使用双向射频链路进行传输和接收的简单协议。最后就是面积最大的应用层,该层包含几个应用实例,可以访问BasicRF和单片机的HAL库。

图片5-1


5-1BasicRF基本架构图


(三) BasicRF的功能限制

BasicRF包括了IEEE 802.15.4标准数据包的发送和接收,采用了与IEEE 802.15.4 MAC兼容的数据包结构和ACK结构。在具体的使用中的功能限制包括:

(1)不具备“多跳”、“设备扫描”功能。

(2)不提供多种网络设备,如常用的协调器和路由器等。

(3)传输时等待信道空闲,但不按IEEE 802.15.4 CSMA-CA要求两次CCA检测。

(4)不重复传输数据。因此,BasicRF是简单无线点对点传输协议,可用来进行Z-Stack协议栈无线数据传输的入门学习。

(四) BasicRF软件包文件夹层次图

图 5-2所示,整个结构图呈树状排列,第一个是docs文件夹,该文件夹只有一个文档:CC2530_Software_Example.pdf。它就是CC2530BasicRF例程的说明书。第二个是ide文件夹,这个文件夹里面有三个子文件夹和一个IAR可执行文件,具体如图所示。其中setting文件夹里面是IAR的相关设置,比如IAR的注释是什么颜色的等等;然后srf05_cc2530文件夹里面有CC2530没有加PA(CC2591)时的3个工程,分别是:light_switch.eww、per_test.eww、spectrum_analyzer.eww;其次srf05_cc2530_91文件夹里面有CC2530加PA(CC2591)时的2个工程的hex文件,分别是:light_switch.hex、per_test.hex;最后一个就是cc2530_sw_example.eww,它是这3个工程(light_switch.eww、per_test.eww、spectrum_analyzer.eww)的总工程,也就是将它们包装在一起了。第三个是Source文件夹,它用来放置工程的源文件,其中有2个子文件夹,分别为:app和components,其中:app文件夹里是上面所说的3个工程的main函数所在的地方;components文件夹是BasicRF的一些底层驱动文件,包括:BasicRF协议、hal层驱动文件、加密文件、系统驱动文件等。

图片5-2


5-2BasicRF软件包文件夹层次图


二、BasicRF无线通信初始化

Basic RF软件包中实际上与无线数据传输相关的并不多,真正与Basic RF相关的包括四个部分:无线参数配置、无线模块初始化,无线数据发送和无线数据接收。其他部分用于管理CC2530硬件的内容。

(一) BasicRF无线通信初始化步骤

(1) 首先,调用halBoardInit()函数,初始化板载外设、射频接口、系统时钟、中断等,确保外围器件没有问题。调用halRfInit()函数,打开射频模块,设置默认配置选项,允许自动确认和随机数产生。

(2)其次,创建BasicRF数据结构体(basicRfCfg_t),并初始化其成员;其中BasicRF数据结构体就是位于basic_rf.h的basicRfCfg_t结构体。

(3)最后,BasicRF协议初始化,通过调用halRfinit()实现。

(二)BasicRF关键函数分析

1. 常用的API函数

表 5-1所示,是常用的API函数:

(1)basicRFInit()函数,顾名思义是初始化BasicRF无线通信函数;

(2)basciRfSendPacket()函数用于将目标数据发送给接收方,从而实现通信,其主要作用就发送数据;

(3)basciRfPacketlsReady()函数则是能够让接收方检测当前是否收到新数据;

(4)basicRfGetRssi()函数用于去获取当前的信号强度(RSSI);

(5)basicRfReceive()函数用于接受数据;

(6)basicRfRecieveOn()函数和basicRfRecieveOff()函数是控制无线通信的开关。

5-1常用的API函数

序号

函数名

函数功能

1

basicRFInit()

初始化BasicRF无线通信程序

2

basciRfSendPacket()

发送数据

3

basciRfPacketlsReady()

是否收到了新数据

4

basicRfGetRssi()

获取RSSI值

5

basicRfReceive()

接受数据

6

basicRfRecieveOn()

开启接受功能

7

basicRfRecieveOff()

禁用接受功能


2. 无线通信相关的所有参数

所有的参数都存在于basicRfCfg_t这个数据类型的结构体中,具体内容如图 5-3所示,此结构体的位置在basic_rf.h文件中。其中包括了本机地址、网络ID、通信信道、应答信号和加密设置。如图 5-3所示为basicRfCfg_t结构体代码。

图5-3


5-3basicRfCfg_t结构体


basciRfCtg_t结构体的组成。myAddr是本机地址,也是该模块的标识,其主要作用就是能够在不同的模块间快速区分,是独一无二的;panId是网络ID,当网络ID一致时,可以组成局域网;channel是通信信道,要建立通信该参数必须一致,当panId、channel这两个参数一致时,可形成局域组网;ackRequest是应答信号。

basciRfCtg_t结构体的使用方式如图 5-4所示。basicRfConfig为结构体变量,所以basicRfConfig.panId = PAN_ID是为网络ID赋值,basicRfConfig.channel = RF_CHANNEL则是为通道信号赋值,basicRfConfig.ackRequest = TRUE是为应答信号赋值。然后调用halBoardInit()函数,对硬件外设和I/O端口进行初始化,halBoardInit(void)函数在hal_board.c文件中。

图片5-4


5-4basicRfCfg_t型结构体变量basicRfConfig填充部分参数


3. 无线模块初始化

在hal_rf.c文件中,有一个halRfInit()函数,具体内容如图 5-5所示,该函数初始化射频无线模块,设置默认配置选项,允许自动确认和允许随机数产生。在开发中,直接调用该函数来初始化无线模块,不需要关注该函数的实现细节。

图片5-5


5-5halRfInit()函数


4. 无线数据发送

无线数据发送函数basicRfSendPacket()位于basic_rf.c文件中,具体内容如图 5-6所示,先创建一个字节数组作为数据发送的缓冲区,将要发送的内容置于数组之中,然后调用无线数据发送函数进行发送。basicRfSendPacket()函数中,第一个参数destAddr为发送目标地址;第二个参数pPayload为发送内容的数组,其作用就是存放发送数据,第三个参数length为发送数据长度。函数执行成功返回:SUCCESS,否则为FAILED。

图片5-6


5-6basicRfSendPacket()函数定义


5. 无线数据接收

在无线数据的接收中需要用到2个API函数,分别是basicRfPacketIsReady()和basicRfReceive()。

    首先调用basicRfPacketIsReady()函数来查询是否收到新的数据包,如果有新的数据包,则返回TRUE。新的数据包信息会存放在basicRfRxInfo_t类型结构体的rxi中。实际上,我们不需要过多关注该结构体。因为当查询到新的数据包后,可以调用basicRfReceive()函数把接收到的数据复制到自定义的缓冲区中,然后进行使用。basicRfReceive()函数定义如图 5-7所示。

图片5-7


5-7basicRfReceive()函数定义


然后了解接收函数basicRfReceive(),第一个参数pRxData为数据接收缓冲区,作用是存放即将到来的数据,第二个参数len为要接收的数据长度,第三个参数pRssi是无线信号强度。当函数成功执行,其返回值为接收到的数据字节数。再就是一些不常使用到的函数:basicRfReceiveOn(void)是开启接收功能;basicRfReceiveOff(void)则关闭接收功能;basicRfPacketIsReady(void)是否有数据需要接受。