CC1101 433无线模块,STM8串口透传
时间:11-19
来源:互联网
点击:
- 间:2014-01-01
- *最后修改时间:2014-01-01
- *说明:写入数据到发送FIFO
- *************************************************************************************************************************/
- voidCC1101_WriteTxFIFO(u8*pBuff,u8len)
- {
- u16i;
- CC1101_CS_L();
- CC1101_ReadWriteByte(BURST_WRITE_FIFO);
- for(i=0;i
- {
- CC1101_ReadWriteByte(pBuff[i]);
- }
- CC1101_CS_H();
- }
- /*************************************************************************************************************************
- *函数:voidCC1101_ReadRxFIFO(u8*pBuff,u8len)
- *功能:读取接收缓冲区
- *参数:pBuff:需要读取的数据缓冲区指针,len:需要读取的数据长度
- *返回:无
- *依赖:底层宏定义
- *作者:cp1300@139.com
- *时间:2014-01-01
- *最后修改时间:2014-01-01
- *说明:从接收FIFO读取数据
- *************************************************************************************************************************/
- voidCC1101_ReadRxFIFO(u8*pBuff,u8len)
- {
- u16i;
- CC1101_CS_L();
- CC1101_ReadWriteByte(BURST_READ_FIFO);
- for(i=0;i
- {
- pBuff[i]=CC1101_ReadWriteByte(0xff);
- }
- CC1101_CS_H();
- }
- //发送数据,将缓冲区数据全部发送出去
- //一次最多64B,因为受到FIFO限制
- voidCC1101_RfDataSend(u8*pBuff,u8len)
- {
- CC1101_Command(CC1101_CMD_SIDLE);//退出当前模式
- CC1101_Command(CC1101_CMD_SFTX);//清空发送缓冲区
- CC1101_WriteTxFIFO(pBuff,len);//写入数据到发送缓冲区
- CC1101_Command(CC1101_CMD_STX);//开始发送数据
- while(!CC1101_GDO0);
- while(CC1101_GDO0);
- CC1101_Command(CC1101_CMD_SIDLE);//退出当前模式
- }
- //发送数据包
- //每次发送最多65B,第一字节为长度,数据多将会重复发送
- //可以发送任意大小
- //CC1101PackSize有效数据包大小,0-64,也就是CC1101单次发送数据大小-1
- voidCC1101_RfDataSendPack(u8*pBuff,u16len)
- {
- u16i,m,n,j;
- m=len/(CC1101_DATA_LEN-1);//整数数据帧数量
- n=len%(CC1101_DATA_LEN-1);//余数
- //发送整数包
- for(i=0;i
- {
- Delay_MS(1);
- CC1101_Command(CC1101_CMD_SIDLE);//退出当前模式
- CC1101_Command(CC1101_CMD_SFTX);//清空发送缓冲区
- CC1101_CS_L();
- CC1101_ReadWriteByte(BURST_WRITE_FIFO);
- CC1101_ReadWriteByte(CC1101_DATA_LEN-1);//先写入包大小
- for(j=0;j<(CC1101_DATA_LEN-1);j++)
- {
- CC1101_ReadWriteByte(*pBuff++);//写入数据到发送缓冲区
- }
- CC1101_CS_H();
- CC1101_Command(CC1101_CMD_STX);//开始发送数据
- while(!CC1101_GDO0);
- while(CC1101_GDO0);//等待发送完成
- }
- //发送余数包
- if(n!=0)
- {
- Delay_MS(1);
- CC1101_Command(CC1101_CMD_SIDLE);//退出当前模式
- CC1101_Command(CC1101_CMD_SFTX);//清空发送缓冲区
- CC1101_CS_L();
- CC1101_ReadWriteByte(BURST_WRITE_FIFO);
- CC1101_ReadWriteByte(n);//先写入包大小
- for(j=0;j
- {
- CC1101_ReadWriteByte(*pBuff++);//写入数据到发送缓冲区
- }
- CC1101_CS_H();
- CC1101_Command(CC1101_CMD_STX);//开始发送数据
- while(!CC1101_GDO0);
- while(CC1101_GDO0);//等待发送完成
- }
- CC1101_Command(CC1101_CMD_SIDLE);//退出当前模式
- }
- //读取芯片状态
- u8CC1101_GetStatus(void)
- {
- returnCC1101_WriteReg(CC1101_REG_TEST2,0x98);
- }
CC1101.H
- /*************************************************************************************************************
- *文件名:CC1101.c
- *功能:STM8CC1101驱动函数
- *作者:cp1300@139.com
- *创建时间:2013-12-0614:35
- *最后修改时间:2013-12-06
- *详细:433MHZ收发芯片驱动
- *************************************************************************************************************/
- #ifndef_CC1101_H_
- #define_CC1101_H_
- #include"system.h"
- //CC1101命令
- //以写的方式单直接访问将触发响应的命令
- typedefenum
- {
- CC1101_CMD_SRES=0x30,//重启
- CC1101_CMD_SFSTXON=0x31,//开启和校准频率合成器(若MCSM0.FSAUTOCAL=1)
- CC1101_CMD_SXOFF=0x32,//关闭晶体振荡器
- CC1101_CMD_SCAL=0x33,//校准频率合成器并关断(开启快速启动)。在不设置手动校准模式(MCSM0.FS_AUTOCAL=0)的情况下,SCAL能从空闲模式滤波。
- CC1101_CMD_SRX=0x34,//启用RX。若上一状态为空闲且MCSM0.FS_AUTOCAL=1则首先运行校准。
- CC1101_CMD_STX=0x35,//空闲状态:启用TX。若MCSM0.FS_AUTOCAL=1首先运行校准。若在RX状态且CCA启用:若信道为空则进入TX
- CC1101_CMD_SIDLE=0x36,//离开RX/TX,关断频率合成器并离开电磁波激活模式若可用
- CC1101_CMD_SAFC=0x3
CC1101433无线模块STM8串口透 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)