目录

  • 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 讨论
任务2 温湿度节点数据采集
  • 1 知识介绍
  • 2 PPT
  • 3 学习视频
  • 4 讨论
  • 5 大国重器

案例介绍

通过对仓储环境监测系统进行分解,得到需要完成的四个子任务:

(1) 采用温湿度传感器模块和通信模块组成数字量采集节点A

(2) 火焰传感器模块和通信模块组成开关量采集节点B

(3) A、B两个节点实时采集传感器的数据

(4) 每隔2s将采集的传感器数据通过无线网络传给汇聚节点模块

本次课程主要实现第一个子任务采用温湿度传感器模块和通信模块组成数字量采集节点A。

案例分析

通过对案例的任务进行分析,得到需要实现的具体关键点如图 5-23所示:

图片5-81


5-23案例分析


采用温湿度传感器模块和 ZigBee 模块组成一个数字量传感器采集节点,实现温湿度传感器的采集,并将采集数据通过自定义协议无线传输至汇聚节点。发送节点有数据发送时,LED1 亮 100 毫秒。 

知识储备

在本章节当中,我们将使用到zigbee模块,该模块使用CC2530作为主控MCU。CC2530是面向2.4G通信的一种Soc,是一种专用的单片机,它采用的是8051内核,拥有8KB的SRAM、大容量内置闪存。CC2530芯片后缀代表内置闪存的大小,如:CC2530F32/F64/F128/F256分别表示32K/64K/128K/256K的闪存;CC2530 具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短,进一步确保了低能源消耗。

一、CC2530的I/O引脚

CC2530总共具有 21 个数字 I/O 引脚,这些引脚可以组成 3 个 8 位端口,分别为端口 0、 端口 1 和端口 2,通常表示为 P0、P1 和 P2。其中,P0 和 P1 是完全的 8 位端口,而 P2 仅有 5 位可以使用。

(一) CC2530的I/O引脚配置

21 个 I/O 引脚具有图 5-24展示的以下特性,可以通过编程进行配置。

图片3-25


5-24CC2530的I/O引脚配置


1. 可配置为通用 I/O 端口

通用 I/O 端口是指可以对外输出逻辑值 0(低电平)或 1(高电平),也可读取从 I/O 引脚输入的逻辑值(低电平为 0,高电平为 1)。可以通过编程来将 I/O 端口设置成输出方式或输入方式。

2. 可配置为外部设备 I/O端口

CC2530 内部除了含有 8051CPU 核心外,还具有其他功能模块,如 ADC、定时器和串行通信模块,也称这些功能模块为外设。可通过编程将 I/O 口与这些外设建立起连接关系,以便这些外设与 CC2530 芯片外界电路进行信息交换。需要注意的是,不能随意指定某个 I/O 口连接 到某个外设,它们之间有一定的对应关系,具体知识将在后续任务中学习。

二、CC2530输入口的3种输入模式

当 CC2530 的 I/O 口被配置成通用输入端口时,端口的输入模式有上拉、下拉和三态三种选择,可通过编程进行选择,能够适应多种不同的输入应用,如图 5-25所示。

图片3-26


5-25CC2530输入口的3种输入模式


三、I/O口的外部中断能力

当使用外部中断时,I/O 口引脚可以作为外部中断源的输入口,这使得电路设计变得更加灵活,如图 5-26所示。

图片3-27


5-26I/O口的外部中断能力


(一) CC2530的I/O引脚相关寄存器

1. I/O端口的相关寄存器介绍

在单片机内部有一些具有特殊功能的存储单元,这些存储单元用来存放控制单片机内部器件的命令、数据或是运行过程中的一些状态信息。这些寄存器统称“特殊功能寄存器 (SFR)”,操作单片机本质上就是对这些特殊功能寄存器进行读写操作,如图 5-27所示。

图片3-28


5-27I/O端口的相关寄存器


2. 通用数字I/O端口的寄存器及其配置方法

表 5-2表 5-3表 5-4表 5-5表 5-6表 5-7为常用的通用数字I/O端口的寄存器。P0、P1、P2是特殊功能寄存器的名字,P0_1 是 P0中一个位的名字。这里主要介绍这些 I/O 作为通用数字 I/O 端口的寄存器及其配置方法。P0SEL、P1SEL、P2SEL是端口功能选择寄存器,0 为GPIO,1为外设I/O。P0DIR、P1DIR、P2DIR为端口方向寄存器,0表示设置为输入,1表示设置为输出。

5-2通用数字I/O接口相关寄存器(1/6)

P0 (0x80) – Port 0

名称

复位

读/写

描述

7:0

P0[7:0]

0xFF

R/W

可用作GPIO或外设I/O,8位,可位寻址

P1 (0x90) – Port 1

名称

复位

读/写

描述

7:0

P1[7:0]

0xFF

R/W

可用作GPIO或外设I/O,8位,可位寻址

P2 (0xA0) – Port 2

名称

复位

读/写

描述

7:5

000

R0

高3位(P2_7—P2_5)没有使用

4:0

P2[4:0]

0x1F

R/W

可用作GPIO或外设I/O,低5位(P2_4—P2_0),可位寻址

P0SEL (0xF3) – P0端口功能选择(Port 0 Function Select)

5-3通用数字I/O接口相关寄存器(2/6)

名称

复位

读/写

描述

7:0

SELP0_[7:0]

0x00

R/W

P0.7—P0.0功能选择位:0 为GPIO,1为外设I/O

P1SEL (0xF4) –P1端口功能选择(Port 1-Function Select)

名称

复位

读/写

描述

7:0

SELP1_[7:0]

0x00

R/W

P1.7—P1.0功能选择位:0 为GPIO,1为外设I/O

P2SEL (0xF5) –P2端口功能选择和P1端口外设优先级控制

(Port 2 Function Select and Port 1 peripheral priority control)



5-4通用数字I/O接口相关寄存器(3/6)

名称

复位

读/写

描述

7

0

R0

没有使用

6

PRI3P1

0

R/W

P1端口外设优先级控制位。当PERCFG同时分配USART0和USART1用到同一引脚时,该位决定其优先级顺序。0为USART0优先;1为USART1优先

5

PRI2P1

0

R/W

P1端口外设优先级控制位。当PERCFG同时分配USART1和Timer3用到同一引脚时,该位决定其优先级顺序。0为USART1优先;1为Timer3优先

4

PRI1P1

0

R/W

P1端口外设优先级控制位。当PERCFG同时分配Timer1和Timer4用到同一引脚时,该位决定其优先级顺序。0为Timer1优先;1为Timer4优先

3

PRI0P1

0

R/W

P1端口外设优先级控制位。当PERCFG同时分配USART0和Timer1用到同一引脚时,该位决定其优先级顺序。0为USART0优先;1为Timer1优先



5-5通用数字I/O接口相关寄存器(4/6)

2

SELP2_4

0

R/W

P2.4功能选择位:0 为GPIO,1为外设I/O

1

SELP2_3

0

R/W

P2.3功能选择位:0 为GPIO,1为外设I/O

0

SELP2_0

0

R/W

P2.0功能选择位:0 为GPIO,1为外设I/O

P0DIR (0xFD) – P0端口方向(Port 0 Direction)

名称

复位

读/写

描述

7:0

DIRP0_[7:0]

0x00

R/W

P0.7—P0.0方向选择位:0 为输入,1为输出

P1DIR (0xFE) –P1端口方向(Port 1 Direction)

名称

复位

读/写

描述

7:0

DIRP1_[7:0]

0x00

R/W

P1.7—P1.0方向选择位:0 为输入,1为输出

P2DIR (0xFF) –P2端口方向和P0端口外设优先级控制

(Port 2 Direction and Port 0 peripheral priority control)



5-6通用数字I/O接口相关寄存器(5/6)

名称

复位

读/写

描述

7:6

PRIP0[1:0]

00

R/W

P0端口外设优先级控制位。当PERCFG同时分配几个外设用到同一引脚时,该两位决定其优先级顺序。00为USART0高于USART101为USART1高于Timer110为Timer1通道0、1高于USART111为Timer1通道2高于USART0

5

0

R0

没有使用

4:0

DIRP2_[4:0]

00000

R/W

P2.4—P2.0方向选择位:0 为输入,1为输出

P0INP (0x8F) – P0端口输入模式(Port 0 Input Mode)

名称

复位

读/写

描述

7:0

MDP0_[7:0]

0x00

R/W

P0.0—P0.7输入选择位:0 为上拉/下拉,1为三态

P1INP (0xF6) –P1端口输入模式(Port 1 Input Mode)



5-7通用数字I/O接口相关寄存器(6/6)

名称

复位

读/写

描述

7:2

MDP1_[7:2]

000000

R/W

P1.7—P1.2输入选择位:0 为上拉/下拉,1为三态

1:0

00

R0

没有使用

P2INP (0xF7) –P2端口输入模式(Port 2 Input Mode)

名称

复位

读/写

描述

7

PDUP2

0

R/W

对所有P2端口设置上拉/下拉输入:0 为上拉,1为下拉

6

PDUP1

0

R/W

对所有P1端口设置上拉/下拉输入:0 为上拉,1为下拉

5

PDUP0

0

R/W

对所有P0端口设置上拉/下拉输入:0 为上拉,1为下拉

4:0

MDP2_[4:0]

0

0000

P2.4—P2.0输入选择位:0 为上拉/下拉,1为三态



四、CC2530的定时器相关知识介绍

(一)定时/计数器概述

定时/计数器是一种能够对时钟信号或外部输入信号进行计数,其工作流程如图 5-28所示,当计数值达到设定要求时便CPU提出处理请求,从而实现定时或计数功能的外设。在单片机中,一般使用 Timer 表示定时计数器。无论使用定时/计数器的哪种功能,其最基本的工作原理是进行计数。

图片3-39


5-28定时/计数器功能概述


定时/计数器的核心是一个计数器,其功能如图 5-29所示,可以进行加 1(或减 1)计数,每出现一个计数信号,计数器就自动加 1(或 自动减 1),当计数值从最大值变成 0(或从 0 变成最大值)溢出时定时/计数器便向 CPU 提出中断请求。

图片3-30


5-29计数器功能


计数信号的来源可选择周期性的内部时钟信号(如定时功能)或非周期性的外界输 入信号(如计数功能)。如图 5-30所示,为一个典型单片机的内部 8 位减 1 计数器工作过程。

图片3-31


5-30典型单片机的8 位减 1 计数器工作过程


(二)CC2530定时/计数器简介

 CC2530 定时/计数器 CC2530 中共包含了 5 个定时/计数器,分别是定时器 1、定时器 2、定时器 3、定时器 4 和睡眠定时器,各自具ru有如下特点:

 T1 为 16 位定时/计数器,其功能如图 5-31所示,支持输入采样、输出比较(PWM)功能,具有 5 个独立的输入采样/输出比较通道,每一个通道对应一个 I/O 口。

图片3-31


5-31 T1 功能


 T3 和 T4 为 ru8 位定时/计数器,功能如图 5-32所示,支持输出比较和 PWM 功能,具有 2 个独立的输出比较 通道,每一个通道对应一个 I/O 口。

图片3-32


5-32T3 和 T4 功能


睡眠定时器是一个 24 位正计数定时器,功能如图 5-33所示,运行在 32KHz 的时钟频率下,支持捕获/比 较功能,能够产生中断请求和 DMA 触发。睡眠定时器主要用于设置系统进入和退出低功耗睡眠模式之间的周期,还用于低功耗睡眠模式时维持定时器 2 的定时。

图片3-33


5-33睡眠定时器功能


(三)CC2530定时器/计数器工作模式

CC2530 的定时器 1、定时器 3 和定时器 4 虽然使用的计数器计数位数不同,但它们都具备“自由运行”、“模”和“正计数/倒计数”三种不同的工作模式。

1. 自由运行模式(Free—Running Mode)

在该模式下,如图 5-34所示,计数器从 0x0000 开始计数,每个分频后的时钟边沿增加 1,当计数器达到 199 0xFFFF 时(溢出),计数器载入 0x0000,继续递增它的值,如图 5-8 所示。当达到最终计数 值 0xFFFF 时,IRCON.T1IF 和 T1STAT.OVFIF 两个标志位被置 1,此时如果设置了相应的中 断使能位 T1MIF.OVFIM 和 IEN1.T1IE,将产生中断请求。自由运行模式可以用于产生独立的时间间隔,输出信号频率。

图片3-34


5-34自由运行模式(Free—Running Mode)


2. 模模式(Module Mode)

在该模式下,如图 5-35所示,计数器从 0x0000 开始计数,每个分频后的时钟边沿增加 1,当计数器达到 T1CC0(由 T1CC0H:T1CC0L 组合)时(溢出),计数器重新载入 0x0000,继续递增它的值, 如图 5-9 所示。当达到最终计数值 T1CC0 时,IRCON.T1IF 和 T1STAT.OVFIF 两个标志位被 置 1,此时如果设置了相应的中断使能位 T1MIF.OVFIM 和 IEN1.T1IE,将产生中断请求。如 果定时器 1 的计数器开始于 T1CC0 以上的一个值,当达到最终计数值(0xFFFF)时,上述相 应标志位被置 1。取模模式被用于周期不是 0xFFFF 的场合(3)正计数/倒计数模式(Up/Down Mode)

图片3-32


5-35模模式(Module  Mode)


3. 正计数/倒计数模式(Up/Down Mode)

在该模式下,如图 5-36所示,计数器反复从 0x0000 开始计数,正向计数直到 T1CC0 值时,然后计数器将 倒向计数直到 0x0000,如图 5-10 所示。当达到最终计数 0x0000 时,IRCON.T1IF 和 T1STAT.OVFIF 两个标志位被置 1,此时如果设置了相应的中断使能位 T1MIF.OVFIM 和 200 IEN1.T1IE,将产生中断请求。这种模式被用于周期为对称输出脉冲或允许中心对齐的 PWM 输 出应用,而非周期为 0xFFFF 的场合。

图片3-35


5-36正计数/倒计数模式



(四) CC2530的T4定时器相关寄存器

定时器 T4 具有定时、输入采样、输出比较(PWM)三大功能,在这里主要介绍与定时相关的寄存器,具体描述如表 5-8表 5-9表 5-10表 5-11所示。

T4CTL寄存器,是定时器4的控制寄存器,主要用于设置定时器的工作模式、溢出中断屏蔽、定时器的启动和分频器的划分等设置。

5-8定时器T4定时相关寄存器1/4

T4CTL (0xEB) –定时器 4 控制

名称

复位

读/写

描述

7:5

DIV [2:0]

000

R/W

定时器时钟分频值。000:1分频。001:2分频。010:4分频。011:8分频。100:16分频。101:32分频。110:64分频。111:128分频。



TIMIF寄存器是定时器 1/3/4 中断屏蔽/标志寄存器,主要设置定时器溢出中断使能、定时器的通道和溢出中断标志设置。

5-9定时器4定时相关寄存器2/4

4

START

0

R/W

启动定时器。0:定时器暂停运行。1:定时器正常运行。

3

OVFIM

1

R/W0

计数器溢出中断屏蔽。0:中断禁止。1:中断使能。

2

CLR

0

R0/W1

清除计数器,写1到CLR复位计数器到0x00,并初始化相关通道所有的输出引脚。

1:0

MODE[1:0]

00

R/W

定时器工作模式选择。00:自由运行模式。01:倒计数模式。10:模模式。11:正计数/倒计数模式。

5-10定时器T4定时相关寄存器3/4

TIMIF (0xD8)–定时器 1/3/4 中断屏蔽/标志(Timer 1/3/4 Interrupt Mask/Flag)

名称

复位

读/写

描述

7

0

R0

没有使用

6

OVFIM

1

R/W

定时器1溢出中断使能(注:复位后,处于使能状态)0 中断禁止;1 中断使能

5

T4CH1IF

0

R/W0

定时器4通道1中断标志。0 没有中断等待;1 中断正在等待

4

T4CH0IF

0

R/W0

定时器4通道0中断标志0 没有中断等待;1 中断正在等待

5-11定时器4定时相关寄存器4/4

4

T4CH0IF

0

R/W0

定时器4通道0中断标志0 没有中断等待;

1 中断正在等待

3

T4OVFIF

0

R/W0

定时器4溢出中断标志0 没有中断等待;

1 中断正在等待

2

T3CH1IF

0

R/W0

定时器3通道1中断标志0 没有中断等待;

1 中断正在等待

1

T3CH0IF

0

R/W0

定时器3通道0中断标志0 没有中断等待;

1 中断正在等待

0

T3OVFIF

0

R/W0

定时器3溢出中断标志0 没有中断等待;

1 中断正在等待


任务实施

任务实施主要有4个步骤:打开工程、编写程序、建立与配置模块设备、编译和下载程序。

一、打开工程

工程打开的具体步骤在之前的任务中已经学习过了。代码的编写主要包括6个部分的内容。

二、编写程序

(1)打开sensor.c文件,在文件中增加需要使用到的头文件,具体内容如图 5-37所示。

图片3-38


5-37sensor.c添加头文件


(2)新增点对点通讯地址设置、定义消息格式宏定义、各个数组的大小及 LED 灯闪烁相关的宏定义,如图 5-38图 5-39所示。

图片3-39


5-38宏定义设置图片3-40


5-39宏定义设置


(3)定义变量和数组。定义 basicRfCfg_t 变量、无线接收和发送缓存数组、定时器超时标志的变量,如图 5-40所示。

图片3-41


5-40定义变量和数组


(4)新增计算校验和函数 CheckSum,如图 5-41所示。

图片3-42


5-41函数 CheckSum


(5)关键函数编写。

① 定时器初始化函数,如图 5-42所示,主要通过设置 T4CTL 和 T4IE 寄存器完成初始化工作,定时器相关的函数已经定义在 mylib 文件夹下的 TIMER.c 中。

图片3-43


5-42定时器初始化函数


② 在 sensor.c 中定义 BasicRF 初始化函数,初始化函数如图 5-43所示。

图片3-44


5-43BasicRF 初始化函数


(6)编写主函数

Main 函数是程序运行的起始位置,如图 5-44图 5-45图 5-46所示,运行传感数据采集应用程序前,需要先初始化各个功能模块,halBoardInit()初始化了LED 灯、串口、开启总中断,ConfigRf_Init()初始化了无线收发器的初始参数,Timer4_Init()对定时器 4 进行初始化,完成定时器 4 的初始化后用 Timer4_On()打开定时器 4。

图片3-45


5-44主函数代码1/3图片3-46


5-45主函数代码2/3
图片3-47


5-46主函数代码3/3


三、建立与配置模块设备步骤

代码编写完成以后,接下来建立与配置模块设备相关的操作。

该部分主要的内容是将 sensor.c 从 workspace 下的 app 组中移除,复制 Project 文件夹下的 sensor.c 为副本,并将这个副本重命名为 temprh_sensor.c,最后重新添加到 workspace 下的 app组中。

(1)选择菜单“Project“下的Edit Configurations”,弹出项目的配置对话框,系统会检测出项目中存在的模块设备,单击“New”按钮。如图 5-47所示。

图片3-48


5-47项目配置对话框



(2)在弹出的New Configuration对话框中输入模块名称为:“temprh_sensor”,基于 Deubg 模块进行配置,然后单击“OK”按钮完成模块设备的建立。如图 5-48所示。

图片3-49


5-48温湿度传感器模块配置对话框


(3)为了给模块设备设置对应的条件编译参数,在此需要进行如下设置: 在项目工作组中选择“temprh_sensor”模块,单击右键选择“Options”,在弹出的对话框中选择“C/C++ Compile”类别,在右边的窗口中选择“Preprocessor”选项中的 “Definedsymbols:”中输入 “CC2530_DEBUG”。如图 5-49所示。

图片3-50


5-49温湿度传感器模块“Options”设置


四、编译和下载程序

设备配置好以后,将插有温湿度传感器模块的 ZigBee 模块固定在 NEWLab 平台,在 Workspace 中选择 “temprh_sensor”模块,编译程序无误后,给 NEWLab 平台上电,下载程序到 ZigBee 模块中。 打开串口调试助手,设置波特率为 115200 后点击 “打开”,可以看到采集到的温湿度数据显示出来了。如图 5-50所示。

图片3-51


5-50程序运行结果


验证通过后,需要把条件编译选项中的“CC2530_DEBUG”去掉,变成 “xCC2530_DEBUG”。如图 5-51所示。

图片3-52


5-51去掉CC2530_DEBUG条件编译选项