CC1101 433无线模块,STM8串口透传
时间:11-19
来源:互联网
点击:
原理图:http://download.csdn.net/detail/cp1300/7496509
下面是STM8程序
CC1101.C
- /*************************************************************************************************************
- *文件名:CC1101.c
- *功能:STM8CC1101驱动函数
- *作者:cp1300@139.com
- *创建时间:2013-12-0614:35
- *最后修改时间:2013-12-06
- *详细:433MHZ收发芯片驱动
- *************************************************************************************************************/
- #include"system.h"
- #include"delay.h"
- #include"CC1101.h"
- //CC1101命令掩码
- #defineWRITE_BURST0x40//连续写入
- #defineREAD_SINGLE0x80//读
- #defineWRITE_SINGLE0x00//写
- #defineREAD_BURST0xC0
- //连续读
- #defineBURST_READ_FIFO0xff//突发读取RXFIFO
- #defineBYTE_READ_FIFO0xBF//单字节读取RXFIFO
- #defineBURST_WRITE_FIFO0x7f//突发写TXFIFO
- #defineBYTE_WRITE_FIFO0x3f//单字节写TXFIFO
- #defineCC1101_DATA_LEN64
- //SPI接口
- //底层接口宏定义
- #defineCC1101_CS_H()(GPIOA->ODR=BIT3)//PA3=1
- #defineCC1101_CS_L()(GPIOA->ODR&=~BIT3)//PA3=0
- #defineCC1101_MOSI_H()(GPIOC->ODR=BIT6)//PC6
- #defineCC1101_MOSI_L()(GPIOC->ODR&=~BIT6)//PC6
- #defineCC1101_SCLK_H()(GPIOC->ODR=BIT5)//PC5
- #defineCC1101_SCLK_L()(GPIOC->ODR&=~BIT5)//PC5
- #defineCC1101_GetMISO()(GPIOC->IDR&BIT7)//PC7
- //CC1101SPI读写一字节
- //不带片选
- u8CC1101_ReadWriteByte(u8data)
- {
- u8i;
- u8temp=0;
- for(i=0;i<8;i++)
- {
- if(data&0x80)
- {
- CC1101_MOSI_H();
- }
- else
- {
- CC1101_MOSI_L();
- }
- data<=1;nop;
- CC1101_SCLK_H();//时钟上升沿写入数据
- temp<=1;nop;
- if(CC1101_GetMISO())temp++;
- CC1101_SCLK_L();//时钟下降沿读取数据
- }
- returntemp;
- }
- /*************************************************************************************************************************
- *函数:u8CC1101_Command(CC1101_CMD_TYPECmd)
- *功能:发送单字节命令
- *参数:Cmd;命令,见CC1101_CMD_TYPE
- *返回:寄存器的值
- *依赖:底层宏定义
- *作者:cp1300@139.com
- *时间:2013-12-06
- *最后修改时间:2013-12-06
- *说明:以写的方式单直接访问将触发响应的命令
- *************************************************************************************************************************/
- u8CC1101_Command(CC1101_CMD_TYPECmd)
- {
- u8status;
- CC1101_CS_L();//片选有效
- while(CC1101_GetMISO());
- status=CC1101_ReadWriteByte((u8)Cmd);//发送命令
- while(CC1101_GetMISO());
- CC1101_CS_H();//片选关闭
- returnstatus;
- }
- /*************************************************************************************************************************
- *函数:u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
- *功能:读取CC1101通用寄存器
- *参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE
- *返回:寄存器的值
- *依赖:底层宏定义
- *作者:cp1300@139.com
- *时间:2013-12-06
- *最后修改时间:2013-12-06
- *说明:一次读取一个寄存器
- *************************************************************************************************************************/
- u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
- {
- u8data;
- CC1101_CS_L();//片选有效
- CC1101_ReadWriteByte((u8)READ_SINGLERegAddr);//发送读命令以及寄存器索引
- data=CC1101_ReadWriteByte(0xff);//读取
- CC1101_CS_H();//片选关闭
- returndata;
- }
- /*************************************************************************************************************************
- *函数:u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
- *功能:写入CC1101通用寄存器
- *参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE,data:需要写入的数据
- *返回:状态寄存器的值
- *依赖:底层宏定义
- *作者:cp1300@139.com
- *时间:2013-12-06
- *最后修改时间:2013-12-06
- *说明:一次写入一个寄存器,并返回状态
- 不要对只读的寄存器进行写操作
- *************************************************************************************************************************/
- u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
- {
- u8status;
- if(RegAddr>0x80)return0;//防止误操作,0x30以后的寄存器为只读状态寄存器
- CC1101_CS_L();//片选有效
- while(CC1101_GetMISO());
- status=CC1101_ReadWriteByte((u8)WRITE_SINGLERegAddr);//发送写命令以及寄存器索引
- CC1101_ReadWriteByte(da
CC1101433无线模块STM8串口透 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)