在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > CC1101 433無(wú)線模塊,STM8串口透?jìng)?/p>

            CC1101 433無(wú)線模塊,STM8串口透?jìng)?/h1>
            作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201611/318109.htm

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

            下面是STM8程序

            CC1101.C

            1. /*************************************************************************************************************
            2. *文件名:CC1101.c
            3. *功能:STM8CC1101驅(qū)動(dòng)函數(shù)
            4. *作者:[email protected]
            5. *創(chuàng)建時(shí)間:2013-12-0614:35
            6. *最后修改時(shí)間:2013-12-06
            7. *詳細(xì):433MHZ收發(fā)芯片驅(qū)動(dòng)
            8. *************************************************************************************************************/
            9. #include"system.h"
            10. #include"delay.h"
            11. #include"CC1101.h"
            12. //CC1101命令掩碼
            13. #defineWRITE_BURST0x40//連續(xù)寫入
            14. #defineREAD_SINGLE0x80//讀
            15. #defineWRITE_SINGLE0x00//寫
            16. #defineREAD_BURST0xC0
            17. //連續(xù)讀
            18. #defineBURST_READ_FIFO0xff//突發(fā)讀取RXFIFO
            19. #defineBYTE_READ_FIFO0xBF//單字節(jié)讀取RXFIFO
            20. #defineBURST_WRITE_FIFO0x7f//突發(fā)寫TXFIFO
            21. #defineBYTE_WRITE_FIFO0x3f//單字節(jié)寫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讀寫一字節(jié)
            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();//時(shí)鐘上升沿寫入數(shù)據(jù)
            50. temp<<=1;nop;
            51. if(CC1101_GetMISO())temp++;
            52. CC1101_SCLK_L();//時(shí)鐘下降沿讀取數(shù)據(jù)
            53. }
            54. returntemp;
            55. }
            56. /*************************************************************************************************************************
            57. *函數(shù):u8CC1101_Command(CC1101_CMD_TYPECmd)
            58. *功能:發(fā)送單字節(jié)命令
            59. *參數(shù):Cmd;命令,見CC1101_CMD_TYPE
            60. *返回:寄存器的值
            61. *依賴:底層宏定義
            62. *作者:[email protected]
            63. *時(shí)間:2013-12-06
            64. *最后修改時(shí)間:2013-12-06
            65. *說(shuō)明:以寫的方式單直接訪問(wèn)將觸發(fā)響應(yīng)的命令
            66. *************************************************************************************************************************/
            67. u8CC1101_Command(CC1101_CMD_TYPECmd)
            68. {
            69. u8status;
            70. CC1101_CS_L();//片選有效
            71. while(CC1101_GetMISO());
            72. status=CC1101_ReadWriteByte((u8)Cmd);//發(fā)送命令
            73. while(CC1101_GetMISO());
            74. CC1101_CS_H();//片選關(guān)閉
            75. returnstatus;
            76. }
            77. /*************************************************************************************************************************
            78. *函數(shù):u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
            79. *功能:讀取CC1101通用寄存器
            80. *參數(shù):RegAddr:寄存器地址,見:CC1101_REG_TYPE
            81. *返回:寄存器的值
            82. *依賴:底層宏定義
            83. *作者:[email protected]
            84. *時(shí)間:2013-12-06
            85. *最后修改時(shí)間:2013-12-06
            86. *說(shuō)明:一次讀取一個(gè)寄存器
            87. *************************************************************************************************************************/
            88. u8CC1101_ReadReg(CC1101_REG_TYPERegAddr)
            89. {
            90. u8data;
            91. CC1101_CS_L();//片選有效
            92. CC1101_ReadWriteByte((u8)READ_SINGLERegAddr);//發(fā)送讀命令以及寄存器索引
            93. data=CC1101_ReadWriteByte(0xff);//讀取
            94. CC1101_CS_H();//片選關(guān)閉
            95. returndata;
            96. }
            97. /*************************************************************************************************************************
            98. *函數(shù):u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
            99. *功能:寫入CC1101通用寄存器
            100. *參數(shù):RegAddr:寄存器地址,見:CC1101_REG_TYPE,data:需要寫入的數(shù)據(jù)
            101. *返回:狀態(tài)寄存器的值
            102. *依賴:底層宏定義
            103. *作者:[email protected]
            104. *時(shí)間:2013-12-06
            105. *最后修改時(shí)間:2013-12-06
            106. *說(shuō)明:一次寫入一個(gè)寄存器,并返回狀態(tài)
            107. 不要對(duì)只讀的寄存器進(jìn)行寫操作
            108. *************************************************************************************************************************/
            109. u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data)
            110. {
            111. u8status;
            112. if(RegAddr>0x80)return0;//防止誤操作,0x30以后的寄存器為只讀狀態(tài)寄存器
            113. CC1101_CS_L();//片選有效
            114. while(CC1101_GetMISO());
            115. status=CC1101_ReadWriteByte((u8)WRITE_SINGLERegAddr);//發(fā)送寫命令以及寄存器索引
            116. CC1101_ReadWriteByte(data);//寫入數(shù)據(jù)
            117. CC1101_CS_H();//片選關(guān)閉
            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對(duì)應(yīng)PC3,PC4
            137. GPIOx_Init(GPIOC,BIT3,IN_UP);
            138. GPIOx_Init(GPIOC,BIT4,IN_UP);
            139. //初始化寄存器
            140. CC1101_Command(CC1101_CMD_SRES);//復(fù)位
            141. Delay_MS(10);
            142. while(CC1101_ReadReg(CC1101_REG_AGCTEST)!=0x3F)//檢測(cè)通信
            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);//發(fā)送提示引腳
            151. CC1101_WriteReg(CC1101_REG_IOCFG2,0x01);//接收提示引腳
            152. CC1101_WriteReg(CC1101_REG_FIFOTHR,0x0f);//RXFIFO和TXFIFO門限
            153. CC1101_WriteReg(CC1101_REG_SYNC1,0xD3);//同步詞匯,高字節(jié)
            154. CC1101_WriteReg(CC1101_REG_SYNC0,0x91);//同步詞匯,低字節(jié)
            155. CC1101_WriteReg(CC1101_REG_PKTLEN,CC1101_DATA_LEN);//數(shù)據(jù)包長(zhǎng)度,255
            156. CC1101_WriteReg(CC1101_REG_PKTCTRL1,0x04);//數(shù)據(jù)包自動(dòng)控制
            157. CC1101_WriteReg(CC1101_REG_PKTCTRL0,0x04);//數(shù)據(jù)包自動(dòng)控制
            158. CC1101_WriteReg(CC1101_REG_ADDR,0x00);//設(shè)備地址
            159. CC1101_WriteReg(CC1101_REG_CHANNR,0x00);//信道
            160. CC1101_WriteReg(CC1101_REG_FSCTRL1,0x06);//頻率合成器控制,高字節(jié)
            161. CC1101_WriteReg(CC1101_REG_FSCTRL0,0x00);//頻率合成器控制,低字節(jié)
            162. CC1101_WriteReg(CC1101_REG_FREQ2,0x10);//頻率控制詞匯,高字節(jié)
            163. CC1101_WriteReg(CC1101_REG_FREQ1,0xb1);//頻率控制詞匯,中間字節(jié)
            164. CC1101_WriteReg(CC1101_REG_FREQ0,0x3b);//頻率控制詞匯,低字節(jié)
            165. //2.4KBPS
            166. CC1101_WriteReg(CC1101_REG_MDMCFG4,0xF6);//調(diào)制器配置
            167. CC1101_WriteReg(CC1101_REG_MDMCFG3,0x83);//調(diào)制器配置
            168. CC1101_WriteReg(CC1101_REG_MDMCFG2,0x13);//調(diào)制器配置
            169. CC1101_WriteReg(CC1101_REG_MDMCFG1,0x22);//調(diào)制器配置
            170. CC1101_WriteReg(CC1101_REG_MDMCFG0,0xf8);//調(diào)制器配置
            171. CC1101_WriteReg(CC1101_REG_DEVIATN,0x15);//調(diào)制器背離設(shè)置
            172. CC1101_WriteReg(CC1101_REG_MCSM2,0x07);//主通信控制狀態(tài)機(jī)配置
            173. CC1101_WriteReg(CC1101_REG_MCSM1,0x30);//主通信控制狀態(tài)機(jī)配置
            174. CC1101_WriteReg(CC1101_REG_MCSM0,0x18);//主通信控制狀態(tài)機(jī)配置
            175. CC1101_WriteReg(CC1101_REG_FOCCFG,0x16);//頻率偏移補(bǔ)償配置
            176. CC1101_WriteReg(CC1101_REG_BSCFG,0x6c);//位同步配置
            177. CC1101_WriteReg(CC1101_REG_AGCTRL2,0x03);//AGC控制
            178. CC1101_WriteReg(CC1101_REG_AGCTRL1,0x40);//AGC控制
            179. CC1101_WriteReg(CC1101_REG_AGCTRL0,0x91);//AGC控制
            180. CC1101_WriteReg(CC1101_REG_WOREVT1,0x87);//高字節(jié)時(shí)間0暫停
            181. CC1101_WriteReg(CC1101_REG_WOREVT0,0x6b);//低字節(jié)時(shí)間0暫停
            182. CC1101_WriteReg(CC1101_REG_WORCTRL,0xfb);//電磁波激活控制
            183. CC1101_WriteReg(CC1101_REG_FREND1,0x56);//前末端RX配置
            184. CC1101_WriteReg(CC1101_REG_FREND0,0x10);//前末端TX配置
            185. CC1101_WriteReg(CC1101_REG_FSCAL3,0xe9);//頻率合成器校準(zhǔn)
            186. CC1101_WriteReg(CC1101_REG_FSCAL2,0x2a);//頻率合成器校準(zhǔn)
            187. CC1101_WriteReg(CC1101_REG_FSCAL1,0x00);//頻率合成器校準(zhǔn)
            188. CC1101_WriteReg(CC1101_REG_FSCAL0,0x1f);//頻率合成器校準(zhǔn)
            189. CC1101_WriteReg(CC1101_REG_RCCTRL1,0x41);//RC振蕩器配置
            190. CC1101_WriteReg(CC1101_REG_RCCTRL0,0x00);//RC振蕩器配置
            191. CC1101_WriteReg(CC1101_REG_FSTEST,0x59);//頻率合成器校準(zhǔn)控制
            192. //10DB
            193. //CC1101_WriteReg(CC1101_REG_PATABLE0,0xc0);
            194. //CC1101_WriteReg(CC1101_REG_PATABLE1,0xc0);
            195. /*CC1101_WriteReg(CC1101_REG_PATABLE2,0xc0);
            196. CC1101_WriteReg(CC1101_REG_PATABLE3,0xc0);
            197. CC1101_WriteReg(CC1101_REG_PATABLE4,0xc0);
            198. CC1101_WriteReg(CC1101_REG_PATABLE5,0xc0);
            199. CC1101_WriteReg(CC1101_REG_PATABLE6,0xc0);
            200. CC1101_WriteReg(CC1101_REG_PATABLE7,0xc0);*/
            201. Delay_MS(10);
            202. }
            203. /*************************************************************************************************************************
            204. *函數(shù):voidCC1101_WriteTxFIFO(u8*pBuff,u8len)
            205. *功能:寫入數(shù)據(jù)到發(fā)送緩沖區(qū)
            206. *參數(shù):pBuff:需要寫入的數(shù)據(jù)緩沖區(qū)指針,len:需要寫入的數(shù)據(jù)長(zhǎng)度
            207. *返回:無(wú)
            208. *依賴:底層宏定義
            209. *作者:[email protected]
            210. *時(shí)間:2014-01-01
            211. *最后修改時(shí)間:2014-01-01
            212. *說(shuō)明:寫入數(shù)據(jù)到發(fā)送FIFO
            213. *************************************************************************************************************************/
            214. voidCC1101_WriteTxFIFO(u8*pBuff,u8len)
            215. {
            216. u16i;
            217. CC1101_CS_L();
            218. CC1101_ReadWriteByte(BURST_WRITE_FIFO);
            219. for(i=0;i
            220. {
            221. CC1101_ReadWriteByte(pBuff[i]);
            222. }
            223. CC1101_CS_H();
            224. }
            225. /*************************************************************************************************************************
            226. *函數(shù):voidCC1101_ReadRxFIFO(u8*pBuff,u8len)
            227. *功能:讀取接收緩沖區(qū)
            228. *參數(shù):pBuff:需要讀取的數(shù)據(jù)緩沖區(qū)指針,len:需要讀取的數(shù)據(jù)長(zhǎng)度
            229. *返回:無(wú)
            230. *依賴:底層宏定義
            231. *作者:[email protected]
            232. *時(shí)間:2014-01-01
            233. *最后修改時(shí)間:2014-01-01
            234. *說(shuō)明:從接收FIFO讀取數(shù)據(jù)
            235. *************************************************************************************************************************/
            236. voidCC1101_ReadRxFIFO(u8*pBuff,u8len)
            237. {
            238. u16i;
            239. CC1101_CS_L();
            240. CC1101_ReadWriteByte(BURST_READ_FIFO);
            241. for(i=0;i
            242. {
            243. pBuff[i]=CC1101_ReadWriteByte(0xff);
            244. }
            245. CC1101_CS_H();
            246. }
            247. //發(fā)送數(shù)據(jù),將緩沖區(qū)數(shù)據(jù)全部發(fā)送出去
            248. //一次最多64B,因?yàn)槭艿紽IFO限制
            249. voidCC1101_RfDataSend(u8*pBuff,u8len)
            250. {
            251. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            252. CC1101_Command(CC1101_CMD_SFTX);//清空發(fā)送緩沖區(qū)
            253. CC1101_WriteTxFIFO(pBuff,len);//寫入數(shù)據(jù)到發(fā)送緩沖區(qū)
            254. CC1101_Command(CC1101_CMD_STX);//開始發(fā)送數(shù)據(jù)
            255. while(!CC1101_GDO0);
            256. while(CC1101_GDO0);
            257. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            258. }
            259. //發(fā)送數(shù)據(jù)包
            260. //每次發(fā)送最多65B,第一字節(jié)為長(zhǎng)度,數(shù)據(jù)多將會(huì)重復(fù)發(fā)送
            261. //可以發(fā)送任意大小
            262. //CC1101PackSize有效數(shù)據(jù)包大小,0-64,也就是CC1101單次發(fā)送數(shù)據(jù)大小-1
            263. voidCC1101_RfDataSendPack(u8*pBuff,u16len)
            264. {
            265. u16i,m,n,j;
            266. m=len/(CC1101_DATA_LEN-1);//整數(shù)數(shù)據(jù)幀數(shù)量
            267. n=len%(CC1101_DATA_LEN-1);//余數(shù)
            268. //發(fā)送整數(shù)包
            269. for(i=0;i
            270. {
            271. Delay_MS(1);
            272. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            273. CC1101_Command(CC1101_CMD_SFTX);//清空發(fā)送緩沖區(qū)
            274. CC1101_CS_L();
            275. CC1101_ReadWriteByte(BURST_WRITE_FIFO);
            276. CC1101_ReadWriteByte(CC1101_DATA_LEN-1);//先寫入包大小
            277. for(j=0;j<(CC1101_DATA_LEN-1);j++)
            278. {
            279. CC1101_ReadWriteByte(*pBuff++);//寫入數(shù)據(jù)到發(fā)送緩沖區(qū)
            280. }
            281. CC1101_CS_H();
            282. CC1101_Command(CC1101_CMD_STX);//開始發(fā)送數(shù)據(jù)
            283. while(!CC1101_GDO0);
            284. while(CC1101_GDO0);//等待發(fā)送完成
            285. }
            286. //發(fā)送余數(shù)包
            287. if(n!=0)
            288. {
            289. Delay_MS(1);
            290. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            291. CC1101_Command(CC1101_CMD_SFTX);//清空發(fā)送緩沖區(qū)
            292. CC1101_CS_L();
            293. CC1101_ReadWriteByte(BURST_WRITE_FIFO);
            294. CC1101_ReadWriteByte(n);//先寫入包大小
            295. for(j=0;j
            296. {
            297. CC1101_ReadWriteByte(*pBuff++);//寫入數(shù)據(jù)到發(fā)送緩沖區(qū)
            298. }
            299. CC1101_CS_H();
            300. CC1101_Command(CC1101_CMD_STX);//開始發(fā)送數(shù)據(jù)
            301. while(!CC1101_GDO0);
            302. while(CC1101_GDO0);//等待發(fā)送完成
            303. }
            304. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            305. }
            306. //讀取芯片狀態(tài)
            307. u8CC1101_GetStatus(void)
            308. {
            309. returnCC1101_WriteReg(CC1101_REG_TEST2,0x98);
            310. }

            CC1101.H

            1. /*************************************************************************************************************
            2. *文件名:CC1101.c
            3. *功能:STM8CC1101驅(qū)動(dòng)函數(shù)
            4. *作者:[email protected]
            5. *創(chuàng)建時(shí)間:2013-12-0614:35
            6. *最后修改時(shí)間:2013-12-06
            7. *詳細(xì):433MHZ收發(fā)芯片驅(qū)動(dòng)
            8. *************************************************************************************************************/
            9. #ifndef_CC1101_H_
            10. #define_CC1101_H_
            11. #include"system.h"
            12. //CC1101命令
            13. //以寫的方式單直接訪問(wèn)將觸發(fā)響應(yīng)的命令
            14. typedefenum
            15. {
            16. CC1101_CMD_SRES=0x30,//重啟
            17. CC1101_CMD_SFSTXON=0x31,//開啟和校準(zhǔn)頻率合成器(若MCSM0.FSAUTOCAL=1)
            18. CC1101_CMD_SXOFF=0x32,//關(guān)閉晶體振蕩器
            19. CC1101_CMD_SCAL=0x33,//校準(zhǔn)頻率合成器并關(guān)斷(開啟快速啟動(dòng))。在不設(shè)置手動(dòng)校準(zhǔn)模式(MCSM0.FS_AUTOCAL=0)的情況下,SCAL能從空閑模式濾波。
            20. CC1101_CMD_SRX=0x34,//啟用RX。若上一狀態(tài)為空閑且MCSM0.FS_AUTOCAL=1則首先運(yùn)行校準(zhǔn)。
            21. CC1101_CMD_STX=0x35,//空閑狀態(tài):?jiǎn)⒂肨X。若MCSM0.FS_AUTOCAL=1首先運(yùn)行校準(zhǔn)。若在RX狀態(tài)且CCA啟用:若信道為空則進(jìn)入TX
            22. CC1101_CMD_SIDLE=0x36,//離開RX/TX,關(guān)斷頻率合成器并離開電磁波激活模式若可用
            23. CC1101_CMD_SAFC=0x37,//運(yùn)行22.1節(jié)列出的頻率合成器的AFC調(diào)節(jié)
            24. CC1101_CMD_SWOR=0x38,//運(yùn)行27.5節(jié)描述的自動(dòng)RX選舉序列(電磁波激活)
            25. CC1101_CMD_SPWD=0x39,//當(dāng)CSn為高時(shí)進(jìn)入功率降低模式。
            26. CC1101_CMD_SFRX=0x3a,//沖洗RXFIFO緩沖
            27. CC1101_CMD_SFTX=0x3b,//沖洗TXFIFO緩沖
            28. CC1101_CMD_SWORRST=0x3c,//重新設(shè)置真實(shí)時(shí)間時(shí)鐘
            29. CC1101_CMD_SNOP=0x3d,//無(wú)操作??赡苡脕?lái)為更簡(jiǎn)單的軟件將濾波命令變?yōu)?字節(jié)。
            30. }CC1101_CMD_TYPE;
            31. //CC1101寄存器定義
            32. typedefenum
            33. {
            34. //可讀寫的寄存器
            35. CC1101_REG_IOCFG2=0x00,//GDO2輸出腳配置
            36. CC1101_REG_IOCFG1=0x01,//GDO1輸出腳配置
            37. CC1101_REG_IOCFG0=0x02,//GDO0輸出腳配置
            38. CC1101_REG_FIFOTHR=0x03,//RXFIFO和TXFIFO門限
            39. CC1101_REG_SYNC1=0x04,//同步詞匯,高字節(jié)
            40. CC1101_REG_SYNC0=0x05,//同步詞匯,低字節(jié)
            41. CC1101_REG_PKTLEN=0x06,//數(shù)據(jù)包長(zhǎng)度
            42. CC1101_REG_PKTCTRL1=0x07,//數(shù)據(jù)包自動(dòng)控制
            43. CC1101_REG_PKTCTRL0=0x08,//數(shù)據(jù)包自動(dòng)控制
            44. CC1101_REG_ADDR=0x09,//設(shè)備地址
            45. CC1101_REG_CHANNR=0x0a,//信道數(shù)
            46. CC1101_REG_FSCTRL1=0x0b,//頻率合成器控制,高字節(jié)
            47. CC1101_REG_FSCTRL0=0x0c,//頻率合成器控制,低字節(jié)
            48. CC1101_REG_FREQ2=0x0d,//頻率控制詞匯,高字節(jié)
            49. CC1101_REG_FREQ1=0x0e,//頻率控制詞匯,中間字節(jié)
            50. CC1101_REG_FREQ0=0x0f,//頻率控制詞匯,低字節(jié)
            51. CC1101_REG_MDMCFG4=0x10,//調(diào)制器配置
            52. CC1101_REG_MDMCFG3=0x11,//調(diào)制器配置
            53. CC1101_REG_MDMCFG2=0x12,//調(diào)制器配置
            54. CC1101_REG_MDMCFG1=0x13,//調(diào)制器配置
            55. CC1101_REG_MDMCFG0=0x14,//調(diào)制器配置
            56. CC1101_REG_DEVIATN=0x15,//調(diào)制器背離設(shè)置
            57. CC1101_REG_MCSM2=0x16,//主通信控制狀態(tài)機(jī)配置
            58. CC1101_REG_MCSM1=0x17,//主通信控制狀態(tài)機(jī)配置
            59. CC1101_REG_MCSM0=0x18,//主通信控制狀態(tài)機(jī)配置
            60. CC1101_REG_FOCCFG=0x19,//頻率偏移補(bǔ)償配置
            61. CC1101_REG_BSCFG=0x1a,//位同步配置
            62. CC1101_REG_AGCTRL2=0x1b,//AGC控制
            63. CC1101_REG_AGCTRL1=0x1c,//AGC控制
            64. CC1101_REG_AGCTRL0=0x1d,//AGC控制
            65. CC1101_REG_WOREVT1=0x1e,//高字節(jié)時(shí)間0暫停
            66. CC1101_REG_WOREVT0=0x1f,//低字節(jié)時(shí)間0暫停
            67. CC1101_REG_WORCTRL=0x20,//電磁波激活控制
            68. CC1101_REG_FREND1=0x21,//前末端RX配置
            69. CC1101_REG_FREND0=0x22,//前末端TX配置
            70. CC1101_REG_FSCAL3=0x23,//頻率合成器校準(zhǔn)
            71. CC1101_REG_FSCAL2=0x24,//頻率合成器校準(zhǔn)
            72. CC1101_REG_FSCAL1=0x25,//頻率合成器校準(zhǔn)
            73. CC1101_REG_FSCAL0=0x26,//頻率合成器校準(zhǔn)
            74. CC1101_REG_RCCTRL1=0x27,//RC振蕩器配置
            75. CC1101_REG_RCCTRL0=0x28,//RC振蕩器配置
            76. CC1101_REG_FSTEST=0x29,//頻率合成器校準(zhǔn)控制
            77. CC1101_REG_PTEST=0x2a,//產(chǎn)品測(cè)試
            78. CC1101_REG_AGCTEST=0x2b,//AGC測(cè)試
            79. CC1101_REG_TEST2=0x2c,//不同的測(cè)試設(shè)置
            80. CC1101_REG_TEST1=0x2d,//不同的測(cè)試設(shè)置
            81. CC1101_REG_TEST0=0x2e,//不同的測(cè)試設(shè)置
            82. //只讀的狀態(tài)寄存器,如果寫入將導(dǎo)致命令濾波
            83. CC1101_REG_PARTNUM=0xf0,//CC2550的組成部分?jǐn)?shù)目
            84. CC1101_REG_VERSION=0xf1,//當(dāng)前版本數(shù)
            85. CC1101_REG_FREQEST=0xf2,//頻率偏移估計(jì)
            86. CC1101_REG_LQI=0xf3,//連接質(zhì)量的解調(diào)器估計(jì)
            87. CC1101_REG_RSSI=0xf4,//接收信號(hào)強(qiáng)度指示
            88. CC1101_REG_MARCSTATE=0xf5,//控制狀態(tài)機(jī)狀態(tài)
            89. CC1101_REG_WORTIME1=0xf6,//WOR計(jì)時(shí)器高字節(jié)
            90. CC1101_REG_WORTIME0=0xf7,//WOR計(jì)時(shí)器低字節(jié)
            91. CC1101_REG_PKTSTATUS=0xf8,//當(dāng)前GDOx狀態(tài)和數(shù)據(jù)包狀態(tài)
            92. CC1101_REG_VCOVCDAC=0xf9,//PLL校準(zhǔn)模塊的當(dāng)前設(shè)定
            93. CC1101_REG_TXBYTES=0xfA,//TXFIFO中的下溢和比特?cái)?shù)
            94. CC1101_REG_RXBYTES=0xfB,//RXFIFO中的下溢和比特?cái)?shù)
            95. //手冊(cè)上面沒有的
            96. CC1101_REG_STATUS1=0xfc,//
            97. CC1101_REG_STATUS0=0xfd,//
            98. //功率控制
            99. CC1101_REG_PATABLE0=0x40,
            100. CC1101_REG_PATABLE1=0x41,
            101. CC1101_REG_PATABLE2=0x42,
            102. CC1101_REG_PATABLE3=0x43,
            103. CC1101_REG_PATABLE4=0x44,
            104. CC1101_REG_PATABLE5=0x45,
            105. CC1101_REG_PATABLE6=0x46,
            106. CC1101_REG_PATABLE7=0x47,
            107. }CC1101_REG_TYPE;
            108. //IO
            109. #defineCC1101_GDO0(GPIOC->IDR&BIT3)//PC3
            110. #defineCC1101_GDO2(GPIOC->IDR&BIT4)//PC4
            111. voidCC1101_Init(u8Addr);//初始化CC1101
            112. u8CC1101_ReadReg(CC1101_REG_TYPERegAddr);//讀取CC1101通用寄存器
            113. u8CC1101_WriteReg(CC1101_REG_TYPERegAddr,u8data);//寫入CC1101通用寄存器
            114. u8CC1101_Command(CC1101_CMD_TYPECmd);//發(fā)送單字節(jié)命令
            115. u8CC1101_GetStatus(void);//讀取芯片狀態(tài)
            116. voidCC1101_RfDataSend(u8*pBuff,u8len);
            117. voidCC1101_ReadRxFIFO(u8*pBuff,u8len);
            118. //CC1101PackSize有效數(shù)據(jù)包大小,0-64,也就是CC1101單次發(fā)送數(shù)據(jù)大小-1
            119. voidCC1101_RfDataSendPack(u8*pBuff,u16len);
            120. #endif//CC1101

            MAIN.C收發(fā)透?jìng)?/p>

            1. #include"system.h"
            2. #include"uart1.h"
            3. #include"delay.h"
            4. #include"main.h"
            5. #include"LED.h"
            6. #include"cc1101.h"
            7. //串口緩沖區(qū)
            8. #defineUART_BUFF_SIZE256//串口接收緩沖區(qū)大小
            9. u8UartBuff[2][UART_BUFF_SIZE];//串口接收緩沖區(qū)
            10. u16UartLen1=0;//串口接收數(shù)據(jù)長(zhǎng)度
            11. u16UartLen2=0;//串口接收數(shù)據(jù)長(zhǎng)度
            12. //CC1101緩沖區(qū)
            13. #defineRF_BUFF_SIZE64//CC1101緩沖區(qū)大小
            14. u8RfBuff[RF_BUFF_SIZE];//CC1101緩沖區(qū)
            15. u8RfLen=0;//CC1101接收緩沖區(qū)大小
            16. //緩沖區(qū)選擇
            17. u8UART_RxNum=0;//串口緩沖區(qū)選擇
            18. //主函數(shù)
            19. voidmain(void)
            20. {
            21. u8LastNum=0;
            22. u32delay=0;
            23. SYS_ClockInit();//初始化系統(tǒng)時(shí)鐘為內(nèi)部晶振,16MHZ
            24. //初始化LED
            25. LED_Init();
            26. //初始化串口
            27. UART1_Init(115200,ENABLE);//初始化UART1,開啟接收中斷
            28. UART1_SetRxBuff(UartBuff[UART_RxNum],UART_BUFF_SIZE);//設(shè)置串口1接收緩沖區(qū)
            29. CC1101_Init(0Xaa);
            30. //CC1101_WriteReg(CC1101_REG_PATABLE1,0xc0);
            31. CC1101_WriteReg(CC1101_REG_PATABLE0,0x00);
            32. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            33. CC1101_Command(CC1101_CMD_SRX);//進(jìn)入接收模式
            34. SYS_EnableInterrupt();//開啟系統(tǒng)中斷
            35. while(1)
            36. {
            37. if(++delay==120)
            38. {
            39. delay=0;
            40. UartLen1=UART1_GetRxCnt();//獲取接收數(shù)據(jù)數(shù)量
            41. if(UartLen1>0)
            42. {
            43. SYS_DisableInterrupt();//關(guān)閉中斷
            44. LED_ON();
            45. LastNum=UART_RxNum;//記錄上一次的緩沖區(qū)編號(hào)
            46. UART_RxNum=(~UART_RxNum)&0x01;
            47. UART1_SetRxBuff(UartBuff[UART_RxNum],UART_BUFF_SIZE);//切換串口接收緩沖區(qū)
            48. //UART1_ClearRxCnt();//清除接收計(jì)數(shù)器
            49. SYS_EnableInterrupt();//開啟系統(tǒng)中斷
            50. CC1101_WriteReg(CC1101_REG_PATABLE0,0xc0);//開啟天線增益
            51. CC1101_RfDataSendPack(UartBuff[LastNum],UartLen1);//CC1101發(fā)送數(shù)據(jù)包
            52. CC1101_WriteReg(CC1101_REG_PATABLE0,0);//關(guān)閉天線增益
            53. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            54. CC1101_Command(CC1101_CMD_SRX);//進(jìn)入接收模式
            55. LED_OFF();
            56. }
            57. }
            58. //CC1101接收到數(shù)據(jù)
            59. if(CC1101_GDO2)
            60. {
            61. LED_ON();
            62. RfLen=CC1101_ReadReg(CC1101_REG_RXBYTES);
            63. CC1101_ReadRxFIFO(RfBuff,RfLen);
            64. UART1_SendData(&RfBuff[1],RfBuff[0]);//第0B為數(shù)據(jù)長(zhǎng)度,后面的為有效數(shù)據(jù)
            65. CC1101_Command(CC1101_CMD_SIDLE);//退出當(dāng)前模式
            66. CC1101_Command(CC1101_CMD_SFRX);//清除接收緩沖區(qū)
            67. CC1101_Command(CC1101_CMD_SRX);//進(jìn)入接收模式
            68. LED_OFF();
            69. }
            70. }
            71. }

            實(shí)現(xiàn)透?jìng)?調(diào)試中發(fā)現(xiàn)問(wèn)題就是接收的時(shí)候必須關(guān)閉發(fā)射增益,否則無(wú)法接收,應(yīng)該是內(nèi)部發(fā)送接收天線進(jìn)行了切換.

            實(shí)物圖



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉