微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 433MHz模块stm8、cc1101

433MHz模块stm8、cc1101

时间:11-19 来源:互联网 点击:
前一段时间画了一个CC1101收发小板子,但是一直没有成功,最后发现把27nH的电感焊接成了27uH,最终导致失败.

现在更换之后可以覆盖我们公司所有的角落,已经够用了.


原理图:http://download.csdn.net/detail/cp1300/7496509

下面是STM8程序

CC1101.C

  1. /*
  2. *文件名:CC1101.c
  3. *功能:STM8CC1101驱动函数
  4. *作者:cp1300@139.com
  5. *创建时间:2013-12-0614:35
  6. *最后修改时间:2013-12-06
  7. *详细:433MHZ收发芯片驱动
  8. */
  9. #include"system.h"
  10. #include"delay.h"
  11. #include"CC1101.h"
  12. //CC1101命令掩码
  13. #defineWRITE_BURST0x40//连续写入
  14. #defineREAD_SINGLE0x80//读
  15. #defineWRITE_SINGLE0x00//写
  16. #defineREAD_BURST0xC0
  17. //连续读
  18. #defineBURST_READ_FIFO0xff//突发读取RXFIFO
  19. #defineBYTE_READ_FIFO0xBF//单字节读取RXFIFO
  20. #defineBURST_WRITE_FIFO0x7f//突发写TXFIFO
  21. #defineBYTE_WRITE_FIFO0x3f//单字节写TXFIFO
  22. #defineCC1101_DATA_LEN64
  23. //SPI接口
  24. //底层接口宏定义
  25. #defineCC1101_CS_H()(GPIOA->ODR|=BIT3)//PA3=1
  26. #defineCC1101_CS_L()(GPIOA->ODR&=~BIT3)//PA3=0
  27. #defineCC1101_MOSI_H()(GPIOC->ODR|=BIT6)//PC6
  28. #defineCC1101_MOSI_L()(GPIOC->ODR&=~BIT6)//PC6
  29. #defineCC1101_SCLK_H()(GPIOC->ODR|=BIT5)//PC5
  30. #defineCC1101_SCLK_L()(GPIOC->ODR&=~BIT5)//PC5
  31. #defineCC1101_GetMISO()(GPIOC->IDR&BIT7)//PC7
  32. //CC1101SPI读写一字节
  33. //不带片选
  34. u8CC1101_ReadWriteByte(u8data)
  35. {
  36. u8i;
  37. u8temp=0;
  38. for(i=0;i<8;i++)
  39. {
  40. if(data&0x80)
  41. {
  42. CC1101_MOSI_H();
  43. }
  44. else
  45. {
  46. CC1101_MOSI_L();
  47. }
  48. data<=1;nop;
  49. CC1101_SCLK_H();//时钟上升沿写入数据
  50. temp<=1;nop;
  51. if(CC1101_GetMISO())temp++;
  52. CC1101_SCLK_L();//时钟下降沿读取数据
  53. }
  54. returntemp;
  55. }
  56. /*
  57. *函数:u8CC1101_Command(CC1101_CMD_TYPECmd)
  58. *功能:发送单字节命令
  59. *参数:Cmd;命令,见CC1101_CMD_TYPE
  60. *返回:寄存器的值
  61. *依赖:底层宏定义
  62. *作者:cp1300@139.com
  63. *时间:2013-12-06
  64. *最后修改时间:2013-12-06
  65. *说明:以写的方式单直接访问将触发响应的命令
  66. */
  67. u8CC1101_Command(CC1101_CMD_TYPECmd)
  68. {
  69. u8status;
  70. CC1101_CS_L();//片选有效
  71. while(CC1101_GetMISO());
  72. status=CC1101_ReadWriteByte((u8)Cmd);//发送命令
  73. while(CC1101_GetMISO());
  74. CC1101_CS_H();//片选关闭
  75. returnstatus;
  76. }
  77. /*
  78. *函数:u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
  79. *功能:读取CC1101通用寄存器
  80. *参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE
  81. *返回:寄存器的值
  82. *依赖:底层宏定义
  83. *作者:cp1300@139.com
  84. *时间:2013-12-06
  85. *最后修改时间:2013-12-06
  86. *说明:一次读取一个寄存器
  87. */
  88. u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
  89. {
  90. u8data;
  91. CC1101_CS_L();//片选有效
  92. CC1101_ReadWriteByte((u8)READ_SINGLE|RegAddr);//发送读命令以及寄存器索引
  93. data=CC1101_ReadWriteByte(0xff);//读取
  94. CC1101_CS_H();//片选关闭
  95. returndata;
  96. }
  97. /*
  98. *函数:u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
  99. *功能:写入CC1101通用寄存器
  100. *参数:RegAddr:寄存器地址,见:CC1101_REG_TYPE,data:需要写入的数据
  101. *返回:状态寄存器的值
  102. *依赖:底层宏定义
  103. *作者:cp1300@139.com
  104. *时间:2013-12-06
  105. *最后修改时间:2013-12-06
  106. *说明:一次写入一个寄存器,并返回状态
  107. 不要对只读的寄存器进行写操作
  108. */
  109. u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
  110. {
  111. u8status;
  112. if(RegAddr>0x80)return0;//防止误操作,0x30以后的寄存器为只读状态寄存器
  113. CC1101_CS_L();//片选有效
  114. while(CC1101_GetMISO());
  115. status=CC1101_ReadWriteByte((u8)WRITE_SINGLE|RegAddr);//发送写命令以及寄存器索引
  116. CC1101_ReadWriteByte(data);//写入数据
  117. CC1101_CS_H();//片选关闭
  118. returnstatus;
  119. }
  120. #include"LED.h"
  121. voidCC1101_Init(u8Addr)
  122. {
  123. //初始化片选
  124. GPIOx_Init(GPIOA,BIT3,OUT_PP_10M);
  125. CC1101_CS_H();
  126. //初始化SCLK
  127. GPIOx_Init(GPIOC,BIT5,OUT_PP_10M);
  128. CC1101_SCLK_H();
  129. //初始化MOSI
  130. GPIOx_Init(GPIOC,BIT6,OUT_PP_10M);
  131. CC1101_MOSI_H();
  132. //初始化MISO
  133. GPIOx_Init(GPIOC,BIT7,IN_UP);
  134. CC1101_SCLK_L();
  135. CC1101_MOSI_L();
  136. //初始化GDO0,GDO2对应PC3,PC4
  137. GPIOx_Init(GPIOC,BIT3,IN_UP);
  138. GPIOx_Init(GPIOC,BIT4,IN_UP);
  139. //初始化寄存器
  140. CC1101_Command(CC1101_CMD_SRES);//复位
  141. Delay_MS(10);
  142. while(CC1101_ReadReg(CC1101_REG_AGCTEST)!=0x3F)//检测通信
  143. {
  144. LED_ON();
  145. Delay_MS(10);
  146. LED_OFF();
  147. Delay_MS(100);
  148. }
  149. LED_OFF();
  150. CC1101_WriteReg(CC1101_REG_IOCFG0,0x06);//发送提示引脚
  151. CC1101_WriteReg(CC1101_REG_IOCFG2,0x01);//接收提示引脚
  152. CC1101_WriteReg(CC1101_REG_FIFOTHR,0x0f);//RXFIFO和TXFIFO门限

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top