前言
记录一下自己最近在项目中用到并使用这个模块的使用过程。
模块介绍
模块特点
CC2500PATR2.4SK是集FSK/ASK/OOK/MSK.调制方式于一体的收发模块。它提供扩展硬件支持实现信息包处理、数据缓冲、群发射、空闲信道评估、链接 质量指示和无线电波唤醒,可以采用曼彻斯特编码进行调制解调它的数据流。 性能优越并且易于应用到你的产品设计中,它可以应用于2400-2483.5MHz ISM/SRD频段的系统,消费类电子产品、无线游戏控制器、无线音频传输和 其他的无线系统中。
模块使用
CSD, CPS 以及CTX用来选择PA或LAN通道,SEL用来选择天线口,致高为左,拉低为右边天线端口。
使用说明
IOCFGx 寄存器配置:
IOCFG2、IOCFG1 和 IOCFG0 是 CC2500 中用来配置测试输出控制引脚(GDO0、GDO1、GDO2)的寄存器。
这些引脚在不同工作模式下具有不同的功能,可以根据需求配置它们的行为。
配置的参数范围是 0 到 0x3F,不同参数对应于不同的引脚功能。具体的配置参数含义如下:
寄存器地址定义:
IOCFG2 (0x00): GDO2 输出引脚配置。
IOCFG1 (0x01): GDO1 输出引脚配置。
IOCFG0 (0x02): GDO0 输出引脚配置。
FIFOTHR (0x03): RX FIFO 和 TX FIFO 阈值设置。
SYNC1 (0x04): 同步字高字节设置。
SYNC0 (0x05): 同步字低字节设置。
PKTLEN (0x06): 数据包长度设置。
PKTCTRL1 (0x07): 数据包自动化控制。
PKTCTRL0 (0x08): 数据包自动化控制。
ADDR (0x09): 设备地址设置。
CHANNR (0x0A): 信道号设置。
FSCTRL1 (0x0B): 频率合成器控制。
FSCTRL0 (0x0C): 频率合成器控制。
FREQ2 (0x0D): 频率控制字高字节。
FREQ1 (0x0E): 频率控制字中字节。
FREQ0 (0x0F): 频率控制字低字节。
MDMCFG4 (0x10): 调制配置。
MDMCFG3 (0x11): 调制配置。
其余自行查看
命令定义
SRES (0x30): 复位芯片。
SFSTXON (0x31): 启用和校准频率合成器。
SXOFF (0x32): 关闭晶体振荡器。
常量和宏
CRC_OK (0x80): CRC 校验通过标志。
GDO0 - 发射模式:
GDO0 在上电后初始化前会以 135 kHz 的频率输出方波。
初始化完成后,将 GDO0 保持为低电平。
在发射模式下,GDO0 通常为低电平。
当 MCU 下达 STX(发射)命令后,GDO0 会从低电平变为高电平,表示 CC2500 正在发射数据。
GDO0 在发射完成时由高电平变为低电平,表示发射过程结束。
GDO0 - 接收模式:
在接收模式下,GDO0 通常为低电平。
当 MCU 下达 SRX(接收)指令后,如果接收到封包并且 preamble 和 syncword 正确,GDO0 会从低电平变为高电平,表示正在接收数据。
GDO0 在接收完成时由高电平变为低电平,表示接收过程结束。
你可以配置 GDO0 为下降沿中断,以便在接收到数据包时触发中断。
GDO1 和 GDO2:
我没有使用
寄存器:
寄存器主要分为配置寄存器、选通命令、发射功率寄存器和 TX/RX FIFO。
配置寄存器(0x00 到 0x2F)用于配置 CC2500 的各种参数,如频率通道、调制方式等。
选通命令寄存器(0x30 到 0x3F)用于在执行读写寄存器操作时切换模式。
发射功率寄存器(0x3E)决定发射功率级别,最多可设置 8 组,共 8 种功率。
TX/RX FIFO 寄存器(0x3F)用于在发送和接收时进行数据传输。
在使用过程中,我要将我获取到的液压气的数据发送出去并接收,我先将存储在一个变量,然后将他们分割为低字节和高字节,分别存储在TXBuffer数组的前两个位置。然后和CRC校验值一起打包发送。
发送:
// 将传感器数据存储在发送缓冲区中
adc_value_m4 = m4_value;
adc_value_m6 = m6_value;
rfIntRequest = 0;
TXBuffer[0] = adc_value_m4 & 0xFF; // 低字节
TXBuffer[1] = (adc_value_m4 >> 8) & 0xFF; // 高字节
TXBuffer[2] = adc_value_m6 & 0xFF; // 低字节
TXBuffer[3] = (adc_value_m6 >> 8) & 0xFF; // 高字节
crc_value = RadioComputeCRC(TXBuffer, 4, CRC_TYPE_IBM);//CRC
TXBuffer[4] = crc_value >> 8;
TXBuffer[5] = crc_value;
SendPacket(TXBuffer, TXBuffer[0]+1);
接收:
// 解析接收到的数据
adc_value_m4 = (RXBuffer[1] << 8) | RXBuffer[0];
adc_value_m6 = (RXBuffer[3] << 8) | RXBuffer[2];
received_crc_value = (RXBuffer[4] << 8) | RXBuffer[5];
if (received_crc_value == RadioComputeCRC(RXBuffer, 4, CRC_TYPE_IBM)) // CRC check
{
delay_ms(100); //延时100ms
LED1 = 0;
delay_ms(100); //延时100ms
LED1 = 1;//接收到正确数据 LED闪烁
OLED_Clear();
sprintf((char *)buff,"M_4 :%d",adc_value_m4);
OLED_ShowString(8,1,buff,12);
sprintf((char *)buff,"M_6 :%d",adc_value_m6);
OLED_ShowString(8,2,buff,12);
}
完整代码下载地址,只有传送部分仅供参考:
https://github.com/hana-kami/CC2500