基于单片机的无线射频收发系统(完整资料).doc
- 格式:doc
- 大小:381.00 KB
- 文档页数:44
基于 51 单片机的无线数据收发系统设计摘要:系统使用 51 单片机通过NRF24L01 模块远程传输数据,接收端通过NRF24L01 模块接收无线数据。
处理后由液晶进行数据显示,可根据需要设置声音提示。
系统接收与发送端模块均单片机、无线发送模块/ 接收、显示、声音提示模块。
关键词:51 单片机;NRF24L01;液晶显示;无线通讯1硬件设计1.1系统组成该系统将数据经过控制器由无线发送模块进行远距离发送,再通过接收端进行无线数据接收。
接收的数据经控制器处理后由液晶显示器显示,并根据需要可以实现一定的声音提示。
1.2无线收发模块本设计使用无线通讯技术实现数据的传送,能够实现此功能的硬件电路模块总类较多。
为符合设计需求,采用以NRF24L01 为核心的无线通讯模块。
该方案可以使系统具有低成本,低功耗,体积小等特点。
NRF24L01 无线模块出至 NORDIC 公司。
其工作频段在 2.4G— 5GHz,该模块正常工作电压为 1.9V—3.6V,内部具有 FSK 调制功能,集成了 NORDIC 公司自创的增强短脉冲协议。
该模块最多可实现 1 对 6 的数据发送与接收。
其每秒最高可传输两兆比特,能够实现地址检验及循环冗余检验。
若使用 SPI 接口,其每秒最高可传输八兆比特,多达 128 个可选工作频道,将该芯片的最小系统集成后,构成NRF24L01 无线通信模块。
1、引脚功能此模块有 6 个数据传输和控制引脚,采用 SPI 传输方式,实现全双工串口通讯,其中 CE脚为芯片模式控制线,工作情况下,CE 端协配合寄存器来决定模块的工作状态。
当4 脚电平为低时,模块开始工作。
数据写入的控制时钟由第 5 脚输入,数据写入与输出分别为 6、7 脚,中断信号放在了第 8 脚。
2、电器特性NRF24L01 采用全球广泛使用的 2.4Ghz 频率,传输速率可达 2Mbps,一次数据传输宽度可达 32 字节,其传输距离空旷地带可达2000M 此模块增强版空旷地带传输距离可达 5000M—6000M, 因内部具有 6 个数据通道,可实现 1 对 6 数据发送,还可实现 6 对 1 数据接收,其工作电压为 1.9V-3.6V,当没有数据传输时可进入低功耗模式运行,微控制器对其控制时可对数据控制引脚输入 5V 电平信号,可实现 GFSK 调制。
基于stm32的无线收发系统1. 引言1.1 研究背景研究背景:目前,随着物联网技术的快速发展和智能化需求的不断增加,无线收发系统在各个领域中的应用日益广泛。
在无线传输技术方面,基于stm32的无线收发系统以其高性能、低功耗和灵活性等优势受到了广泛关注。
传统的有线通信系统受限于布线和传输距离等问题,无法满足现代社会对高效通信的需求。
而无线收发系统则可以实现远距离、灵活布局和便捷通信,为各种智能设备和系统提供了更多可能性。
基于stm32的无线收发系统结合了微控制器和无线通信模块的功能,可以实现双向通信和数据传输。
通过合理选择芯片型号和通信模块,设计出性能稳定、功耗低、成本合理的无线收发系统,可以广泛应用于智能家居、工业控制、智能农业等领域。
研究基于stm32的无线收发系统的设计与实现具有重要的意义和实用价值。
本文旨在探讨基于stm32的无线收发系统的设计及应用前景,为相关领域的研究和应用提供参考和指导。
1.2 研究目的研究目的是通过基于STM32的无线收发系统设计与实现,实现更加稳定、可靠的无线通信。
当前的无线通信系统在一些特定环境下存在信号干扰、通信距离有限等问题,为了解决这些问题,本研究旨在利用STM32芯片的强大处理能力和丰富的外设资源,设计并实现一套高性能的无线数据传输系统。
通过对无线通信模块的选择与参数设置,优化系统性能,提高系统的连通性和稳定性。
通过此研究,希望能够为无线通信领域的发展提供一定的技术支持和参考,推动无线通信技术的进步与应用。
通过研究目的的实现,将为各个领域提供更加便捷和高效的无线通信方案,促进科技的发展和社会的进步。
1.3 研究意义研究基于stm32的无线收发系统,可以深入探讨stm32芯片在无线通信领域的应用潜力,提高stm32芯片的使用效率和性能。
通过研究无线通信模块的选型与参数设置,可以优化系统的通信效果和稳定性。
系统硬件设计与连接、系统软件设计与通信协议的研究,可以为实现高效、稳定的无线通信系统提供技术支撑。
科信学院CDIO二级项目设计说明书(2013/2014学年第一学期)题目:无线数据传输系统设计专业班级:通信工程1022学生姓名:指导教师:贾少瑞设计周数 : 1 周设计成绩:2014年1月9日目录1 引言 (1)2 总体设计方案 (1)3 设计组成及原理分析 (2)3.1 315M发射模块电路图 (2)13.2 315MHZ超再生接收模块 (3)3.3 单片机主控电路 (6)4 程序及原理图 (8)4.1 程序 (8)4.1.1发射程序 (8)4.1.2 接收程序 (11)4.2 原理图 ............................................................................................ 错误!未定义书签。
5 设计内容及结论 (14)6 设计中遇到的问题 (14)7 结束语 (14)8 参考文献 (14)1 引言现代通信技术的迅速发展使得许多应用领域都采用无线的通信方式进行数据传输。
F05/J04收发模块,由于具有体积小、功耗低、功能强、成本低等特点,广泛应用于各类的无线遥控器、无线报警器以及玩具等其他小型电器装置。
但是,这种电路极少用在多个字节数据的通信方面,具有一定的局限性。
本文主要介绍利用315 MHz高频发射模块和接收模块来制作无线通信。
2 总体设计方案首先,用PT2262芯片组成无线发射装置,用四个按键连接编码芯片,作为发射数据。
数据发射头采用315MHZ无线发射头。
PT2272模块的315MHZ无线接收其数据。
其次,用PT2272芯片组成无线接收装置,四位数据输出连接单片机P2口作为单片机输入。
单片机与液晶显示器相连。
8位键盘模块与PT2272数据输出脚相连,当PT2272数据输出到液晶显示器显示后,想让PT2272的数据输出端停止发送数据,按下键盘及可使其停止显示。
8位指示灯模块与单片机相连,当有键按下时对应的指示灯亮。
收稿日期:2008-08-05作者简介:黄丽军(1971-),女,福建莆田人,福建广播电视大学理工系讲师。
一、引言随着无线通信技术的发展,无线数据的采集与传输的应用领域在不断的扩大。
在工业测控方面,有些测量点比较分散使得有线线路的铺设及维护均需较高的代价;或者对于运动构件上的传感器信号的采集,使得有线传输数据不可靠、甚至不可能,因此采用无线数据传送技术进行数据通信是现代测控数传系统的发展趋势。
应用无线收发模块的短距离无线通信以其特有的抗干扰能力强、可靠性高、安全性好、受地理条件限制少、安装施工简便灵活等特点,在许多领域都有着广阔的应用前景。
本文旨在设计一个基于51单片机和RF 的短距离无线数传系统。
为了达到系统要求,本文主控芯片选择Atmel 公司的AT89LV51,实现对无线射频模块数据传输的控制。
由于无线收发芯片的厂商和种类比较多,考虑到功耗、灵敏度、抗干扰能力、传输速度等参数,经过对各个厂家的无线收发芯片进行评估,最终选用Nordic 公司的nRF401射频收发芯片,通过在国际通用的ISM 频段实现数据的短距离无线传输。
二、无线数传系统硬件组成本系统的工作原理是:首先通过传感器将现场各采集点信号转换为电信号,经过模/数转换器ADC 的采样、量化、编码后转换成数字信号,送到51单片机内进行初步处理,再通过nRF401无线数据传输芯片以无线方式将有效数据发送给主控制计算机的接收端,通过nRF401芯片接收到有效数据传递到51单片机,再控制单片机的串行口将数据送入上位计算机,上位机采用以VB 语言编写的控制程序完成数据显示以及对有效数据的进一步处理的任务。
为了满足安全可靠,有足够抗干扰能力,经济合理,方便使用的设计要求,采用了模块化设计思想。
在整个模块化设计中,模块与模块之间的结构如图2-1所示:图2-1无线数传系统组成框图摘要:本文详细介绍了基于AT89LV51单片机和nRF401射频芯片实现的测控系统中多个采集点的数据采集和无线数据传送系统的硬件和软件实现方案。
基于51单片机驱动SI4432无线模块收发C语言程序#include <reg52.h>#include <ABSACC.h>#include <intrins.h>#include <stdio.h>//----------------------------------RF4432配置口定义--------------------------------------- //sbit RF4432_PAC=P2^4; //收发模式切换控制端sbit RF4432_SDO=P3^5; //SPI数据输出sbit RF4432_SDI=P3^4; //SPI数据输入sbit RF4432_SCLK=P3^7; //SPI时钟输入端口sbit RF4432_SEL=P3^3; //SPI片选sbit RF4432_IRQ=P3^2; //SI4432工作状态指示端口sbit KEY=P3^6; //BLT53A上电控制端sbit LED_GREEN=P2^1;sbit P15=P1^5;//-------------------------射频芯片相关定义--------------------------------------------#define RF4432_TxRxBuf_Len 32 //定义RF4432数据包长度char RF4432_TxRxBuf[RF4432_TxRxBuf_Len];unsigned char Packet[30]={9,20,30,21,15,58,56,69,25,23,12,25,56,22,23,24};//Transmit packet unsigned char Length=4;unsigned char Data_Buf[10];unsigned char Data_Len;typedef enum _RF_ENUM{RF_OK = 0x00, //function response parametersRF_ERROR_TIMING = 0x01,RF_ERROR_PARAMETER = 0x02,RF_PACKET_RECEIVED = 0x03,RF_NO_PACKET = 0x04,RF_CRC_ERROR = 0x05,} RF_ENUM;//----------------------------RF4432 配置寄存器地址-------------------------------- #define DEVICE_TYPE 0x00#define EVICE_VERSION 0x01 //版本号#define DEVICE_STATUS 0x02 //设备状态#define INTERRUPT_STATUS_1 0x03#define INTERRUPT_STATUS_2 0x04#define INTERRUPT_ENABLE_1 0x05#define INTERRUPT_ENABLE_2 0x06#define OPERATING_FUNCTION_CONTROL_1 0x07 //工作模式和功能控制1#define OPERATING_FUNCTION_CONTROL_2 0x08 //工作模式和功能控制2#define CRYSTAL_OSCILLATOR_LOAD_CAPACITANCE 0x09 //晶振负载电容设置#define MICROCONTROLLER_OUTPUT_CLOCK 0x0A#define GPIO0_CONFIGURATION 0x0B //GPIO0功能设置寄存器见英文文档第105页#define GPIO1_CONFIGURATION 0x0C#define GPIO2_CONFIGURATION 0x0D#define IO_PORT_CONFIGURATION 0x0E#define ADC_CONFIGURATION 0x0F#define ADC_SENSOR_AMPLIFIER_OFFSET 0x10#define ADC_VALUE 0x11#define TEMPERATURE_SENSOR_CONTROL 0x12 //温度传感器校准#define TEMPERATURE_VALUE_OFFSET 0x13#define WAKE_UP_TIMER_PERIOD_1 0x14#define WAKE_UP_TIMER_PERIOD_2 0x15#define WAKE_UP_TIMER_PERIOD_3 0x16#define WAKE_UP_TIMER_VALUE_1 0x17#define WAKE_UP_TIMER_VALUE_2 0x18#define LOW_DUTY_CYCLE_MODE_DURATION 0x19#define LOW_BATTERY_DETECTOR_THRESHOLD 0x1A //低压检测阈值寄存器#define BATTERY_VOLTAGE_LEVEL 0x1B#define IF_FILTER_BANDWIDTH 0x1C //中频滤波器带宽寄存器#define AFC_LOOP_GEARSHIFT_OVERRIDE 0x1D#define AFC_TIMING_CONTROL 0x1E#define CLOCK_RECOVERY_GEARSHIFT_OVERRIDE 0x1F#define CLOCK_RECOVERY_OVERSAMPLING_RATIO 0x20#define CLOCK_RECOVERY_OFFSET_2 0x21#define CLOCK_RECOVERY_OFFSET_1 0x22#define CLOCK_RECOVERY_OFFSET_0 0x23#define CLOCK_RECOVERY_TIMING_LOOP_GAIN_1 0x24#define CLOCK_RECOVERY_TIMING_LOOP_GAIN_0 0x25#define RECEIVED_SIGNAL_STRENGTH_INDICATOR 0x26#define RSSI_THRESHOLD_FOR_CLEAR_CHANNEL_INDICATOR 0x27#define ANTENNA_DIVERSITY_REGISTER_1 0x28#define ANTENNA_DIVERSITY_REGISTER_2 0x29#define DATA_ACCESS_CONTROL 0x30#define EZMAC_STATUS 0x31#define HEADER_CONTROL_1 0x32 //Header 起始码设置#define HEADER_CONTROL_2 0x33#define PREAMBLE_LENGTH 0x34 //前导码长度#define PREAMBLE_DETECTION_CONTROL 0x35 //前导码检测设置#define SYNC_WORD_3 0x36 //同步字节#define SYNC_WORD_2 0x37#define SYNC_WORD_1 0x38#define SYNC_WORD_0 0x39#define TRANSMIT_HEADER_3 0x3A#define TRANSMIT_HEADER_2 0x3B#define TRANSMIT_HEADER_1 0x3C#define TRANSMIT_HEADER_0 0x3D#define TRANSMIT_PACKET_LENGTH 0x3E //发送数据包长度,详细请看P125页#define CHECK_HEADER_3 0x3F#define CHECK_HEADER_2 0x40#define CHECK_HEADER_1 0x41#define CHECK_HEADER_0 0x42#define HEADER_ENABLE_3 0x43#define HEADER_ENABLE_2 0x44#define HEADER_ENABLE_1 0x45#define HEADER_ENABLE_0 0x46#define RECEIVED_HEADER_3 0x47#define RECEIVED_HEADER_2 0x48#define RECEIVED_HEADER_1 0x49#define RECEIVED_HEADER_0 0x4A#define RECEIVED_PACKET_LENGTH 0x4B //接收数据包长度,详细请看P134页#define ANALOG_TEST_BUS 0x50#define DIGITAL_TEST_BUS_ENSCTEST_ 0x51#define TX_RAMP_CONTROL 0x52#define PLL_TUNE_TIME 0x53 //锁相环切换时间#define CALIBRATION_CONTROL 0x55#define MODEM_TEST 0x56#define CHARGEPUMP_TEST 0x57#define CHARGEPUMP_CURRENT_TRIMMING_OVERRIDE 0x58#define DIVIDER_CURRENT_TRIMMING 0x59#define VCO_CURRENT_TRIMMING 0x5A#define VCO_CALIBRATION_OVERRIDE 0x5B#define SYNTHESIZER_TEST 0x5C#define BLOCK_ENABLE_OVERRIDE_1 0x5D#define BLOCK_ENABLE_OVERRIDE_2 0x5E#define BLOCK_ENABLE_OVERRIDE_3 0x5F#define CHANNEL_FILTER_COEFFICIENT_ADDRESS 0x60#define CHANNEL_FILTER_COEFFICIENT_VALUE 0x61#define CRYSTAL_OSCILLATOR_CONTROL_TEST 0x62#define RC_OSCILLATOR_COARSE_CALIBRATION_OVERRIDE 0x63#define RC_OSCILLATOR_FINE_CALIBRATION_OVERRIDE 0x64#define LDO_CONTROL_OVERRIDE_ENSPOR 0x65#define LDO_LEVEL_SETTING 0x66 #define DELTASIGMA_ADC_TUNING_1 0x67#define DELTASIGMA_ADC_TUNING_2 0x68#define AGC_OVERRIDE_1 0x69 #define AGC_OVERRIDE_2 0x6A#define GFSK_FIR_FILTER_COEFFICIENT_ADDRESS 0x6B#define GFSK_FIR_FILTER_COEFFICIENT_VALUE 0x6C#define TX_POWER 0x6D //发射功率设置,详细请见P153#define TX_DATA_RATE_1 0x6E //数据发送波特率设置寄存器1#define TX_DATA_RATE_0 0x6F //数据发送波特率设置寄存器0#define MODULATION_MODE_CONTROL_1 0x70 //调制方式控制,详细请见P155#define MODULATION_MODE_CONTROL_2 0x71#define FREQUENCY_DEVIATION 0x72#define FREQUENCY_OFFSET_1 0x73#define FREQUENCY_OFFSET_2 0x74#define FREQUENCY_BAND_SELECT 0x75 //频段选择,详细请见P157#define NOMINAL_CARRIER_FREQUENCY_1 0x76 //基准载波频率#define NOMINAL_CARRIER_FREQUENCY_0 0x77#define FREQUENCY_HOPPING_CHANNEL_SELECT 0x79 //跳频频道选择,详细请见P158#define FREQUENCY_HOPPING_STEP_SIZE 0x7A //跳频频道间隔#define TX_FIFO_CONTROL_1 0x7C#define TX_FIFO_CONTROL_2 0x7D#define RX_FIFO_CONTROL 0x7E#define FIFO_ACCESS 0x7F //FIFO读写方式设置,//-------------------------------RF4432控制指令--------------------------------------------- #define RR 0x00#define WR 0x80//------------------------------------------------延时------------------------------void delay_10us(char n){int i;while(n--)for(i=0;i<5;i++);}void delay_ms(int num){int x,y;for(y=0;y<num;y++){for(x = 0;x < 500;x)x++;}}//------------------------------------SPI单字节读取函数------------------------------------- unsigned char SPI_Read(void){unsigned char i,rxdata;rxdata = 0x00;for (i = 0;i < 8;i++){rxdata = rxdata<<1;RF4432_SCLK=1;RF4432_SDO=1;if (RF4432_SDO==1) //读取最高位,保存至最末尾,通过左移位完成整个字节 {rxdata |= 0x01;}else{rxdata &= ~0x01;}delay_10us(2);RF4432_SCLK=0;delay_10us(2);}return rxdata;}//--------------------------SPI单字节写入函数----------------------------------------------void SPI_Write(unsigned char txdata){unsigned char i;for (i = 0;i < 8;i++){if (txdata&0x80) //总是发送最高位{RF4432_SDI=1;}else{RF4432_SDI=0;}RF4432_SCLK=1;txdata = txdata<<1;RF4432_SCLK=0;}}//---------------------RF4432寄存器读取函数--------------------------------------------------- void RF4432_ReadReg(unsigned char addr, unsigned char *RegisterData){RF4432_SEL=0;SPI_Write(addr|RR);*RegisterData = SPI_Read();RF4432_SEL=1;}//----------------RF4432寄存器写入函数---------------------------------------------------------- void RF4432_WriteReg(unsigned char addr, unsigned char value){RF4432_SEL=0;SPI_Write(addr|WR);SPI_Write(value);RF4432_SEL=1;}//-----------------------RF4432寄存器读取函数---------------------------------------------void RF4432_ReadBurestReg(unsigned char addr,unsigned char *p,unsigned char count){unsigned char i;RF4432_SEL=0;SPI_Write(addr|RR);for(i=0;i<count;i++){p[i] = SPI_Read();}RF4432_SEL=1;}//---------------------------------RF4432射频芯片初始化函数------------------------------------ void RF4432_Init(void){unsigned char RegisterData;//unsigned int i,j;delay_ms(20);delay_ms(20);delay_ms(20);delay_ms(20);delay_ms(20);delay_ms(20);RF4432_ReadReg(0x03,&RegisterData);//read the Interrupt Status1 registerRF4432_ReadReg(0x04,&RegisterData);//read the Interrupt Status2 register//SW resetRF4432_WriteReg(0x07, 0x80);//write 0x80 to the Operating & Function Control1 register//wait for chip ready interrupt from the radio (while the nIRQ pin is high)while(RF4432_IRQ);//read interrupt status registers to clear the interrupt flags and release NIRQ pinRF4432_ReadReg(0x03, &RegisterData);RF4432_ReadReg(0x04, &RegisterData);/*set the physical parameters*///set the center frequency to 434 MHzRF4432_WriteReg(0x75, 0x57); //write 0x75 to the Frequency Band Select registerRF4432_WriteReg(0x76, 0x19); //write 0xBB to the Nominal Carrier Frequency1 registerRF4432_WriteReg(0x77, 0x00); //write 0x80 to the Nominal Carrier Frequency0 register//set the desired TX data rate (9.6kbps)RF4432_WriteReg(0x6E, 0x13); //write 0x4E to the TXDataRate 1 registerRF4432_WriteReg(0x6F, 0xA9); //write 0xA5 to the TXDataRate 0 registerRF4432_WriteReg(0x70, 0x2C); //write 0x2C to the Modulation Mode Control 1 registerRF4432_WriteReg(0x58, 0x80); //VCO//set the TX power to MAXRF4432_WriteReg(0x6D, 0x1F); //write 0x1F to the TX Power register/*set the modem parameters according to the exel calculator(parameters: 4.8 kbps, deviation: 50 kHz, channel filter BW: 102.2 kHz*/RF4432_WriteReg(0x1C, 0xAD);//write 0x1E to the IF Filter Bandwidth registerRF4432_WriteReg(0x20, 0xE2);//write 0xD0 to the Clock Recovery Oversampling Ratio registerRF4432_WriteReg(0x21, 0x80);//write 0x00 to the Clock Recovery Offset 2 registerRF4432_WriteReg(0x22, 0x1A);//write 0x9D to the Clock Recovery Offset 1 registerRF4432_WriteReg(0x23, 0x37);//write 0x49 to the Clock Recovery Offset 0 registerRF4432_WriteReg(0x24, 0x00);//write 0x00 to the Clock Recovery Timing Loop Gain 1 registerRF4432_WriteReg(0x25, 0x04);//write 0x24 to the Clock Recovery Timing Loop Gain 0 registerRF4432_WriteReg(0x1D, 0x44);//enable afcRF4432_WriteReg(0x1E, 0x0A);RF4432_WriteReg(0x2A, 0x2C);RF4432_WriteReg(0x1F, 0x03);RF4432_WriteReg(0x69, 0x60);//write 0x40 to the AFC Loop Gearshift Override registerRF4432_WriteReg(0x72, 0x70);//write 0x48 to the Frequency Deviation register//set the preamble length to 10bytes if the antenna diversity is used and set to 5bytes if notRF4432_WriteReg(0x34, 0xCF); //write 0x0C to the Preamble Length register//set preamble detection threshold to 20bitsRF4432_WriteReg(0x35, 0x20); //write 0x2A to the Preamble Detection Control register//Disable header bytes; set variable packet length (the length of the payload is defined by the //received packet length field of the packet); set the synch word to two bytes longRF4432_WriteReg(0x33, 0x02); //write 0x02 to the Header Control2 register//Set the sync word pattern to 0x2DD4RF4432_WriteReg(0x36, 0x2D); //write 0x2D to the Sync Word 3 registerRF4432_WriteReg(0x37, 0xD4); //write 0xD4 to the Sync Word 2 register//enable the TX & RX packet handler and CRC-16 (IBM) checkRF4432_WriteReg(0x30, 0x8D); //write 0x8D to the Data Access Control register//Disable the receive header filtersRF4432_WriteReg(0x32, 0x00 ); //write 0x00 to the Header Control1 register//enable FIFO mode and GFSK modulationRF4432_WriteReg(0x71, 0x2B); //write 0x63 to the Modulation Mode Control 2 register/*set the GPIO's according the testcard type*/RF4432_WriteReg(0x0B, 0x0A); //write 0x12 to the GPIO0 Configuration(set the TX state)RF4432_WriteReg(0x0C, 0x0A); //write 0x15 to the GPIO1 Configuration(set the RX state)//set the AGCRF4432_WriteReg(0x69, 0x35); //write 0x0B to the AGC Override 2 register//set ADC reference voltage to 0.9VRF4432_WriteReg(0x68, 0x07); //write 0x04 to the Deltasigma ADC Tuning 2 register//set Crystal Oscillator Load Capacitance registerRF4432_WriteReg(0x09, 0x7F); //write 0xD7 to the Crystal Oscillator Load Capacitance registerRF4432_WriteReg(0x73,0x00);RF4432_WriteReg(0x74,0x00);//TxFIFOReset();RF4432_WriteReg(0x08, 0x01);RF4432_WriteReg(0x08, 0x00);//RxFIFOReset();RF4432_WriteReg(0x08, 0x02);RF4432_WriteReg(0x08, 0x00);}//-------------------------RF4432设置接收模式函数------------------------------------------ void RF4432_SetRxMode(void){unsigned char RegisterData;RF4432_WriteReg(0x0E, 0x02);//Rx_EN;//enable the packet valid interruptRF4432_WriteReg(0x05, 0xFF);RF4432_WriteReg(0x06, 0x00);RF4432_ReadReg(0x03, &RegisterData);RF4432_ReadReg(0x04, &RegisterData);//enable receiver chainRF4432_WriteReg(0x07, 0x05);}//---------------------------RF4432数据包接收函数------------------------------------------- unsigned char RF4432_RxPacket(void){unsigned char temp;RF4432_IRQ=1;if(!RF4432_IRQ){RF4432_ReadReg(INTERRUPT_STATUS_1,&temp);if(temp&0x02){return 1;}}return 0;}void RFIdle(void){unsigned char RegisterData;RF4432_WriteReg(0x07, 0x01);//diasble all ITsRF4432_WriteReg(0x05, 0x00);RF4432_WriteReg(0x06, 0x00);RF4432_ReadReg(0x03, &RegisterData);RF4432_ReadReg(0x04, &RegisterData);}void RFTransmit(unsigned char * packet, unsigned char length){unsigned char temp;unsigned char RegisterData;RF4432_WriteReg(0x0E, 0x01);//Tx_EN;RF4432_WriteReg(0x3e, length);for(temp=0;temp<length;temp++){RF4432_WriteReg(0x7f,packet[temp]);} //enable the wanted ITsRF4432_WriteReg(0x05, 0x04);RF4432_WriteReg(0x06, 0x00);RF4432_ReadReg(0x03, &RegisterData);RF4432_ReadReg(0x04, &RegisterData);//enable transmitterRF4432_WriteReg(0x07, 0x09);while(RF4432_IRQ);//while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)); RF4432_ReadReg(0x03, &RegisterData);RF4432_ReadReg(0x04, &RegisterData);}RF_ENUM RFPacketReceived(unsigned char * packet, unsigned char * length) {unsigned char i;unsigned char RegisterData;if( RF4432_IRQ == 0 ){RF4432_ReadReg(0x03,&RegisterData);if( (RegisterData & 0x01) == 0x01 )//CRC error{RF4432_SetRxMode();return RF_CRC_ERROR;}if( (RegisterData & 0x02) == 0x02 )//packet received{//read bufferRF4432_ReadReg(0x4b,length);for(i=0;i<*length;i++){RF4432_ReadReg(0x7f,packet++);}RF4432_SetRxMode();return RF_PACKET_RECEIVED;}}return RF_NO_PACKET;}void StartUART( void ){SCON = 0x50;TMOD = 0x20;TH1 = 0XF4;TL1 = 0XF4;TR1 = 1; //允许定时器1工作}//串口发送数void R_S_Byte(unsigned char R_Byte){SBUF = R_Byte;while( TI == 0 ); //查询法 TI = 0;}main(){//unsigned char i;KEY=1;LED_GREEN=0;StartUART();RF4432_Init();delay_ms(10);RF4432_SetRxMode();//RF4432设置接收模式函数P15=1;while(1){RF4432_WriteReg(0x0E, 0x02);//Rx_EN;LED_GREEN=1;//灯亮RFTransmit(Packet,Length);//发送数据RFIdle();//进入空闲模式delay_ms(10);RF4432_SetRxMode();//RF4432设置接收模式函数while(RFPacketReceived(Data_Buf,&Data_Len) != RF_PACKET_RECEIVED);//waiting for receivingRFIdle();RF4432_ReadReg(0x26,&Data_Buf[1]);LED_GREEN=0;delay_ms(200);delay_ms(200);/*RF4432_SetRxMode();LED_GREEN=0;//=========================================================================================================== =if(RF4432_RxPacket()) //判断是否接收到数据{LED_GREEN=1;RF4432_ReadBurestReg(FIFO_ACCESS,RF4432_TxRxBuf,RF4432_TxRxBuf_Len);for(i=0;i<32;i++){R_S_Byte(RF4432_TxRxBuf[i]);}RF4432_SetRxMode();}*/ }}。
基于stm32的无线收发系统作者:刘波来源:《科学导报·学术》2019年第18期摘要:针对监测控制系统中对前端参数采集部分的设计需求,设计了基于STM32F030(采用ARMCORTEX-M0内核)处理器的多参数采集单元,采集单元可完成温湿度、气压等参数数据的采集和存储并通过无线模块NRF24L01实现数据的无线收发;单元配有按键及液晶显示器,便于查看当前参数数据。
通过选取性价比高的数字传感器简化了电路结构并降低硬件成本,通过合理的软件程序设计进一步降低系统的功耗。
经测试单元工作稳定,可实现参数的采集传输等功能。
同时,采集单元方便移植,可应用于环境监测,工业数据检测,智能温室等监控系统中。
关键词:STM32处理器;数据采集;无线通信;低功耗在现代监测控制系统中,获取前端参数数据至关重要,可以说参数采集是实现控制的基础。
在工业自动化控制、农业生产自动化、环境质量监测、智能医疗监护等众多领域都离不开数据的采集和处理。
本文设计了采用以32位处理器为核心的无线数据采集单元。
选用ST公司的STM32F030处理器作为控制核心,单元集参数采集、数据存储与显示、无线转发为一体,采用电池供电且具有低电压告警功能。
[1]1单元硬件电路设计数据采集单元的电路设计在满足基本功能的基础上按照低成本、低功耗的设计原则。
在实际采集系统中,前端采集单元数量众多,硬件设计应尽量降低成本;另外,单元采用电池供电,为避免频繁更换电池,单元电路功耗设计要尽量低,以延长电池的使用时间。
单元整体结构框如1所示。
1.1 处理器单元选用ST(意法半导体)公司的STM32F030C8T6控制器作为处理器,STM32F030系列是意法半导体推出的超值系列32位微控制器,该系列芯片基于超低功耗的ARMCORTEX-M0处理器内核,其价格与8位微控制器相当,有丰富的外设数量和种类,内核频率高达48MHz。
STM32F030内置高速12位ADC、先进且灵活的定时器(支持ADC同步、死时管理和电机控制PWM时序功能)、温度传感器、日历RTC和通信接口(如I2C、USART、SPI等)[2]。
基于单片机的无线收发系统设计无线收发系统是指通过无线电波实现信息的传递与接收的一种通讯系统。
它将从传感器或者其他设备中获取的信号转化为电信号,然后通过射频信号进行传输与接收。
在实际的无线收发系统设计中,基于单片机的无线收发系统已经成为广泛应用的一种方案。
下文将从硬件和软件两方面介绍基于单片机的无线收发系统的设计思路。
一、硬件设计基于单片机的无线收发系统包括发送端和接收端两个部分。
其中发送端主要是将电信号转化为射频信号进行传输,而接收端则是将射频信号转化为电信号进行处理。
1、发射模块设计发射模块设计中最核心的是无线电频率,因此需要选择合适的发射模块芯片。
首先需要选择一款可控制衰减的功率放大器,以便根据实际需求对其进行合适的调节。
其次需要选择一款有较多输出功率档位的变频器。
最后需要进行天线设计,根据不同场景选择不同类型的天线。
(如:旋转天线,贴片天线,板载蜂窝天线等)2、接收模块设计接收模块设计中最重要的是接收机芯片。
可以选择具有数字解调功能的芯片,以便将接收到的射频信号转换为数字信号。
通过功率放大器增益的设计,可以使信号幅度调整到最佳值,然后输出给单片机进行处理。
二、软件设计软件设计中需要编写相应的代码程序,对模块控制进行设置,并实现数据的传递。
1、发射模块控制在发射模块控制中,主要是对功率放大器与变频器进行控制。
可以利用单片机的PWM功能模拟模拟电压输出,并实现对变频器的频率和功率的调节。
同时还需要设计相应的信号调制方案,以使数据正确地传输。
2、接收模块控制在接收模块控制中,主要是对解调芯片和功率放大器进行控制,并将解调后的信号数据传输给单片机进行处理。
可以利用单片机的外部中断功能实现接收到数据的中断处理,并利用单片机的USART串口功能实现数据的传输。
综上,基于单片机的无线收发系统的设计需要考虑硬件和软件两个方面。
在硬件设计中需要选择合适的发射与接收模块,并进行天线设计。
在软件设计中需要编写相应的代码程序,实现模块控制与数据传输。