背景
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进行处理,非常感谢!