最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

基于单片机的无线网络通信模块设计全解

IT圈 admin 21浏览 0评论

2024年5月7日发(作者:操清怡)

四川师范大学成都学院电子工程学院课程设计报告

前言

无线方案适用于布线繁杂或者不允许布线的场合,目前在遥控遥测、门禁系统、无

线抄表、小区传呼、工业数据采集、无线遥控系统、无线鼠标键盘等应用领域,都采用

了无线方式进行远距离数据传输。目前,蓝牙技术和Zigbee技术已经较为成熟的应用

在无线数据传输领域,形成了相应的标准。然而,这些芯片相对昂贵,同时在应用中,

需要做很多设计和测试工作来确保与标准的兼容性,如果目标应用是点到点的专用链

路,如无线鼠标到键盘,这个代价就显得毫无必要。

本无线数据传输系统采用挪威Nordic公司推出的工作于2.4GHzISM频段的

nRF24L01射频芯片。与蓝牙和Zigbee相比,nRF24L01射频芯片没有复杂的通信协议,

它完全对用户透明,同种产品之间可以自由通信。更重要的是,nRF24L01射频芯片比蓝

牙和Zigbee所用芯片更便宜。系统由单片机STM32F103控制无线数字传输芯片nRF24L01,

通过无线方式进行数据双向远程传输,两端采用全双工方式通信,该系统具有成本低,

功耗低,软件设计简单以及通信可靠等优点。

1

四川师范大学成都学院电子工程学院课程设计报告

1. 总体设计方案

无线通信技术迅速发展,有多种通讯方案可供选择,这里从实用,经济和实现等方

面进行综合的考虑分析,选出合适的设计方案。

1.1 无线通信方式的比较和选择

方案一:采用GSM模块进行通信,GSM模块需要借助移动卫星或者手机卡,虽说能

够远距离传输,但是其成本较大、且需要内置SIM卡,通信过程中需要收费,后期成本

较高。

方案二:采用TI公司CC2430无线通信模块,此模块采用Zigbee总线模式,传输

速率可达250kbps,且内部集成高性能8051内核。但是此模块价格较贵,且Zigbee协

议相对较为复杂。

方案三:采用nRF24L01无线射频模块进行通信,nRF24L01是一款高速低功耗的无

线通信模块。他能传输上千米的距离(加PA),而且价格较便宜,采用SPI总线通信模

式电路简单,操作方便。

考虑到系统的复杂性和程序的复杂度,我们采用方案三作为本系统的通信模块。

1.2 微控制器的比较和选择

方案一:采用传统的AT89S52单片机作为主控芯片。此芯片价格便宜、操作简便,

低功耗,比较经济实惠,但是应用很局限,且要求较高时传统的AT89S52单片机达不到

要求。

方案二:采用TI公司生产的MSP430F149系列单片机作为主控芯片。此单片机是一

款高性能的低功耗的16位单片机,具有非常强大的功能,且内置高速12位ADC。但其

价格比较昂贵,而且是TPFQ贴片封装,不利于焊接,需要PCB制板,大大增加了成本

和开发周期。

方案三:基于ARM公司Cortex-M3内核的STM32F103系列处理器,采用串行单线调

试和JTAG,通过JTAG调试器你可以直接从CPU获取调试信息,从而使产品设计大大简

化,主要应用于要求高性能、低成本、低功耗的产品。

根据系统需要,从性能和价格上综合考虑我们选择方案三,即用STM32F103作为本

系统的主控芯片。

2

四川师范大学成都学院电子工程学院课程设计报告

1.3 串行通信方式比较和选择

RS-485串行通信:该接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性

好。具有多机通信能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。

接口组成的半双工网络,一般只需二根信号线,所以它的接口均采用屏蔽双绞线传输,

数据信号采用差分传输方式。但是由于电脑上没有485接口,所以设计的时候还需要一

个485转232转换器,较为麻烦。

RS-232串行通信:它是无处不在的,每一台PC机都有一个或者更多的接口。在微

控制器中,接口芯片使得将一个5V串口转换成RS-232变的更容易。连接距离可以达到

50到100ft,大多数的外设接口都不会用于太长的距离。对于一个双向选择,只需要3

条导线。一个并行连接器一般需要8条数据线,两条或者更多的控制信号线和几根接地

线。它作为一种标准,与很多设备兼容,目前已经在很多的微机通信接口中广泛的被采

用。所以这里采用该通信方式。

1.4 显示模块方案

方案一:选择主控为ST7920的带字库的LCD12864来显示信息。12864是一款通用

的液晶显示屏,能够显示多数常用的汉字及ASCII码,而且能够绘制图片,描点画线,

设计成比较理想的结果。

方案二:采用2.8寸TFT-LCD显示信息,这款LCD比较通用的字符液晶模块,能显

示字符和数字等信息,且价格便宜,容易控制。

方案三:采用LCD7段数码显示管显示,其成本低,容易显示控制,但不能显示字

符。

综合以上方案,方便我们对信息的观看和理解,我们选择了经济实惠的2.8寸

TFT-LCD显示,可以直接显示数据、字符等。

3

四川师范大学成都学院电子工程学院课程设计报告

2. 单元模块设计

2.1 nRF24L01射频模块电路设计

2.1.1 nRF24L01芯片概述

nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz~2.5 GHz ISM频段。内置

频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst

技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6 dBm的

功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工作

模式(掉电模式和空闲模式)使节能设计更方便。

nRF24L01主要特性如下:

1)2.4GHz全球开放的ISM频段,免许可证使用。

2)最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。

3)125个可选的频道,满足多点通信和调频通信的需要。

4)内置CRC检错和点对多点的通信地址控制。

5)低工作电压(1.9~3.6V)。

6)可设置自动应答,确保数据可靠传输。

2.1.2 引脚功能及描述

nRF24L01的封装及引脚排列如图所示。各引脚功能如下:

图 1 nRF24L01引脚示意图

4

四川师范大学成都学院电子工程学院课程设计报告

CE:使能发射或接收;

CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置nRF24L01;

IRQ:中断标志位;

VDD:电源输入端;

VSS:电源地;

XC2,XC1:晶体振荡器引脚;

VDD_PA:为功率放大器供电,输出为1.8V;

ANT1,ANT2:天线接口;

IREF:参考电流输入。

2.1.3 工作模式

nRF24L01有工作模式有四种:收发模式、配置模式、空闲模式和关机模式。nRF24L01

的工作模式由PWR_UP、CE、TX_EN和CS三个引脚决定,如表。

表格 1 nRF24L01工作模式

工作模式

收发模式

配置模式

空闲模式

关机模式

PWR_YP

CE

CS

收发模式:nRF24L01的收发模式有ShockBurstTM收发模式和直接收发模式两种,

收发模式由器件配置字决定。这里只介绍ShockBurstTM收发模式。

ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送

入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很

高的射频数据发射速率。与射频协议相关的所有高速信号处理都在片内进行,这种做法

有三大好处:

1)尽量节能;

2)低的系统费用(低速微处理器也能进行高速射频发射);

3)数据在空中停留时间短,抗干扰性高。nRF24L01的ShockBurstTM技术同时也

减小了整个系统的平均工作电流。

在ShockBurstTM收发模式下,nRF24L01自动处理字头和CRC校验码。在接收数

据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,

当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。

配置模式:在配置模式,15字节的配置字被送到nRF24L01,这通过CS、CLK1和

5

四川师范大学成都学院电子工程学院课程设计报告

DATA三个引脚完成。

空闲模式:nRF24L01的空闲模式是为了减小平均工作电流而设计,其最大的优点

是,实现节能的同时,缩短芯片的起动时间。在空闲模式下,部分片内晶振仍在工作,

此时的工作电流跟外部晶振的频率有关,如外部晶振为4MHz时工作电流为12uA,外

部晶振为16MHz时工作电流为32uA。在空闲模式下,配置字的内容保持在nRF24L01

片内。

关机模式:在关机模式下,为了得到最小的工作电流,一般此时的工作电流小于

1uA。关机模式下,配置字的内容也会被保持在nRF24L01片内,这是该模式与断电状

态最大的区别。

2.2 STM32F103模块电路

2.2.1 电源电路

由于STM32直接由PC的USB供电,提供5V电源,所以不需要总电源,但nRF24L01

模块需要低于3.5V电压,所以需要3.3V稳压电路,如下:

图 2 3.3V稳压电路

2.2.2 显示模块

2.8寸TFT-LCD与STM32连接原理图,如下:

6

四川师范大学成都学院电子工程学院课程设计报告

图 3LCD原理图

2.2.3按键模块

在课程设计中用到了按键控制发送数据,按键原理图,如下:

图 4 按键连接原理图

2.2.4nRF24L01模块

nRF24L01模块有八个引脚需要连接到STM32,在这里由于用到了SPI1的四个引

脚,直接与PA(4-6)引脚相连,设置GPIO复用功能就直接可用SPI1,无线模块的其他

引脚分别与PA1和PA7相连,这样可以简化电路,如下:

7

四川师范大学成都学院电子工程学院课程设计报告

图 5 nRF24L01原理图

3. 系统功能与软件设计

3.1 系统总结构与流程

系统主要包括两个分别具有收发功能的无线通信模块,每个模块均由STM32F103

和无线收发芯片nRF24L01组成。系统的原理框图如图所示,发送时,单片机通过IO

总线向nRF24L01写人控制命令及所需发送的数据,nRF24L01通过天线发送出去;接

收时,单片机通过IO总线读取nRF24L01的工作状态,获取芯片相关信息及接收到的

数据。两个收发模块之间相互通信,从而实现数据的无线传输。同时接收端将接收到的

数据存储到扩展的片外数据存储器中。

系统结构框图:

图 6整体结构框图

根据功能不同,可以把整个系统分为STM32、nRF24L01无线通信模块、LCD显示模

8

四川师范大学成都学院电子工程学院课程设计报告

块、按键发送模块。

STM32主要功能是控制nRF24L01无线通信和LCD显示,按键中断控制nRF24L01无

线模块发送数据,LCD显示模块显示数据。

当按下按键时,STM32控制LCD显示相应的数字,同时通过nRF24L01将该数字发送

出去,另一个nRF24L01接收到该数字,经由STM32F103显示于LCD上。

系统的工作流程图如下:

图 7系统流程图

3.2 初始化程序的设计

系统在正式工作前,都要进行一些初始化工作。因此在系统启动之初,为了能够让

STM32F103单片机各项功能合理有序的工作,需要进行一系列的初始化配置。本文系统

设计中初始化程序主要包括微处理器STM32F103开发板的初始化程序、串行外设接口

(SPI)的初始化程序、nRF24L01芯片的初始化程序、按键的初始化程序、LCD显示模

块的初始化程序等。其中STM32F103单片机的初始化又包括GPIO口初始化配置、中断

初始化配置等。

9

四川师范大学成都学院电子工程学院课程设计报告

3.2.1 SPI的初始化配置

STM32F103的串行SPI接口置配置时,设SPI为主,串行时钟在SCK脚产生。配置

程序软件及步骤如下:

1.配置nRF24L01的MOSI、MISO输入输出线和SCLK时钟线分别同CPU的SPI对应

的外设线相连接,即SPI1与SCK(PA5/SPI1_SCK)、MISO(PA6/SPI1_MISO)、MOSI

(PA7/SPI1_MOSI)、NSS(PA4/SPI1_NSS)相连接。

2.通过SPI_CR1寄存器的BR位定义串行时钟波特率分频值为16。

3.选择CPOL和CPHA位,定义数据传输和串行时钟的相位关系,选择了串行时钟的

稳态,时钟悬空低电平,数据捕获于第一个时钟沿。

4.设置DRR位来定义为8位。

5.配置SPI_CR1寄存器的LSBFIRST位定义帧格式。

6.如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输器件应把NSS

脚连接到高电平;在软件模式中,需设置SPI_CR1寄存器的SSM和SSI位,如果NSS引

脚工作在输出模式,则只需设置SSOE位。

7.设置MSTR和SPE位在这个配置中,MOSI脚是数据输出,而MISO脚是数据输入。

SPI串行口初始化流程图如3-5所示:

10

四川师范大学成都学院电子工程学院课程设计报告

图 8 SPI初始化

3.2.2NVIC中断向量及EXTI外部中断配置

为了能让系统程序的执行效率更高,所以必须尽量使用STM32F103的中断响应函数

来取代传统的循环判断方式。STM32F103中断配置以抢占优先级与响应优先级这两项为

主要参数,抢占优先级代表了中断的嵌套关系,抢占优先级较高(数值较小)的中断能

够在优先级较低的中断里面嵌套执行。响应优先级表示了当中断同时发生的时候

STM32F103响应的顺序,数值较小的中断优先响应。

配置EXTI外部中断,EXTI_line0对应按键PA0,当按键按下触发中断,进入中断

服务函数,延时消抖后清除中断标志位,开启片选后在服务函数中调用nRF24L01发送

程序关闭片选。

11

四川师范大学成都学院电子工程学院课程设计报告

图 9 按键及中断配置

3.2.3 nRF24L01工作模式配置及接收函数

当使用nRF24L01时需要对其接收或者发送模式进行配置,首先调用初始化SPI函

数,然后配置寄存器使芯片工作于发送模式后拉高CE端至少10us,读状态寄存器

STATUS,判断是否是发送完成标志位置位,清标志,清数据缓冲。工作模式配置可以

参考数据手册在表1可以得到。配置过程如图:

12

四川师范大学成都学院电子工程学院课程设计报告

图 10 工作模式配置及接收函数

3.2.4 LCD初始化配置

LCD初始化直接调用库函数,经过初始化LCD,设置背景颜色和设置字体颜色,

过程非常简单,这里不做过多说明。

4. 设计总结

在本次无线通信应用系统设计中我收获了不少。在之前我都是学习了书本上

的东西,而很少将其应用到实际中去,虽然之前我也做过一些课程设计,但这次的课程

设计更加从实。我从选取题目,画原理图到购买元器件再到焊接电路还有后面的调试测

试工作我都一一的亲身经历并学到了不少课本上学不到的东西。以前我学习课本上的知

识,觉得要将其应用到实际中会是一件较为轻松的事,也看其他人做的东西很有意义,

13

四川师范大学成都学院电子工程学院课程设计报告

但我自己实际去设计制作时,才发现了要做好一个作品是那么的不容易,自己去做时,

才发现自己的种种不足,动起手来是那么的笨拙。老师常常给我们讲动手能力对我们学

习电子的同学有多么重要,因此我也都一直想着要提高自己的动手能力,这次课程设计

对我来说是一次难的机会,对于我提高自己的动手能力有很大的帮助。我不仅学到了怎

样去改进、优化、美化电路布局,也掌握更多调试、测试电路的方法,也学到了不少怎

样去选取合适的元器件的方法。在以后的学习工作做,我要不断的提高自己的动手能力,

就要不断亲身去设计、自作实际的东西,这样才不会被时代所淘汰成为对社会有用的人。

5. 参考文献

[1] 赵亮、候国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003年9月.

[2] 海创.无线收发模块nRF24L01开发包资料[J].海创电子科技,2010年.P99—P121.

[3] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2010年11月

[4] 康华光.电子技术基础模拟部分(第五版)[M].北京:高等教育出版社,2010年.

[5] 康华光.电子技术基础数字部分(第五版)[M].北京:高等教育出版社,2010年.

[6] 谢自美.电子线路设计.实验.测试[M].武汉:华中科技大学出版社,2009年7月.

[7] 赵海,赵杰,刘铮等.一种无线传感器网络节点的设计与实现[J].东北大学学报:自

然科学版,2009年.P809—P812.

[8] 王秀梅.低功耗2.4GHz无线通信分系统的设计与实现[J].中国数据通信,2004

年.P57—P61.

[9] 李文忠,段朝玉.短距离无线数据通信[M].北京:北京航空航天大学出版社,2006

年.P178—P187.

14

四川师范大学成都学院电子工程学院课程设计报告

附录

程序附录1按键配置

void key_int(void)

{

/*******************gpio*******************/

GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

GPIO__Pin = GPIO_Pin_0 | GPIO_Pin_8;

GPIO__Speed = GPIO_Speed_50MHz;

GPIO__Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/*******************NVIC*******************/

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC__IRQChannel = EXTI0_IRQn;

NVIC__IRQChannelPreemptionPriority = 0;

NVIC__IRQChannelSubPriority = 0;

NVIC__IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC__IRQChannel = EXTI9_5_IRQn;

NVIC__IRQChannelPreemptionPriority = 0;

NVIC__IRQChannelSubPriority = 1;

NVIC__IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/*******************EXTI*******************/

15

四川师范大学成都学院电子工程学院课程设计报告

EXTI__Line = EXTI_Line0;

EXTI__Mode = EXTI_Mode_Interrupt;

EXTI__Trigger = EXTI_Trigger_Falling;

EXTI__LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

EXTI__Line = EXTI_Line8;

EXTI__Mode = EXTI_Mode_Interrupt;

EXTI__Trigger = EXTI_Trigger_Falling;

EXTI__LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

程序附录2spi初始化

void GPIO_SEG(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStructure;

RCC_PCLK2Config(RCC_HCLK_Div2);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1|RCC_APB2Perip

h_AFIO,ENABLE);//¿ªÆô¸´Óù¦ÄÜ

SPI_Cmd(SPI1, DISABLE); //±ØÐëÏȽûÄÜ,²ÅÄܸıäMODE

GPIO__Pin = GPIO_Pin_5 | GPIO_Pin_7;//5clk,7mosi

GPIO__Speed = GPIO_Speed_50MHz;

GPIO__Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_6;//miso

GPIO__Mode = GPIO_Mode_IN_FLOATING;

16

四川师范大学成都学院电子工程学院课程设计报告

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_4; //NSS

GPIO__Speed = GPIO_Speed_10MHz;

GPIO__Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_2 | GPIO_Pin_3;//2CE,3CS

GPIO__Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_1;// IRQ

GPIO__Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

SPI__Direction = SPI_Direction_2Lines_FullDuplex;//Ñ¡ÔñÈ«Ë«¹¤

SPI__Mode = SPI_Mode_Master;

SPI__DataSize = SPI_DataSize_8b;

SPI__CPOL = SPI_CPOL_Low;

SPI__CPHA = SPI_CPHA_1Edge;

SPI__NSS = SPI_NSS_Soft;

SPI__BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI__FirstBit = SPI_FirstBit_MSB;

SPI__CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);

}

SPI_Cmd(SPI1, ENABLE);

GPIO_ResetBits(GPIOA,GPIO_Pin_2);//ʹÄÜ 24L01

GPIO_SetBits(GPIOA,GPIO_Pin_3);//SPIƬѡȡÏû

17

四川师范大学成都学院电子工程学院课程设计报告

附录3 lcd显示

void lcd_int(void)

{

}

STM3210B_LCD_Init();

LCD_SetTextColor(Black);

LCD_SetBackColor(Cyan);

LCD_Clear(Cyan);

LCD_DisplayStringLine(Line0,"2.4Ghz test");

图 11 lcd显示图

18

2024年5月7日发(作者:操清怡)

四川师范大学成都学院电子工程学院课程设计报告

前言

无线方案适用于布线繁杂或者不允许布线的场合,目前在遥控遥测、门禁系统、无

线抄表、小区传呼、工业数据采集、无线遥控系统、无线鼠标键盘等应用领域,都采用

了无线方式进行远距离数据传输。目前,蓝牙技术和Zigbee技术已经较为成熟的应用

在无线数据传输领域,形成了相应的标准。然而,这些芯片相对昂贵,同时在应用中,

需要做很多设计和测试工作来确保与标准的兼容性,如果目标应用是点到点的专用链

路,如无线鼠标到键盘,这个代价就显得毫无必要。

本无线数据传输系统采用挪威Nordic公司推出的工作于2.4GHzISM频段的

nRF24L01射频芯片。与蓝牙和Zigbee相比,nRF24L01射频芯片没有复杂的通信协议,

它完全对用户透明,同种产品之间可以自由通信。更重要的是,nRF24L01射频芯片比蓝

牙和Zigbee所用芯片更便宜。系统由单片机STM32F103控制无线数字传输芯片nRF24L01,

通过无线方式进行数据双向远程传输,两端采用全双工方式通信,该系统具有成本低,

功耗低,软件设计简单以及通信可靠等优点。

1

四川师范大学成都学院电子工程学院课程设计报告

1. 总体设计方案

无线通信技术迅速发展,有多种通讯方案可供选择,这里从实用,经济和实现等方

面进行综合的考虑分析,选出合适的设计方案。

1.1 无线通信方式的比较和选择

方案一:采用GSM模块进行通信,GSM模块需要借助移动卫星或者手机卡,虽说能

够远距离传输,但是其成本较大、且需要内置SIM卡,通信过程中需要收费,后期成本

较高。

方案二:采用TI公司CC2430无线通信模块,此模块采用Zigbee总线模式,传输

速率可达250kbps,且内部集成高性能8051内核。但是此模块价格较贵,且Zigbee协

议相对较为复杂。

方案三:采用nRF24L01无线射频模块进行通信,nRF24L01是一款高速低功耗的无

线通信模块。他能传输上千米的距离(加PA),而且价格较便宜,采用SPI总线通信模

式电路简单,操作方便。

考虑到系统的复杂性和程序的复杂度,我们采用方案三作为本系统的通信模块。

1.2 微控制器的比较和选择

方案一:采用传统的AT89S52单片机作为主控芯片。此芯片价格便宜、操作简便,

低功耗,比较经济实惠,但是应用很局限,且要求较高时传统的AT89S52单片机达不到

要求。

方案二:采用TI公司生产的MSP430F149系列单片机作为主控芯片。此单片机是一

款高性能的低功耗的16位单片机,具有非常强大的功能,且内置高速12位ADC。但其

价格比较昂贵,而且是TPFQ贴片封装,不利于焊接,需要PCB制板,大大增加了成本

和开发周期。

方案三:基于ARM公司Cortex-M3内核的STM32F103系列处理器,采用串行单线调

试和JTAG,通过JTAG调试器你可以直接从CPU获取调试信息,从而使产品设计大大简

化,主要应用于要求高性能、低成本、低功耗的产品。

根据系统需要,从性能和价格上综合考虑我们选择方案三,即用STM32F103作为本

系统的主控芯片。

2

四川师范大学成都学院电子工程学院课程设计报告

1.3 串行通信方式比较和选择

RS-485串行通信:该接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性

好。具有多机通信能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。

接口组成的半双工网络,一般只需二根信号线,所以它的接口均采用屏蔽双绞线传输,

数据信号采用差分传输方式。但是由于电脑上没有485接口,所以设计的时候还需要一

个485转232转换器,较为麻烦。

RS-232串行通信:它是无处不在的,每一台PC机都有一个或者更多的接口。在微

控制器中,接口芯片使得将一个5V串口转换成RS-232变的更容易。连接距离可以达到

50到100ft,大多数的外设接口都不会用于太长的距离。对于一个双向选择,只需要3

条导线。一个并行连接器一般需要8条数据线,两条或者更多的控制信号线和几根接地

线。它作为一种标准,与很多设备兼容,目前已经在很多的微机通信接口中广泛的被采

用。所以这里采用该通信方式。

1.4 显示模块方案

方案一:选择主控为ST7920的带字库的LCD12864来显示信息。12864是一款通用

的液晶显示屏,能够显示多数常用的汉字及ASCII码,而且能够绘制图片,描点画线,

设计成比较理想的结果。

方案二:采用2.8寸TFT-LCD显示信息,这款LCD比较通用的字符液晶模块,能显

示字符和数字等信息,且价格便宜,容易控制。

方案三:采用LCD7段数码显示管显示,其成本低,容易显示控制,但不能显示字

符。

综合以上方案,方便我们对信息的观看和理解,我们选择了经济实惠的2.8寸

TFT-LCD显示,可以直接显示数据、字符等。

3

四川师范大学成都学院电子工程学院课程设计报告

2. 单元模块设计

2.1 nRF24L01射频模块电路设计

2.1.1 nRF24L01芯片概述

nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz~2.5 GHz ISM频段。内置

频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst

技术,其中输出功率和通信频道可通过程序进行配置。nRF24L01功耗低,在以-6 dBm的

功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工作

模式(掉电模式和空闲模式)使节能设计更方便。

nRF24L01主要特性如下:

1)2.4GHz全球开放的ISM频段,免许可证使用。

2)最高工作速率2Mbps,高校的GFSK调制,抗干扰能力强。

3)125个可选的频道,满足多点通信和调频通信的需要。

4)内置CRC检错和点对多点的通信地址控制。

5)低工作电压(1.9~3.6V)。

6)可设置自动应答,确保数据可靠传输。

2.1.2 引脚功能及描述

nRF24L01的封装及引脚排列如图所示。各引脚功能如下:

图 1 nRF24L01引脚示意图

4

四川师范大学成都学院电子工程学院课程设计报告

CE:使能发射或接收;

CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置nRF24L01;

IRQ:中断标志位;

VDD:电源输入端;

VSS:电源地;

XC2,XC1:晶体振荡器引脚;

VDD_PA:为功率放大器供电,输出为1.8V;

ANT1,ANT2:天线接口;

IREF:参考电流输入。

2.1.3 工作模式

nRF24L01有工作模式有四种:收发模式、配置模式、空闲模式和关机模式。nRF24L01

的工作模式由PWR_UP、CE、TX_EN和CS三个引脚决定,如表。

表格 1 nRF24L01工作模式

工作模式

收发模式

配置模式

空闲模式

关机模式

PWR_YP

CE

CS

收发模式:nRF24L01的收发模式有ShockBurstTM收发模式和直接收发模式两种,

收发模式由器件配置字决定。这里只介绍ShockBurstTM收发模式。

ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送

入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很

高的射频数据发射速率。与射频协议相关的所有高速信号处理都在片内进行,这种做法

有三大好处:

1)尽量节能;

2)低的系统费用(低速微处理器也能进行高速射频发射);

3)数据在空中停留时间短,抗干扰性高。nRF24L01的ShockBurstTM技术同时也

减小了整个系统的平均工作电流。

在ShockBurstTM收发模式下,nRF24L01自动处理字头和CRC校验码。在接收数

据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,

当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。

配置模式:在配置模式,15字节的配置字被送到nRF24L01,这通过CS、CLK1和

5

四川师范大学成都学院电子工程学院课程设计报告

DATA三个引脚完成。

空闲模式:nRF24L01的空闲模式是为了减小平均工作电流而设计,其最大的优点

是,实现节能的同时,缩短芯片的起动时间。在空闲模式下,部分片内晶振仍在工作,

此时的工作电流跟外部晶振的频率有关,如外部晶振为4MHz时工作电流为12uA,外

部晶振为16MHz时工作电流为32uA。在空闲模式下,配置字的内容保持在nRF24L01

片内。

关机模式:在关机模式下,为了得到最小的工作电流,一般此时的工作电流小于

1uA。关机模式下,配置字的内容也会被保持在nRF24L01片内,这是该模式与断电状

态最大的区别。

2.2 STM32F103模块电路

2.2.1 电源电路

由于STM32直接由PC的USB供电,提供5V电源,所以不需要总电源,但nRF24L01

模块需要低于3.5V电压,所以需要3.3V稳压电路,如下:

图 2 3.3V稳压电路

2.2.2 显示模块

2.8寸TFT-LCD与STM32连接原理图,如下:

6

四川师范大学成都学院电子工程学院课程设计报告

图 3LCD原理图

2.2.3按键模块

在课程设计中用到了按键控制发送数据,按键原理图,如下:

图 4 按键连接原理图

2.2.4nRF24L01模块

nRF24L01模块有八个引脚需要连接到STM32,在这里由于用到了SPI1的四个引

脚,直接与PA(4-6)引脚相连,设置GPIO复用功能就直接可用SPI1,无线模块的其他

引脚分别与PA1和PA7相连,这样可以简化电路,如下:

7

四川师范大学成都学院电子工程学院课程设计报告

图 5 nRF24L01原理图

3. 系统功能与软件设计

3.1 系统总结构与流程

系统主要包括两个分别具有收发功能的无线通信模块,每个模块均由STM32F103

和无线收发芯片nRF24L01组成。系统的原理框图如图所示,发送时,单片机通过IO

总线向nRF24L01写人控制命令及所需发送的数据,nRF24L01通过天线发送出去;接

收时,单片机通过IO总线读取nRF24L01的工作状态,获取芯片相关信息及接收到的

数据。两个收发模块之间相互通信,从而实现数据的无线传输。同时接收端将接收到的

数据存储到扩展的片外数据存储器中。

系统结构框图:

图 6整体结构框图

根据功能不同,可以把整个系统分为STM32、nRF24L01无线通信模块、LCD显示模

8

四川师范大学成都学院电子工程学院课程设计报告

块、按键发送模块。

STM32主要功能是控制nRF24L01无线通信和LCD显示,按键中断控制nRF24L01无

线模块发送数据,LCD显示模块显示数据。

当按下按键时,STM32控制LCD显示相应的数字,同时通过nRF24L01将该数字发送

出去,另一个nRF24L01接收到该数字,经由STM32F103显示于LCD上。

系统的工作流程图如下:

图 7系统流程图

3.2 初始化程序的设计

系统在正式工作前,都要进行一些初始化工作。因此在系统启动之初,为了能够让

STM32F103单片机各项功能合理有序的工作,需要进行一系列的初始化配置。本文系统

设计中初始化程序主要包括微处理器STM32F103开发板的初始化程序、串行外设接口

(SPI)的初始化程序、nRF24L01芯片的初始化程序、按键的初始化程序、LCD显示模

块的初始化程序等。其中STM32F103单片机的初始化又包括GPIO口初始化配置、中断

初始化配置等。

9

四川师范大学成都学院电子工程学院课程设计报告

3.2.1 SPI的初始化配置

STM32F103的串行SPI接口置配置时,设SPI为主,串行时钟在SCK脚产生。配置

程序软件及步骤如下:

1.配置nRF24L01的MOSI、MISO输入输出线和SCLK时钟线分别同CPU的SPI对应

的外设线相连接,即SPI1与SCK(PA5/SPI1_SCK)、MISO(PA6/SPI1_MISO)、MOSI

(PA7/SPI1_MOSI)、NSS(PA4/SPI1_NSS)相连接。

2.通过SPI_CR1寄存器的BR位定义串行时钟波特率分频值为16。

3.选择CPOL和CPHA位,定义数据传输和串行时钟的相位关系,选择了串行时钟的

稳态,时钟悬空低电平,数据捕获于第一个时钟沿。

4.设置DRR位来定义为8位。

5.配置SPI_CR1寄存器的LSBFIRST位定义帧格式。

6.如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输器件应把NSS

脚连接到高电平;在软件模式中,需设置SPI_CR1寄存器的SSM和SSI位,如果NSS引

脚工作在输出模式,则只需设置SSOE位。

7.设置MSTR和SPE位在这个配置中,MOSI脚是数据输出,而MISO脚是数据输入。

SPI串行口初始化流程图如3-5所示:

10

四川师范大学成都学院电子工程学院课程设计报告

图 8 SPI初始化

3.2.2NVIC中断向量及EXTI外部中断配置

为了能让系统程序的执行效率更高,所以必须尽量使用STM32F103的中断响应函数

来取代传统的循环判断方式。STM32F103中断配置以抢占优先级与响应优先级这两项为

主要参数,抢占优先级代表了中断的嵌套关系,抢占优先级较高(数值较小)的中断能

够在优先级较低的中断里面嵌套执行。响应优先级表示了当中断同时发生的时候

STM32F103响应的顺序,数值较小的中断优先响应。

配置EXTI外部中断,EXTI_line0对应按键PA0,当按键按下触发中断,进入中断

服务函数,延时消抖后清除中断标志位,开启片选后在服务函数中调用nRF24L01发送

程序关闭片选。

11

四川师范大学成都学院电子工程学院课程设计报告

图 9 按键及中断配置

3.2.3 nRF24L01工作模式配置及接收函数

当使用nRF24L01时需要对其接收或者发送模式进行配置,首先调用初始化SPI函

数,然后配置寄存器使芯片工作于发送模式后拉高CE端至少10us,读状态寄存器

STATUS,判断是否是发送完成标志位置位,清标志,清数据缓冲。工作模式配置可以

参考数据手册在表1可以得到。配置过程如图:

12

四川师范大学成都学院电子工程学院课程设计报告

图 10 工作模式配置及接收函数

3.2.4 LCD初始化配置

LCD初始化直接调用库函数,经过初始化LCD,设置背景颜色和设置字体颜色,

过程非常简单,这里不做过多说明。

4. 设计总结

在本次无线通信应用系统设计中我收获了不少。在之前我都是学习了书本上

的东西,而很少将其应用到实际中去,虽然之前我也做过一些课程设计,但这次的课程

设计更加从实。我从选取题目,画原理图到购买元器件再到焊接电路还有后面的调试测

试工作我都一一的亲身经历并学到了不少课本上学不到的东西。以前我学习课本上的知

识,觉得要将其应用到实际中会是一件较为轻松的事,也看其他人做的东西很有意义,

13

四川师范大学成都学院电子工程学院课程设计报告

但我自己实际去设计制作时,才发现了要做好一个作品是那么的不容易,自己去做时,

才发现自己的种种不足,动起手来是那么的笨拙。老师常常给我们讲动手能力对我们学

习电子的同学有多么重要,因此我也都一直想着要提高自己的动手能力,这次课程设计

对我来说是一次难的机会,对于我提高自己的动手能力有很大的帮助。我不仅学到了怎

样去改进、优化、美化电路布局,也掌握更多调试、测试电路的方法,也学到了不少怎

样去选取合适的元器件的方法。在以后的学习工作做,我要不断的提高自己的动手能力,

就要不断亲身去设计、自作实际的东西,这样才不会被时代所淘汰成为对社会有用的人。

5. 参考文献

[1] 赵亮、候国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003年9月.

[2] 海创.无线收发模块nRF24L01开发包资料[J].海创电子科技,2010年.P99—P121.

[3] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2010年11月

[4] 康华光.电子技术基础模拟部分(第五版)[M].北京:高等教育出版社,2010年.

[5] 康华光.电子技术基础数字部分(第五版)[M].北京:高等教育出版社,2010年.

[6] 谢自美.电子线路设计.实验.测试[M].武汉:华中科技大学出版社,2009年7月.

[7] 赵海,赵杰,刘铮等.一种无线传感器网络节点的设计与实现[J].东北大学学报:自

然科学版,2009年.P809—P812.

[8] 王秀梅.低功耗2.4GHz无线通信分系统的设计与实现[J].中国数据通信,2004

年.P57—P61.

[9] 李文忠,段朝玉.短距离无线数据通信[M].北京:北京航空航天大学出版社,2006

年.P178—P187.

14

四川师范大学成都学院电子工程学院课程设计报告

附录

程序附录1按键配置

void key_int(void)

{

/*******************gpio*******************/

GPIO_InitTypeDef GPIO_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

GPIO__Pin = GPIO_Pin_0 | GPIO_Pin_8;

GPIO__Speed = GPIO_Speed_50MHz;

GPIO__Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/*******************NVIC*******************/

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC__IRQChannel = EXTI0_IRQn;

NVIC__IRQChannelPreemptionPriority = 0;

NVIC__IRQChannelSubPriority = 0;

NVIC__IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

NVIC__IRQChannel = EXTI9_5_IRQn;

NVIC__IRQChannelPreemptionPriority = 0;

NVIC__IRQChannelSubPriority = 1;

NVIC__IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/*******************EXTI*******************/

15

四川师范大学成都学院电子工程学院课程设计报告

EXTI__Line = EXTI_Line0;

EXTI__Mode = EXTI_Mode_Interrupt;

EXTI__Trigger = EXTI_Trigger_Falling;

EXTI__LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

EXTI__Line = EXTI_Line8;

EXTI__Mode = EXTI_Mode_Interrupt;

EXTI__Trigger = EXTI_Trigger_Falling;

EXTI__LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

}

程序附录2spi初始化

void GPIO_SEG(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStructure;

RCC_PCLK2Config(RCC_HCLK_Div2);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1|RCC_APB2Perip

h_AFIO,ENABLE);//¿ªÆô¸´Óù¦ÄÜ

SPI_Cmd(SPI1, DISABLE); //±ØÐëÏȽûÄÜ,²ÅÄܸıäMODE

GPIO__Pin = GPIO_Pin_5 | GPIO_Pin_7;//5clk,7mosi

GPIO__Speed = GPIO_Speed_50MHz;

GPIO__Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_6;//miso

GPIO__Mode = GPIO_Mode_IN_FLOATING;

16

四川师范大学成都学院电子工程学院课程设计报告

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_4; //NSS

GPIO__Speed = GPIO_Speed_10MHz;

GPIO__Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_2 | GPIO_Pin_3;//2CE,3CS

GPIO__Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO__Pin = GPIO_Pin_1;// IRQ

GPIO__Mode = GPIO_Mode_IPD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

SPI__Direction = SPI_Direction_2Lines_FullDuplex;//Ñ¡ÔñÈ«Ë«¹¤

SPI__Mode = SPI_Mode_Master;

SPI__DataSize = SPI_DataSize_8b;

SPI__CPOL = SPI_CPOL_Low;

SPI__CPHA = SPI_CPHA_1Edge;

SPI__NSS = SPI_NSS_Soft;

SPI__BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI__FirstBit = SPI_FirstBit_MSB;

SPI__CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);

}

SPI_Cmd(SPI1, ENABLE);

GPIO_ResetBits(GPIOA,GPIO_Pin_2);//ʹÄÜ 24L01

GPIO_SetBits(GPIOA,GPIO_Pin_3);//SPIƬѡȡÏû

17

四川师范大学成都学院电子工程学院课程设计报告

附录3 lcd显示

void lcd_int(void)

{

}

STM3210B_LCD_Init();

LCD_SetTextColor(Black);

LCD_SetBackColor(Cyan);

LCD_Clear(Cyan);

LCD_DisplayStringLine(Line0,"2.4Ghz test");

图 11 lcd显示图

18

发布评论

评论列表 (0)

  1. 暂无评论