无线通信模块说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无线通信模块说明
一、433MHz无线通讯模块简介
1.产品简介:
433MHz无线通讯模块,采用Chipcon公司的高性能CC1101无线通信芯片,最大传输数率达500kbps,并可软件修改波特率,开阔地传输距离达到300米,具有无线唤醒等功能,灵敏度达到-110dBm,可靠性高,可广泛应用于各种场合的短距离无线通信领域。

2. 性能特点:
(1) 433MHz免费ISM频段免许可证使用;
(2) 最高工作速率500kbps,支持2-FSK、GFSK和MSK调制方式;
(3) 可软件修改波特率参数:
高波特率:更快的数据传输速率,
低波特率:更强的抗干扰性和穿透能力,
更好地满足客户在不同条件下的使用要求;
(4) 高灵敏度(1.2kbps下-110dBm,1%数据包误码率);
(5) 内置硬件CRC 检错和点对多点通信地址控制;
(6) 较低的电流消耗(RX中,15.6mA,2.4kbps,433MHz);
(7) 可编程控制的输出功率,对所有的支持频率可达+10dBm;
(8) 支持低功率电磁波激活功能;
(9) 支持传输前自动清理信道访问(CCA),即载波侦听系统;
(10) 快速频率变动合成器带来的合适的频率跳跃系统;
(11) 模块可软件设地址,软件编程非常方便;
(12) 标准DIP间距接口,便于嵌入式应用;
(13) 单独的64字节RX和TX数据FIFO。

3. 主要应用领域:
极低功率UHF无线收发器,315/433/868/915MHz ISM/SRD波段系统,AMR-自动仪表读数,电子消费产品,远程遥控控制,低功率遥感勘测,住宅和建筑自动控制,无线警报和安全系统,工业监测和控制,无线传感器网络,无线唤醒功能,低功耗手持终端产品等。

二、硬件设计
1.模块接口说明
CC1101与STM32引脚连接表如表1所示。

表1 CC1101与STM32引脚连接表
图1 CC1101 的外引脚图(俯视)
三、软件设计
1. SPI读写操作
u8 SPI_FLASH_SendByte(u8 byte)
{
/* Loop while DR register in not emplty */
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
/* Send byte through the SPI2 peripheral */
SPI_I2S_SendData(SPI2, byte);
/* Wait to receive a byte */
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Return the byte read from the SPI bus */
return SPI_I2S_ReceiveData(SPI2);
}
2.SPI写寄存器操作
void halSpiWriteReg(INT8U addr, INT8U value)
{
SPI_FLASH_CS_LOW();
while (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_SO) );
SPI_FLASH_SendByte(addr); //写地址
SPI_FLASH_SendByte(value); //写入配置
SPI_FLASH_CS_HIGH();
}
3. SPI读寄存器操作
INT8U halSpiReadReg(INT8U addr)
{
INT8U temp, value;
temp = addr|READ_SINGLE;//读寄存器命令
SPI_FLASH_CS_LOW();
while (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_SO) );//MISO SPI_FLASH_SendByte(temp);
value = SPI_FLASH_SendByte(0);
SPI_FLASH_CS_HIGH();
return value;
}
4. 模块初始化设置
const RF_SETTINGS rfSettings
= {
0x06, // FSCTRL1 Frequency synthesizer control.
0x00, // FSCTRL0 Frequency synthesizer control.
0x10, // FREQ2 Frequency control word, high byte.
0xA7, // FREQ1 Frequency control word, middle byte.
0x62, // FREQ0 Frequency control word, low byte.
0xf6, // MDMCFG4 Modem configuration.
0x83, // MDMCFG3 Modem configuration.
0x13, // MDMCFG2 Modem configuration.
0x22, // MDMCFG1 Modem configuration.
0xF8, // MDMCFG0 Modem configuration.
0x00, // CHANNR Channel number.
0x15, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
0x56, // FREND1 Front end RX configuration.
0x10, // FREND0 Front end RX configuration.
0x18, // MCSM0 Main Radio Control State Machine configuration.
0x16, // FOCCFG Frequency Offset Compensation Configuration.
0x6C, // BSCFG Bit synchronization Configuration.
0x03, // AGCCTRL2 AGC control.
0x40, //0x00, // AGCCTRL1 AGC control.
0x91, // AGCCTRL0 AGC control.
0xE9, // FSCAL3 Frequency synthesizer calibration.
0x2A, // FSCAL2 Frequency synthesizer calibration.
0x00, // FSCAL1 Frequency synthesizer calibration.
0x1F, // FSCAL0 Frequency synthesizer calibration.
0x59, // FSTEST Frequency synthesizer calibration.
0x81, // TEST2 Various test settings.
0x35, // TEST1 Various test settings.
0x09, // TEST0 Various test settings.
0x29, // IOCFG2 GDO2 output pin configuration.
0x06, // IOCFG0D GDO0 output pin configuration.
0x04, // PKTCTRL1 Packet automation control.
0x05, // PKTCTRL0 Packet automation control.
0x00, // ADDR Device address.
0xff // PKTLEN Packet length.
};
5. 数据发送流程操作
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
halSpiWriteReg(CCxxx0_TXFIFO, size); //写入长度
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
// Wait for GDO0 to be set -> sync transmitted
while (!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_GD0) );//while (!GDO0);
// Wait for GDO0 to be cleared -> end of packet
while (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_GD0) );// while (GDO0);
halSpiStrobe(CCxxx0_SFTX);
}
6. 数据接收流程操作
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
{
INT8U status[2];
INT8U packetLength;
INT8U i=(*length)*4; // 具体多少要根据datarate和length来决定
halSpiStrobe(CCxxx0_SRX); //进入接收状态
Delay(5);
while (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_GD0) )//while (GDO0)
{
Delay(2);
--i;
if(i<1)
return 0;
}
if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
{
packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
if(packetLength <= *length) //如果所要的有效数据长度小于等于接收到的数据包的长度
{
halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
*length = packetLength; //把接收数据长度的修改为当前数据的长度
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); //读出CRC校验位
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return (status[1] & CRC_OK); //如果校验成功返回接收成功}
else
{
*length = packetLength;
halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
return 0;
}
}
else
return 0;
}
四、下载与测试
在代码编译成功之后,我们通过下载代码到STM32开发板上,调试发送部分时可以看到:
调试接收部分时可以看到:。

相关文档
最新文档