基于STM32单片机的多通道无线抢答器设计

94 篇文章 2 订阅
28 篇文章 2 订阅

摘   要

本文首先简述抢答器和无线抢答器的发展和构成,接着简述了NRF24L01无线传输、STM32F103芯片的编程以及TFTLCD 液晶屏和ILI9341(ID9341)控制算法的研究方法,并在此基础上详细地介绍本无线抢答器系统软件和硬件部分的设计内容。

本次设计选用了NRF24L01芯片所构成的无线传输模块、TFTLCD液晶屏构成的显示模块、轻触按键和STM32F103ZET6与STM32F103C8T6两款微型控制器进行控制,主要包括两块:主机和从机,使用NRF24L01无线传输模块构成抢答器和接收器之间的数据通信,从而进行数据传输,用轻触按键和STM32F103C8T6构成抢答信号的输入和控制,用TFTLCD液晶屏的显示抢答的结果,运用STM32F103微型控制器的GPIO输入输出来连接和控制以上提到的外部硬件设备,经过调试运行,实现校验代码的编写,使其实现带校验码的多通道无线抢答的功能,完成最终的成品,从而满足此次设计的要求。论文中分析了设计中出现的问题和解决方法,最后写总结和展望。

关键词STM32单片机NRF24L01无线传输,校验码。

第一章  概述

1.1选题背景

抢答器在电视知识竞赛、各大娱乐节目中,能很准确并且公平地判断出抢答者的座位号。传统抢答器只是大概判断出抢答成功或犯规选手台号,无法显示出每个选手的抢答时间。而如今的抢答器能够通过数据来说明抢答结果的准确性和公平性。使比赛大大增加了娱乐性的同时,也更加公平、公正;经过适当改装,它也可用于各类呼叫系统中。

一般抢答器由单片机以及外围电路组成,分为八路十路等不同,八路和十路的差别是,抢答器背面的接口有几组,和外形没有关系。按照抢答器的分类来分,一般可分为电子抢答器和电脑抢答器。电子抢答器又分非语音非记分抢答器和语音记分抢答器;电脑抢答器又分为无线电脑抢答器和有线电脑抢答器。抢答器的种类多之又多。

据上海奔流电子有限公司《三十年抢答器发展概述》中提到最早的抢答器出现在八十年代末,那个年代所有的抢答器几乎都是采用数字逻辑电路控制的,主机面板上用一个0.5英寸双位数码管做主机显示屏,显示是哪一组抢答成功,不支持大尺寸数码管。观众看不到是哪个组抢答成功,需要主持人口头播报。上海奔流电子有限公司自九六年二月份创立以后,根据抢答器产品的特点和市场上现有产品存在的缺点,着手研制新一代带计分功能的智能型抢答器。

1.2 无线抢答器的发展现状

抢答器正朝向高精准确、高稳定性、使用方便的方向发展, 而且也在朝向多功能、人性化的方向发展。现在市面上常用的抢答器一般有如下几种功能:

1.抢答器在电视知识竞赛、各大娱乐节目中,能很准确并且公平地判断出抢答者的座位号。

2.通过抢答者的指示灯显示、数码显示和警示显示等方式确定出第一抢答者。

3.一般抢答器由单片机以及外围电路组成,分为八路十路等不同,八路和十路的差别是,抢答器背面的接口有几组,和外形没有关系。

4.但多数的抢答器都是有线的,使用起来不是很方便,体积也非常大。

所以本设计在抢答器的基础之上,在传输中添加自行设计的校验码,防止数据传输中出错。抢答器可以实现4人以上抢答,开始按键启动,显示屏显示抢答的结果。

但目前大多数抢答器存在很多不足之处:第一,现场线路连接先多而复杂,从而导致安装困难,性能也不可靠。第二,采用的是很简单的单片机扫描、号码识别,电路识别慢并且延迟大,而且需要和其他数字电路配合,导致里面的电路更加复杂。第三,无线传输过程中的数据不加校验码导致乱码。为了解决以上的3个问题,本课题设计了基于STM32带校验码的多通道无线抢答器。科技一直在进步,随着电子、电脑技术的发展,市场需要更好功能的抢答器产品。

1.3带校验码的多通道无线抢答器的系统构成和主要功能

带校验码的多通道无线抢答器的系统是由主机和从机组成,主机包括抢答控制按钮、TFTLCD显示屏、无线接收和MCU等主要模块,而从机包括抢答轻触按键、无线发送和MCU等主要模块,设计一套基于STM32微控制器带校验码的多通道的无线抢答器,结合自身的一些特点来开展相应的研究工作。包括带校验码程序的编写,STM32的原理图和PCB的设计,TFTLCD液晶屏的控制指令,NRF24L01的控制指令,都是为了这一次毕业设计提供硬件和软件的基础。

该无线抢答器系统的工作流程图如图1.1所示。

图1.1  无线抢答器系统的工作流程

1.4 论文的组织结构

本文共分五章,内容组织如下:

第1章:概述。主要介绍了选题的背景和无线抢答器的发展现状、带校验码的无线多通道的抢答器系统构成、主要功能和论文组织结构。

第2章:系统硬件设计。介绍了系统硬件的总方案设计、STM32单片机、NRF24L01无线模块,TFT液晶显示模块以及总电路设计。

第3章:系统软件设计。介绍了系统软件的总方案设计,主要介绍了各模块电路的设计,包括抢答器主要功能模块、带校验码的多通道设计、NRF24L01功能模块、TFTLDC显示模块。

第4章:硬件最终成果。包含带校验码的多通道无线抢答器主机部分和从机部分,展示了设计中出现的一些问题以及设计的最终成果。

第5章:总结和展望。总结了设计中遇到的问题以及如何去解决问题。并通过这次毕业设计展望以后的人生道路。

第二章 系统硬件设计

带校验码的多通道的无线抢答器整个系统是由硬件和软件两大部分组成,并且这两部分就是整个系统的两大分支。在这个章节中,将介绍系统硬件的设计,大概分成以下3个方面:系统的硬件总体设计、各模块的电路设计、总电路设计。这三个方面分别会介绍相关的一些内容。

2.1  系统硬件的总方案设计

本设计总体由两个部分组成:主机和从机。在初始化完成之后,主机部分的接收端允许抢答时,从机部分的抢答器发送端才允许抢答,否则发送端发送无效。各接收端在各自按下的时间里(会有先后顺序),依次将抢答信号发送到接收端,经过接收端接收并处理显示到TFTLCD液晶显示屏上[1]。系统原理图如图2.1所示。

图2.1  系统原理图

2.2 硬件各模块电路的设计

2.2.1 STM32单片机的介绍

本次设计使用的是STM32F030C8T6和STM32F103ZET6的 STM32F103 系列微处理器。STMicroelectronics,基于 STMicroelectronics ARM Cortex-M0 的 STM32F0 系列微控制器,包括入门级 ARM Cortex™ M0 32 位 RISC 内核。 有如 I2C、SPI 和 USART 等通信接口,以及 12 位 ADC、16 位计时器和一个高级控制 PWM 计时器。ST 的 STM32F1 MCU 高级体系结构与 STM32 平台相结合,允许低功率应用设计,提供不同的封装类型。 具有嵌入式闪存和 SRAM 的 ARM Cortex™-M0 内核处理器与所有 ARM 工具和软件兼容[2]。

如图2.2和2.3所示,分别为STM32F030C8T6和STM32F103ZET6的引脚图。

图2.2 STM32F103C8T6引脚图  

图2.3 STM32F103ZET6引脚图

STM32F103的最小系统:

STM32F103的最小系统包括电源、内部时钟电路、复位电路、BOOT设置和JTAG下载接口。

  1. 电源:在本设计中,开发板正常的工作电压为3.3V,而USB供电是5V供电,因此,在此电压转换过程中需要将5V转换为3.3V,所以本次设计用的是ASM1117电源芯片,就能够将5.0V的转换为3.3V的电压,在输入端加入一个瓷片电容和一个电解电容,输出端同样加入这个两个[3]。其基本的电路图如图2.4所示。

图2.4 STM32供电电路

  1. 内部时钟电路:本身工作的时候需要两个两个晶振电路,分别是32.768K和8K的晶振,提供其运行的时序。其基本的电路图如图2.5和2.6所示。

图2.5  32.768K的晶振电路

图2.6  8K的晶振电路

  1. 复位电路:采用的是电阻和电容的设计,通过按键来触发系统复位。3.3v的电源接到电阻为10K的电阻,再接10uF的电容接到电源负极,从电容的正极引出一根线和一个普通弹片按键连接并将按键另一个脚接地,从电容的正极再引出一线接到STM32的NRST上,即可构成复位电路。当一上电,电容两端电压为零,使得STM32上电复位,电容慢慢充电,使得电容两端维持在3.3V,STM32工作一段时间后,按下复位按键,电容正极接到地,电容瞬间放点,电压瞬间到零,使得STM32瞬间低电平复位[4]。如图2.7所示:

图2.7 复位电路

  1. BOOT设置:

STM32三种启动模式所对应的存储介质全部都是芯片内置的,它们是:

(1)用户闪存 = 芯片内置的Flash。

(2)SRAM   = 芯片内置的RAM区,就是内存。

(3)系统存储器  = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序[5]。如下表2.8所示:

表2.8 BOOT1/BOOT0设置启动模式表

BOOT1状态

BOOT0状态

启动模式

BOOT1=x

BOOT0=0

从用户闪存启动,这是正常的工作模式。

BOOT1=0

BOOT0=1

从系统存储器启动,这种模式启动的程序功能由厂家设置。

BOOT1=1

BOOT0=1

从内置SRAM启动,这种模式可以用于调试。

在本设计中能够选用跳线帽的方式,选择适合系统调试的方式,本设计中BOOT0=0和BOOT1=0,选择正常的工作模式,即从用户闪存启动。

  1. JTAG下载接口:

JTAG一开始是用于芯片的测试,JTAG的基本原理是在器件内部定义一个TAP,通过专业的JTAG测试工具对内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP对FLASH等器件进行编程。

JTAG编程的方法是在线编程,传统生产流程中是先对芯片进行预编程,装到板上,而如今的的流程为把器件固定到板上,再用JTAG编程,这样子大大提高了工作效率。JTAG接口可对DSP芯片内部的所有部件进行编程[6]。

2.2.2 NRF24L01无线模块的介绍

无线通信模块运用的特别广泛。在水文领域、工业农业、无人机通讯、各大车辆、小型无线网络、小区的门禁系统、身份识别、智能卡、防火系统、无线遥控系统、自动化控制、数字音频、数字图像传输等领域中。NRF24L01采用 FSK 调制,内部集成 Enhanced Short Burst 协议。我们只需要为单片机系统预留 5 个 GPIO,1 个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为 MCU 系统构建无线通信功能。在本设计中它与STM32F103的协调工作,构建无线通信通道,完成无线通信功能[7]。NRF24L01的内部构图如图2.9所示:

图2.9 NRF24L01的内部构图

如果我们从单片机的角度去考虑的话,我们只需要侧重看图右面的CSN、SCK、MISO、MOSI、IRQ、CE。

CSN:芯片的片选线,CSN 为低电平芯片工作。

SCK:芯片控制的时钟线(SPI 时钟)

MISO:芯片控制数据线(Master input slave output)

MOSI:芯片控制数据线(Master output slave input)

IRQ:中断信号。无线通信过程中 MCU 主要是通过 IRQ 与 NRF24L01 进行通信。

CE: 芯片的模式控制线。 在 CSN 为低的情况下,CE 协同 NRF24L01 的 CONFIG 寄存器共同决定 NRF24L01 的状态[8]。

在本设计当中,为了确保NRF24L01能够正常工作,首先要供以3.3V的电压,其作用是构建无线抢答器的主机和从机之间的通信,使得数据能够来回传输,将抢答信息发送到主机,进而显示抢答的信息,完成无线抢答的传输的功能。其与STM32的管脚相连,PA10-CSN(芯片的片选线) PA11-MOSI(芯片控制数据线(Master output slave input)) PB5-MISO(芯片控制数据线(Master input slave output)) PB6-SCK(芯片控制的时钟线) PB7-CE(芯片的模式控制线),这里没有用到中断IRQ功能,故八脚(IRQ)是没有和STM32相连,也就是悬空[9]。其具体的控制电路连接方式如表2.10所示。

表2.10   控制电路连接方式

STM32管脚

NRF24L01接口

PB1

CE

PB3

CSN

PA6

SCK

PA7

MISO

PA8

MOSI

PA16

悬空

2.2.3 TFTLCD液晶显示模块的介绍

TFT(Thin Film Transistor)LCD即薄膜场效应晶体管LCD,是有源矩阵类型液晶显示器(AM-LCD)中的一种。特别是TFT-LCD,是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上超过CRT的显示器件,它的性能优越、可以大规模生产,高度自动化,低廉的原料成本,广阔的的发展空间,迅速成为一种主流产品,带动了21世纪经济的增长[10]。

在本设计中选用的是ILI9341液晶显示屏,ILI9341 是一个用于 TFT 液晶显示的单芯片控制驱动器,具有 262,144 色的 240RGB X 320 像素显示解决方案。它的组成部分含有一个 720 通道的源极驱动器,一个320通道的栅极驱动器,172800字节用于图形显示的GRAM ,以及供电电路。同时使用FSMC驱动TFTLCD的显存工作,可以极大地提升LCD的显示效率和刷屏频率。相对于以往使用IO口控制LCD屏幕来说,使用FSMC的优势在于MCU可以将内存的数据通过并行总线直接传送至LCD显存,极大地提高了速度,保证了LCD的显示刷新频率。经过简单测试,使用IO口控制的LCD的刷新频率大概可以达到14帧一秒,使用FSMC的控制的LCD的刷新频率大概可以达到28帧一秒,效率足足提升了100%,这足以使得多功能采集显示平台的显示模块达到显示要求。

基本特性:显示方案:[240 x RGB](水平) x 320(垂直)、具有片上显示 RAM172800 字节的 TFT LCD 驱动器, 上下文亮度自适应控制,工作温度范围:-40℃ 至85℃[11]。

在本设计中,TFTLCD液晶显示屏的管脚图如图2.11所示:

图2.11  TFTLCD液晶显示屏管脚图

TFTLCD液晶显示屏的管脚定义如表2.12所示:

表2.12 TFTLCD液晶显示屏的管脚定义

管脚

定义

LCD_CS

LCD片选信号

LCD_WR

LCD片选信号

LCD_RD

LCD读信号DB[15-0]:16位双向数据线

LCD_RST

硬件复位LCD信号

LCD_RS

命令、数据标志(0:命令1:数据)

BL_CTR

背光控制信号

T_MISO/T_MOSI/T_PEN/T_CS/T_CLK

触摸屏接口信号

FSMC接口与TFTLCD液晶接口连接方式如下表2.13所示:

表2.13 FSMC接口与TFTLCD液晶接口连接方式

8080信号线

功能

FSMC—NOR信号线

功能

CSX

片选信号

NEX

片选

WRX

写使能

NWR

写使能

RDX

读使能

NOE

读使能

D[15:0]

数据信号

D[15:0]

数据信号

D\CX

数据\命令选择

A[25:0]

地址信号

2.3总电路设计

本次设计主要使用STM32控制器的GPIO库读取GPIO来判断按键是否被按下,使用SPI通信协议与NRF24L01无线模块进行通讯,使用IIC通讯协议向TFTLCD液晶显示屏写入控制和显示的数据,从主机部分按键信号的输入经过STM32CPU进入到从机的NRF24L01发送端,然后再发送到主机的NRF24L01接收端进行读取,在主机的STM32CPU进行先后顺序的带校验码的数据处理之后,进而将数据传输给TFTLCD液晶屏进行显示,完成抢答与显示。

  • 系统软件设计

3.1软件开发环境及其基本工具

3.1.1 C语言编程

C语言之所以如今这么受欢迎,是因为它具有很强大的功能。第一,高效是C语言与生俱来的特点。它能有在有效的内存空间里快速运行。第二,它具有可移植性。虽然程序的可移植性并不是C语言的主要目标,但还是C语言的优点之一。当程序必须在多种计算机型(比如从个人计算机到超级计算机)上运行时,常常会用C语言来编写。第三,它比较灵活。C语言可以用于编写从嵌入式系统到商业数据处理的各种应用程序。C语言在其特性使用上的限制非常少,在其他语言中认定非法的操作在C语言中往往是允许的。

3.1.2软件开发的基本工具介绍

 Altium Designer不仅全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还有很多改进和很多更高级的功能。此平台开拓并拓展了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。 由于Altium Designer 在继承先前Protel软件功能的基础上,综合了FPGA设计和嵌入式系统软件设计功能,因此,Altium Designer 对计算机的系统需求比之前版本的要求都要高很多。

Keil MDK编译软件,也称MDK-ARM,Realview MDK、I-MDK、uVision4 等。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本都能提供一个可靠的C / C++开发环境,当中,MDK-Professional还含有大量的中间库[12]。

本设计中使用到Keil uVision5编译软件进行软件开发,实现STM32处理器的编程。

3.1.3  STM32工程创建与配置

通过Keil uVision5编译软件,创建STM32工程,步骤如下:

(1)首先建立一个工程文件夹,并命名Project。

(2)打开Keil uVision5编译软件,并在菜单栏中找到project,点击New uVision Project,找到之前新建的文件夹,再次进行命名保存。

(3)点击pack installer,软件会弹出选择芯片的窗口,在左侧的芯片库里找到STM32系列的芯片,选择自己需要用到的芯片,点击OK。

(4)在工程文件夹里添加4个文件夹:user(放用户自己编写的相关程序);CMSIS(与内核相关文件);startup(启动单片机的汇编文件);driver(外设操作的驱动文件)。再向这四个文件夹中添加固件库的相关文件。

(5)回到软件界面,管理新建的工程,右键点击出现菜单栏,选择Manage Project Items。

(6)进入Manage Project Items界面。对该工程进行管理,通过Project Target的删除和新建,可以对工程进行重命名。

(7)对user、CMSIS、startup和driver4个文件进行Add Files操作。

(8)单击Options for Target界面,将晶振频率设置成和你的电路板一样的数值。

(9)选择C/C++标签,在Define中输入:USE_STDPERIPH_DRIVER。

(10)在include Paths中添加所有.h文件的根目录。

(11)在Debug标签中选择Use:J-LINK/J-TRACE Cortex,点击完成[13]

3.2系统软件的总方案设计

本设计的软件部分的基本工作情况如下所述,当主机和从机处于供电状态,主机端LCD闪烁开始抢答的按键,此时还不能抢答,当按下允许抢答按键时,便进入抢答模式,从机端便可以开始抢答,N个抢答器便可以按下抢答按键,发送本机位的抢答序号,而主机根据接收到的信息,进行校验辨别是哪一台机子,还有避免抢重复抢答的处理机制,经过处理后,在TFTLCD液晶屏显示第一名抢答的结果,显示对应的机号,其他抢答者不显示,如果第一名抢答者抢答成功的话,那就进入重新开始抢答的等待模式;如若第一名抢答失败,那么剩余的人继续抢答,以此类推...通过主机和从机的紧密配合,实现带校验码的多通道无线抢答器的设计[14]。

3.3软件各模块电路的设计

3.3.1抢答器重要功能模块

  1. 抢答器控制模块

抢答器控制模块中有两个按键分别是WK_UP和KEY0,WK_UP的作用是开始抢答模式启动按键,KEY0则是关闭当前抢答模式并进入等待抢答模式,KEY1的作用是确认当前选手是否答对,KEY2的作用是开启剩余选手重新答题。通过四个按键就能够控制无线抢答器接收部分的基本控制[15]。

其大概的工作流程图如图3.1所示:

图3.1 抢答器控制模块工作流程图

  1. 抢答器重启模块

在运行程序的过程中,当前轮已经答题结束或者当四个抢答器都已经答错,那么进入抢答重启模式,TFTLCD闪烁显示“Press K0 To Restart”的提示信息,等待KEY0(重启按钮)按下,如果KEY0没有被按下,那么将继续等待KEY0被按下,如果KEY0被按下,则进行清空之前的数据,进入下一次抢答。

本设计抢答重启模块的工作流程如下图3.2所示:

图3.2 抢答器重启模块工作流程图

3.3.2校验码的多通道设计

  1. 校验码的介绍

校验码是将有效信息和校验信息按一定的规律编制的代码。在科技还没有那么发达的年代,代码作为数据在向计算机或其它设备进行输入时,有的时候就会产生输入错误,所以,为了减少一些外界的干扰或者电路故障,一些搞科研发明的人就想出了各种校验检错方法,并根据这些方法设置了校验码。校验码既可以由信息本身来判断信息是否出错又可以在发生错误时纠正错误。校验码常见的校验码算法有:字符校验、奇偶检验、海明校验、循环冗余(CRC)校验、水平垂直校验等等[16]。

  1. 校验码多通道程序的设计思路

当开始新一轮抢答时,清空机位数组“ATT[4]="!!!!";”,该机位数组的作用是存放已经答过题的选手字符信息,当第一名选手抢答成功时,此时会收到一条字符串数据,如“YYX,1!”字符串,提取此字符串中的第五个字符“1”存放到机位数组ATT[0]=‘1’,即已经添加了这名选手的信息,说明他已经答过题;当允许剩余三名选手抢答时,那么机位数组里的选手可能会误按,所以在程序设计过程当中,要排除掉已经答过题的选手,将接收到的字符串的第五位字符,与机位数组里的字符进行比较,如果有,那么继续答题,如果没有并将此第五位字符存到ATT[1]中,以添加本次的选手的信息。如此循坏,便能够准确判断是当前是哪位选手答题,并且能够判断哪些选手已经答过题和哪些选手还没答过题。

具体流程图如图3.3所示:

图3.3校验码设计的流程图

3.3.3NRF24L01软件模块的设计

 (1)首先是进入本次抢答,定义了一些本GET_DAT(void)函数的一些变量和一些数组,用来存放接收到的数据。开始抢答,然后等待接收数据,如果没接收到,则继续等待接收,如果有收到数据,则开始判断接收到的数据,将接收到的数据。显示第一名选手,第一名选手进行答题,如果答对了当前选手加一分,答错了则剩下三名选手继续答题,显示新一轮第一名选手,并开始答题,如果答对了当前选手加一分,答错了则剩下两名选手继续答题,显示新一轮第一选手,并开始答题,如果答对了当前选手加一分,答错了则最后一名选手答题,如果对了则该选手加一分,答错了,这四名选手都没有加分,并等待重新开始新一轮答题。在此过程中,将会记下之前答过的没有答对的选手,在后面的抢答过程中他们不会参与答题。

在程运行程序过程中,本设计NRF24L01无线接收模块的工作流程如图3.4所示。

图3.4 NRF24L01无线接收模块的工作流程

NRF24L01有以下几个工作模式,它的工作模式又与CE和寄存器内部的PWR_UP、PRIM_RX共同控制,具体介绍如下表所示:

表3.5 NRF24L01与CE和寄存器控制关系

NFR24L01所处模式

接收模式

发送模式

发送模式

待机模式II

待机模式I

掉电模式

PWR_UP

1

1

1

1

1

0

PRIM_RX

1

0

0

0

-

-

CE引脚电平

1

1

1    0

1

0

-

FIFO寄存器状态

-

数据在TX FIFO寄存器中

停留在发送模式,直至数据发送完成

TX FIFO为空

无数据传输

-

在程序运行过程中,要对NRF24L01模块的管脚进行初始化,在配置RCC_APB2Periph_GPIOB的时钟使能外,NRF24L01既有输入管脚也有输出管脚,两者的模式要分开配置,MOSI- GPIO_Pin_15、SCN- GPIO_Pin_9、SCK- GPIO_Pin_6、CE- GPIO_Pin_7、MISO- GPIO_Pin_5对应进行配置。这些只是对其管脚的配置,还要对NRF24L01的工作模式的设置[17]。在此本程序要将其设置成接受模式NRFSetRXMode()

(2)NRF24L01的TX和RX模式的初始化分别如表3.6和3.7所示:

表3.6 NRF24L01的TX模式初始化

初始化步骤

24L01相关寄存器

1)写Tx节点的地址

TX_ADDR

2)写Rx节点的地址(主要为了使能AUTO ACK)

RX_ADDR_P0

3)使能AUTO ACK

EN_AA

4)使能PIPE 0

EN_RXADDR

5)配置自动重发次数

SETUP_RETR

6)选择通信频率

RF_CH

7)配置发射参数

RF_SETUP

8)选择通道0有效数据宽度

RX_PW_P0

9)配置24L01的基本参数以及切换工作模式

CONFIG

表3.7 NRF24L01的RX模式初始化

初始化步骤

24L01相关寄存器

1)写RX节点的地址

RX_ADDR_P0

2)使能AUTO ACK

EN_AA

3)使能PIPE 0

EN_RXADDR

4)选择通信频率

RF_CH

5)选择通道0有效数据宽度

RX_PW_P0

6)配置发射参数

RF_SETUP

7)配置24L01的基本参数以及切换工作模式

CONFIG

  1. 对NRF24L01固件编程的基本思路:
  1. 置SPI通信协议上CSN为低,使能芯片,配置芯片各个参数。
  2. 如果是发射模式,填充 TX FIFO。

3) 配置完成以后,通过SPI通信协议上CE 与 CONFIG 中的 PWR_UP 与 PRIM_RX 参数确定 24L01要切换到的状态。

发射模式:PWR_UP=1; PRIM_RX=0; CE=1

接收模式: PWR_UP=1; PRIM_RX=1; CE=1;

4) IRQ 引脚会在以下三种情况变低:

TX FIFO 发完并且收到 ACK(使能 ACK 情况下);

Rx FIFO 收到数据达到最大重发次数;

将 IRQ 接到外部中断输入引脚,通过中断程序进行处理[18]。

3.3.4TFTLCD液晶显示屏软件模块的设计

首先是检测NRF24L01是否连接正常,如果不正常就显示提示,NRF24L01连接错误,如果连接正常,则显示下连接正常,显示四位选手的积分情况,然后检测是否按下开始答题的按键K4,如果没有按下K4,则继续闪烁提示信息,如果按下K4,则进入抢答模式,等待四位选手全部抢答结束,并且显示第一名抢答的同学,等待第一名选手进行答题,答对则按下KEY2结束本轮答题,并且进入下一轮答题等待,答错则剩余几名选手继续抢答,如此循环,全部选手都答错,则任何选手都不加分,如果有答对则当前选手加一分。完成本次答题,便立即显示各位选手的当前积分,同时显示“End_Answer...”,进而检测KEY0是否被按下,闪烁显示“Press K0 To Restart”。抢答器将循环进行,直到断开电源[19]

在程序运行的过程中,TFTLCD显示屏的工作显示流程如图3.8所示:

    

图3.8TFTLCD显示屏的工作显示流程

  • 硬件最终成果

4.1  带校验码的多通道无线抢答器主机

NRF24L01连接不正常,从而显示提示,NRF24L01连接错误,如图4.2所示:

NRF24L01连接正常,此时等待按键,准备开始抢答,此时按键无效,不能抢答,如图4.3所示:

 

   

            图 4.2NRF24L01连接错误       图4.3 NRF24L01连接正确并等待开始抢答

    如图4.4所示:抢答者准备抢答,主机正在准备接收从机发来的数据。

如图4.5所示:抢答者抢答成功,主机判别从机发送的数据从而显示抢答成功者。

如图4.6所示:抢答成功者回答错误本轮不能再抢答,其他三位抢答者抢答,答错积分不变。

如图4.7所示:抢答成功着回答正确其积分加1,本轮抢答结束等待下一轮抢答开始。

     

           图 4.4主机正在接收抢答                       图 4.5主机显示第一名

    

图 4.6 当前选手答错清除内容并开始抢答           图4.7 当前选手答对并分数加一,等待新一轮抢答

4.2  带校验码的多通道无线抢答器从机

如图4.8所示:抢答者就是通过这4个抢答器上的抢答按钮来实现抢答功能。

图 4.8带校验码的多通道无线抢答器从机

如图4.9所示:当抢答者参与抢答时,通过抢答按键来发送数据到主机,LED灯亮起,主机经过处理显示名次以及积分。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值