基于单片机的计算机之间无线通信的实现.docx
《基于单片机的计算机之间无线通信的实现.docx》由会员分享,可在线阅读,更多相关《基于单片机的计算机之间无线通信的实现.docx(26页珍藏版)》请在冰豆网上搜索。
![基于单片机的计算机之间无线通信的实现.docx](https://file1.bdocx.com/fileroot1/2023-2/6/a3913f31-c0f9-4d4c-b076-c5e156ef8d2e/a3913f31-c0f9-4d4c-b076-c5e156ef8d2e1.gif)
基于单片机的计算机之间无线通信的实现
课程设计报告
学院:
专业名称:
学生:
指导教师:
时间:
课程设计任务书
题目:
基于单片机的计算机之间无线通信的实现
一、设计容
1.制作实物实现计算机之间的无线通信。
2.设计硬件PCB电路板,并焊接,编写程序,调试以实现指定的功能;编写上位机界面,使得使用简单,可操作性强。
3.要求系统可靠、稳定。
二、进度要求
1.了解设计容2天
2.方案设计3天
3.系统设计4天
4.结果分析2天
6.撰写设计报告2天
7.汇报1天
学生
指导教师
摘要2
引言3
1.课程设计目的3
2.方案设计4
2.1系统组成及功能概述4
2.2系统硬件设计6
2.2.1供电部分6
2.2.2USB转串口模块7
2.2.3单片机系统9
2.2.4无线模块10
2.3软件设计11
2.3.1SPI初始化程序设计11
2.3.2发送子程序设计12
2.3.3接收子程序设计12
2.3.4上位机程序设计13
3.实验结果及分析13
4.结束语14
5.参考文献15
6.致15
7.附录16
摘要
本文给出了一种基于STM8系列单片机的无线通信系统的设计与实现方案,介绍了系统的结构组成,介绍了单片机作为核心控制器是如何连接PC机和无线收发器的。
单片机通过串口接收PC机发来的信息,通过校验数据接收是否丢包,然后通过SPI与无线模块通信将数据发送出去。
接收端接收到信息后再通过串口发给另外的PC机从而实现计算机之间的通信。
实验结果表明,该方案运行稳定,对实际的无线通信有参考价值。
关键词:
无线通信;STM8;NEF24L01
基于单片机的计算机之间无线通信的实现
引言
无线通信在科学技术发展的今天已经变得越来越重要,并且已渗透到社会的各个角落,有着广阔的市场和业务需要。
目前主要的无线技术有:
蓝牙(Bluetooth),红外数据传输(IrDA),无线局域网(Wi—Fi)等¨。
Bluetooth是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。
由于蓝牙采用无线接口来代替有线电缆连接,具有很强的移植性,并且适用于多种场合,加上该技术功耗低、对人体危害小,而且应用简单、容易实现,所以易于推广。
但同时其应用成本升高,普及难度增大,且通信速率较慢;IrDA是一种利用红外线进行点对点通信的技术,是第一个实现无线个人局域网(PAN)的技术,但它对于点对多点的通信显得无能为力,且红外技术只能在视线可以达到的围定向传输,中间不能有任何阻挡,同时要求通信设备的位置相对固定,这样就无法应用于移动设备;Wi—Fi是以太网的一种无线扩展,主要目的是提供WLAN接人,但由于其硬件实现需要很大的容纳空间,且往往在商用计算机系统中实现,这就限制了其在工业领域,尤其是在某些不依赖通用计算机的特殊工业场合的应用。
针对这些问题提出了一种功耗低、成本低且利于在嵌入式系统中实现的通用无线通信系统,它基于无需申请就可使用的2.4GISM频段,可广泛适用于消费类电子、无线遥控玩具、汽车用自动化、家庭自动化控制及建筑安全装置等领域。
1.课程设计目的
掌握了解单片机硬件的设计方法、单片机编程和SCI、SPI的通信原理。
课程设计主要以制作实物为主,设计、制作、焊接和调试PCB电路板,编写单片机程序和上位机程序,最后再综合调试,完成基于单片机的计算机之间无线通信的整个设计。
2.方案设计
2.1、系统组成及功能概述
系统主要包括两个分别具有收发功能的无线通信模块,每个模块均由单片机和无线收发模块组成。
系统的原理框图如图1所示,发送时,单片机接收到来自计算机的串口信息,经过校验后,通过SPI总线向RF写入控制命令及所需发送的数据,RF通过天线发送出去;接收时,单片机通过SPI总线读取RF的工作状态,获取芯片相关信息及接收到的数据,再通过串口发送给计算机。
两个收发模块之间相互通信,从而实现数据的无线传输。
图1.通信系统结构图
在系统结构中,单片机作为主控制器,需要完成数据的处理和对系统的控制。
选用意法半导体公司的8位单片机STM8S103F3P6。
STM8S103系列单片机具有高级STM8核,具有3级流水线的哈佛结构,核为扩展指令集。
具有更低的系统成本,高性能和高可靠性,16MHzCPU时钟频率,完善的文档和多种开发工具选择。
其外设丰富,和本文中相关的外设有,带有32个中断的嵌套中断控制器,6个外部中断向量,最多27个外部中断;16位通用定时器,带有3个捕获/比较通道(IC、OC或PWM);带有8位预分频器的8位基本定时器;带有同步时钟输出的UART;SPI接口最高到8Mbit/s;32脚封装芯片上最多有28个I/O,包括21个高吸收电流输出非常强健的I/O设计,对倒灌电流有非强的承受能力等。
另外其使用简单,2.95到5.5V工作电压,灵活的时钟控制,4个主时钟源,带有时钟监控的时钟安全保障系统,永远打开的低功耗上电和掉电复位等等。
其完全能够满足本系统的设计需要。
2.4G无线模块用以实现无线通信的功能,通信的可靠性需要满足要求。
我们直接使用一种2.4G无线收发模块,其使用的是NRF24L01芯片。
NRF24L01是一款工作在2.4-2.5GHz世界通用ISM频段的单片收发芯片,无线收发器包括:
频率发生器增强型SchockBurstTM模式控制器功率放大器晶体放大器调制器解调器输出功率频道选择和协议的设置可以通过SPI接口进行设置极低的电流消耗,当工作在发射模式下发射功率为6dBm时电流消耗为9.0mA接受模式为12.3mA掉电模式和待机模式下电流消耗模式更低。
其具有以下优点:
1、支持六路通道的数据接收,低工作电压:
1.9~3.6V低电压工作;2、高速率:
2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率);3、多频点:
125 频点,满足多点通信和跳频通信需要;4、超小型:
置2.4GHz天线,体积小巧,15x29mm(包括天线);5、低功耗:
当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗;6、低应用成本:
NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:
自动重发丢失数据包和自动产生应答信号等,NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
单片机与无线收发模块之间是通过SPI通信实现通信的。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。
也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
其中,CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。
这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。
通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。
这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。
数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。
完成一位数据传输,输入也使用同样原理。
这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
2.2、系统硬件设计
本系统硬件部分主要由供电部分,USB转串口,单片机系统,无线模块4部分构成。
2.2.1、供电部分
本模块需要通过USB与计算机连接,并直接由计算机的USB口供电。
再通过线性稳压芯片提供3.3V电压供单片机工作。
原理图如图2。
图2.供电部分原理图
LM1117是一个低压差电压调节器系列。
其压差在1.2V输出,负载电流为800mA时为1.2V。
它与国家半导体的工业标准器件LM317有相同的管脚排列。
LM1117有可调电压的版本,通过2个外部电阻可实现1.25~13.8V输出电压围。
另外还有5个固定电压输出(1.8V、2.5V、2.85V、3.3V和5V)的型号。
LM1117提供电流限制和热保护。
电路包含1个齐纳调节的带隙参考电压以确保输出电压的精度在±1%以。
LM1117系列具有LLP、TO-263、SOT-223、TO-220和TO-252 D-PAK封装。
输出端需要一个至少10uF的钽电容来改善瞬态响应和稳定性。
其特性如下:
提供1.8V、2.5V、2.85V、3.3V、5V和可调电压的型号;
节省空间的SOT-223和LLP封装;
电流限制和热保护功能;
输出电流可达800mA;
线性调整率:
0.2% (Max);
负载调整率:
0.4% (Max);
温度围:
0℃~125℃ 。
2.2.2、USB转串口模块
本系统通过USB口与计算机通信,但是单片机外设中不支持USB通信,因此需要将usb转换成串口再与单片机通信。
选择CH340G可将USB转成TTL电平与单片机直接相连,原理图如图3。
CH340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口。
在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。
图3.USB转串口模块原理图
其有如下特点:
●全速USB设备接口,兼容USB V2.0,外围元器件只需要晶体和电容。
●仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口。
● 计算机端Windows操作系统下的串口应用程序完全兼容,无需修改。
● 硬件全双工串口,置收发缓冲区,支持通讯波特率50bps~2Mbps。
● 支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS。
● 通过外加电平转换器件,提供RS232、RS485、RS422等接口。
● 支持IrDA规SIR红外线通讯,支持波特率2400bps到115200bps。
● 软件兼容CH341,可以直接使用CH341的驱动程序。
● 支持5V电源电压和3.3V电源电压。
● 提供SSOP-20和SOP-16无铅封装,兼容RoHS。
CH340芯片正常工作时需要外部向XI引脚提供12MHz的时钟信号。
一般情况下,时钟信号由CH340置的反相器通过晶体稳频振荡产生。
外围电路只需要在XI和XO引脚之间连接一个12MHz的晶体,并且分别为XI和XO引脚对地连接振荡电容。
CH340芯片支持5V电源电压或者3.3V电源电压。
当使用5V工作电压时,CH340芯片的VCC引脚输入外部5V电源,并且V3引脚应该外接容量为4700pF或者0.01uF的电源退耦电容。
当使用3.3V工作电压时,CH340芯片的V3引脚应该与VCC引脚相连接,同时输入外部的3.3V电源,并且与CH340芯片相连接的其它电路的工作电压不能超过3.3V。
CH340自动支持USB设备挂起以节约功耗,NOS#引脚为低电平时将禁止USB设备挂起。
异步串口方式下CH340芯片的引脚包括:
数据传输引脚、MODEM联络信号引脚、辅助引脚。
数据传输引脚包括:
TXD引脚和RXD引脚。
串口输入空闲时,RXD应该为高电平,如果R232引脚为高电平启用辅助RS232功能,那么RXD引脚部自动插入一个反相器,默认为低电平。
串口输出空闲时,CH340T芯片的TXD为高电平,CH340R芯片的TXD为低电平。
2.2.3、单片机系统
使用的是STM8S103F3P6,最小系统原理图如图4。
图4.单片机系统原理图
STM8S是基于8位框架结构的微控制器,其CPU核有6个部寄存器,通过这些寄存器可高效地进行数据处理。
STM8S的指令集支持80条基本语句及20种寻址模式,而且CPU的6个部寄存器都拥有可寻址的地址。
串行外设接口(SPI)允许芯片与其他设备以半/全双工、同步、串行方式通信。
此接口可以被配置成主模式,并为从设备提供通信时钟(SCK)。
接口还能以多主配置方式工作。
它可用于多种用途,包括带或不带第三根双向数据线的双线单工同步传输,还可使用CRC校验来进行可靠通信。
SPI主要特征
●3线全双工同步传输
●带或不带第三根双向数据线的双线单工同步传输
●8或16位传输帧格式选择
●主或从操作
●8个主模式频率(最大为fMASTER/2)
●从模式频率(最大为fPCLK/2)
●快速通信:
最大SPI速度达到10MHz
●主模式和从模式下均可以由软件或硬件进行NSS管理
●可编程的时钟极性和相位
●可编程的数据顺序,MSB在前或LSB在前
●可触发中断的专用发送和接收标志
●SPI总线忙状态标志
●可触发中断的主模式出错和溢出标志
2.2.4、无线模块
直接使用2.4G无线收发模块,简单可靠。
原理图如图5。
图5.无线模块原理图
nRF24L01是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM频段的单片无线收发器芯片。
无线收发器包括:
频率发生器、增强型“SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。
输出功率频道选择和协议的设置可以通过SPI接口进行设置。
几乎可以连接到各种单片机芯片,并完成无线数据传送工作。
其电流消耗极低:
当工作在发射模式下发射功率为0dBm时电流消耗为11.3mA,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
其应用领域有:
●无线鼠标 键盘游戏机操纵杆
●无线门禁
●无线数据通讯
●安防系统
●遥控装置
●遥感勘测
●智能运动设备
●工业传感器
●玩具
2.3、软件设计
系统软件设计首先需完成对各个芯片的初始化设计,接下来其主要工作是数据发送和接收程序。
发送数据时单片机直接通过MOSI端口控制射频器件发送数据,而接收时则要扫描单片机的MISO口,判断是否有待接收的数据,下面具体说明单片机如何实现SPI与NRF24L01的初始化程序,及发送、接收子程序的功能与实现。
2.3.1、SPI初始化程序设计
本无线通信系统几乎所有的数据传输与芯片控制都是通过SPI实现的,SPI读写程序是软件控制的基础。
为了使单片机的SPI控制器正常工作,需要先对其进行初始化设置,这可通过向SPI控制寄存器SPCTL和状态寄存器SPSTAT写入适当的控制字实现。
它们是二个8位的寄存器,其中SPCTL的第2位时钟相位CPHA允许用户设置采样和改变数据的时钟边沿,第3位时钟极性位CPOL允许用户设置时钟极性。
SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。
本系统中,STC12C5A60S2为SPI主设备,IA4421为从设备,且要求SPICLK的极性在空闲时为低电平,用到SPICPOL=0、CPHA=0的这种时序模式,数据在SCK的上升沿时移人到IA4421,并且器件会在SS生效之后的第一个上升沿时等待数据;如果时钟的起始状态是高电平,它在开始传输数据之前将下降以产生第一个上升沿。
2.3.2、发送子程序设计
先要配置无线模块工作在发送状态之下,配置步骤为:
1)写Tx节点的地址TX_ADDR
2)写Rx节点的地址(主要是为了使能AutoAck)RX_ADDR_P0
3)使能AUTOACKEN_AA
4)使能PIPE0EN_RXADDR
5)配置自动重发次数SETUP_RETR
6)选择通信频率RF_CH
7)配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP
8)选择通道0有效数据宽度Rx_Pw_P0
9)配置24L01的基本参数以及切换工作模式CONFIG。
配置完成之后,将需要发送的数据写到相应的寄存器中即可完成发送。
2.3.3、接收子程序设计
先要配置无线模块工作在接收状态之下,配置步骤为:
1)写Rx节点的地址RX_ADDR_P0
2)使能AUTOACKEN_AA
3)使能PIPE0EN_RXADDR
4)选择通信频率RF_CH
5)选择通道0有效数据宽度Rx_Pw_P0
6)配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP
7)配置24L01的基本参数以及切换工作模式CONFIG。
配置完成之后,循环查询相关接收状态的寄存器,当有数据时,读出即可。
2.3.4、上位机程序设计
上位机使用Qt编写,通过计算机输入需要发送的容,软件对将发送的数据进行处理,加入、长度、校验、发送者等信息,通过串口发送给单片机。
同时若单片机给上位机发送信息之后,上位机先校验数据接收是否正确。
若正确,解析出发送者和具体发送信息,在上位机中显示出来即可。
这样,即可完成两个或多个计算机之间的无线通信。
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。
它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObjectCompiler,moc))以及一些宏,易于扩展,允许组件编程。
2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。
2012年,Qt被Digia收购。
2014年4月,跨平台集成开发环境QtCreator3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。
3.实验结果及分析
为了仿真实际的应用情形,将本无线通信系统在一个布满桌椅和电子设备,如电脑、打印机、示波器等的室环境中进行数据通信实验,以确认所述方案的实际应用效能。
将两台电脑相隔数米,插上烧写完程序的模块,打开上位机,设置好串口通信的相关协议,输入要发送的容,点击发送即可在另外一台电脑上接收到发送者的信息和发送的容。
多次进行试验,改变发送者的信息和发送容,多次试验,检验系统的稳定性和可靠性。
试验截图如图6。
图6.试验截图
4.结束语
本文中给出了设计一个单片机控制的无线数据传输系统,该系统使用了超低功耗的STM8S103F3P6单片机和同样是低功耗的无线收发芯片NRF24L01,它们之问的控制与数据连接则是借助SPI接口来实现。
SPI接口具有很高的数据传输速率,且器件操作遵循统一的规,使系统软硬件具有良好的通用性。
以无线方式传输数据在实际应用中由于其方便灵活,可望在嵌入式系统中得到广泛应用。
本实现方案无需复杂的协议与价格较为昂贵的协议支持芯片,可作为嵌人式系统无线数据传输的一种低成本、低功耗选送的一帧数据择方案。
经过实验验证,本系统能在实际应用环境中可靠运行,且在设计时不局限于特定的嵌入式系统,具有较高的通用性,能方便地移植到其他的系统中去,满足无接触数据传输的要求。
5.参考文献
1.平.USB与nRF2401无线通信系统设计[J].单片机开发与应用,2010,26(4):
88-89
2.黄婷,施国梁,黄坤.单片机无线通信系统的设计与实现[J].微处理机,2010,
(1):
27-31
6.致
历时两周的时间终于将这篇报告写完,在报告的写作过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。
尤其要强烈感付老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。
另外,也非常感我的两名队友,有了他们友好的合作,才会有这次顺利完成的课程设计。
感这篇论文所涉及到的各位学者。
本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。
感我的同学和朋友,在我写论文的过程中给予我了很多素材,还在论文的撰写和排版灯过程中提供热情的帮助。
由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!
特此致!
6.附录
6.1、单片机程序
main.c文件
#include"stm8s.h"
#include"sysclock.h"
#include"uart1.h"
#include"led.h"
#include"nRF24L01.h"
#include"communication.h"
#include"timer.h"
u8state=wait_Nrf_Data;//程序状态标志位
intmain(void)
{
u8RxBuf[33];
u16nCount=0;//nCount统计接收数据的组数,len接收数据的总长度
/*设置外部晶振24M为主时钟*/
//SystemClock_Init(HSE_Clock);
/*设置部晶振16M为主时钟*/
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
Uart1_Init();
Tim1_Init();
nRF24L01_Pin_Conf();
__enable_interrupt();//开启总中断
nRF24L01_Set_RxMode();//接收状态
while
(1)
{
if(state==wait_Nrf_Data)
{
if(!
(nRF24L01_RevData(RxBuf)))//接收到数据时
{
nCount++;
check_RevData(RxBuf,nCount);
if(RxBuf[30]==RxBuf[31])
{
nCount=0;
}
}
}
elseif(state==get_Sci_Data)
{
Protocal_Analysis();
}
}
}
Communication.c文件
#include"stm8s.h"
#include"stm8s_tim1.h"
#include"uart1.h"
#include"led.h"
#include"nRF24L01.h"
#include"communication.h"
enumSTATESTATE_NOW=TEST_BEGIN;
externu8state;
unsignedintIn=0,Out=0;//计数
unsignedcharFilePool[400];//串口接收数据缓冲区
unsignedintInstruction_Length=0;//数据长度
unsignedcharcheck=0;//校验位
un