stm32f103c8 使用cc1101模块

背景

cc1101模块给的是stm8的例程,工作用不上,要用stm32的,所以要做移植;该模块使用的是spi通信,所以需要配置一下stm32的spi1来进行使用;

stm32 SPI1

我使用的是SPI1,配置如下,不同型号,配成不同的脚位就可以了;

SPI1的读写:

cc1101操作文件

个人感觉cc1101的坑在于配置初始化的参数,虽然说可以使用smartRF来进行生成,但是这个过程会产生很多问题,假如我要用ASK调通了,但是我换成GFSK发现不行;这个初始化的配置寄存器我没有深究,反正你看了初始化代码和发送接收代码和我的差不多,但是就是不通的话,大多数就是初始化的时候寄存器配置有问题。下面共享一下代码,我就不放GitHub,感觉嵌入式没什么人用GitHub,Linux和前端,服务端用得比较多:
cc1101.h:

cc1101.c:

/********************************************************************************* 文件名:     	cc1101.c** 版本:  		1.0** 工作环境: 	RealView MDK-ARM 5** 作者: 		huangyong** 生成日期: 	2017-09-18** 功能:		获取外部flash的关于要跳转的应用程序的配置信息**          目前外部flash的配置信息存在w25x32的第一个block(0x000000h)**          imageA地址在第二个block(0x010000h),imageB地址在第三个block(0x020000h)** 相关文件:	** 修改日志:	2017-09-18   创建文档*******************************************************************************//* 包含头文件 *****************************************************************/#include "cc1101.h"/* 变量 ----------------------------------------------------------------------*//*******************************************************************************  * @函数名称	  cc1101_init  * @函数说明   初始化cc1101模块  * @输入参数   无  * @输出参数   无  * @返回参数   无*******************************************************************************//*******************************************************************************  * @函数名称	  cc1101_sentData  * @函数说明   cc1101模块发送数据  * @输入参数   无  * @输出参数   无  * @返回参数   无*******************************************************************************//*================================================================================Copyright   : Ebyte electronic co.,LTDWebsite     : http://yh-ebyte.taobao.com      http://yiheliyong.cn.alibaba.comDescription : This module contains the low level operations for CC1101================================================================================*///10, 7, 5, 0, -5, -10, -15, -20, dbm output power, 0x12 == -30dbm//u8 PaTabel[] = { 0xc0, 0xC8, 0x84, 0x60, 0x68, 0x34, 0x1D, 0x0E};//433M的table u8 PaTabel[] = { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00};// Sync word qualifier mode = 30/32 sync word bits detected // CRC autoflush = false // Channel spacing = 199.951172 // Data format = Normal mode // Data rate = 2.00224 // RX filter BW = 58.035714 // PA ramping = false // Preamble count = 4 // Whitening = false // Address config = No address check // Carrier frequency = 400.199890 // Device address = 0 // TX power = 10 // Manchester enable = false // CRC enable = true // Deviation = 5.157471 // Packet length mode = Variable packet length mode. Packet length configured by the first byte after sync word // Packet length = 255 // Modulation format = GFSK // Base frequency = 399.999939 // Modulated = true // Channel number = 1 // PA table #define PA_TABLE {0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}static const u8 CC1101InitData[24][2]= {/*  {CC1101_IOCFG0,      0x06},  {CC1101_FIFOTHR,     0x47},  {CC1101_PKTCTRL0,    0x05},  {CC1101_CHANNR,      0x00},  {CC1101_FSCTRL1,     0x08},	{CC1101_FREQ2,       0x10},//433.92  {CC1101_FREQ1,       0xB0},  {CC1101_FREQ0,       0x3f},//  {CC1101_FREQ2,       0x10},//433.862//  {CC1101_FREQ1,       0xAf},//  {CC1101_FREQ0,       0xdf},  {CC1101_MDMCFG4,     0x5B},  {CC1101_MDMCFG3,     0xF8},  {CC1101_MDMCFG2,     0x03},  {CC1101_DEVIATN,     0x47},  {CC1101_MCSM0,       0x18},  {CC1101_FOCCFG,      0x1D},  {CC1101_WORCTRL,     0xFB},  {CC1101_FSCAL3,      0xEA},  {CC1101_FSCAL2,      0x2A},  {CC1101_FSCAL1,      0x00},  {CC1101_FSCAL0,      0x11},  {CC1101_TEST2,       0x81},  {CC1101_TEST1,       0x35},  {CC1101_MCSM1,       0x3B},*/	 //2-FSK  {CC1101_IOCFG0,      0x06},  {CC1101_FIFOTHR,     0x47},  {CC1101_PKTCTRL0,    0x05},  {CC1101_CHANNR,      0x01},  {CC1101_FSCTRL1,     0x06},	{CC1101_FREQ2,       0x10},   //433.92  {CC1101_FREQ1,       0xB0},  {CC1101_FREQ0,       0x3f},  {CC1101_MDMCFG4,     0xF6},  {CC1101_MDMCFG3,     0x43},		//2.00224kBaud  58.035714khz  {CC1101_MDMCFG2,     0x03},  {CC1101_MDMCFG1,     0x20},  {CC1101_MDMCFG0,     0x00},	  {CC1101_DEVIATN,     0x15},   //0x15:5.157471khz 0x34:19khz, 0x77:380.85khz,0x64:152khz,0x71:228.5khz  {CC1101_MCSM0,       0x18},  {CC1101_FOCCFG,      0x16},  {CC1101_WORCTRL,     0xFB},  {CC1101_FSCAL3,      0xE9},  {CC1101_FSCAL2,      0x2A},  {CC1101_FSCAL1,      0x00},  {CC1101_FSCAL0,      0x1F},  {CC1101_TEST2,       0x81},  {CC1101_TEST1,       0x35},  {CC1101_TEST0,       0x09},	};/*read a byte from the specified register*/u8 CC1101ReadReg( u8 addr );/*Read some bytes from the rigisters continously*/void CC1101ReadMultiReg( u8 addr, u8 *buff, u8 size );/*Write a byte to the specified register*/void CC1101WriteReg( u8 addr, u8 value );/*Flush the TX buffer of CC1101*/void CC1101ClrTXBuff( void );/*Flush the RX buffer of CC1101*/void CC1101ClrRXBuff( void );/*Get received count of CC1101*/u8 CC1101GetRXCnt( void );/*Reset the CC1101 device*/void CC1101Reset( void );/*Write some bytes to the specified register*/void CC1101WriteMultiReg( u8 addr, u8 *buff, u8 size );/*================================================================================Function : CC1101WORInit( )    Initialize the WOR function of CC1101INPUT    : NoneOUTPUT   : None================================================================================*/void  CC1101WORInit( void ){    CC1101WriteReg(CC1101_MCSM0,0x18);    CC1101WriteReg(CC1101_WORCTRL,0x78); //Wake On Radio Control    CC1101WriteReg(CC1101_MCSM2,0x00);    CC1101WriteReg(CC1101_WOREVT1,0x8C);    CC1101WriteReg(CC1101_WOREVT0,0xA0);		CC1101WriteCmd( CC1101_SWORRST );}/*================================================================================Function : CC1101ReadReg( )    read a byte from the specified registerINPUT    : addr, The address of the registerOUTPUT   : the byte read from the rigister================================================================================*/u8 CC1101ReadReg( u8 addr ){    u8 i;    CSN_L; //CSN = 0;    SPIx_ReadWriteByte( addr | READ_SINGLE);    i = SPIx_ReadWriteByte( 0xFF );    CSN_H;//CSN = 1;    return i;}/*================================================================================Function : CC1101ReadMultiReg( )    Read some bytes from the rigisters continouslyINPUT    : addr, The address of the register   buff, The buffer stores the data   size, How many bytes should be readOUTPUT   : None================================================================================*/void CC1101ReadMultiReg( u8 addr, u8 *buff, u8 size ){    u8 i, j;    CSN_L; //CSN = 0;    SPIx_ReadWriteByte( addr | READ_BURST);    for( i = 0; i 来源:DavidHuang123
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月8日
下一篇 2019年9月8日

相关推荐