微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CC1101 433无线模块,STM8串口透传

CC1101 433无线模块,STM8串口透传

时间:11-19 来源:互联网 点击:

原理图: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_SINGLERegAddr);//发送读命令以及寄存器索引
  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_SINGLERegAddr);//发送写命令以及寄存器索引
  116. CC1101_ReadWriteByte(da

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

网站地图

Top