微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CC1101接口库在STM32上的移植

CC1101接口库在STM32上的移植

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

件定义

main.c

图5 库文件程序分层框图

CC1101是在上升沿读入数据,即上升沿有效,一般时钟线默认是高电平,配置此功能的寄存器时CPOL(时钟极性 )和CPHA(时钟相位)当CPOL=0时,空闲状态时,SCK保持低电平,CPOL=1时,空闲状态时,SCK保持高电平。CPHA =0时数据采样从第一个时钟边沿开始,CPHA =1时数据采样从第二个时钟边沿开始。在CC1101的配置中,这两个控制配置为CPOL=1,CPHA =1。

在改写原来TI的程序时,为了保持好的移植性,因此对所有的函数名均未做改变,文件名也尽量不改变,仅将TI_CC_MSP430.h改为TI_CC_STM32.h,当然因为是应用于两种截然不同的MCU,所以与硬件相关的宏定义有较大改变。

STM32与CC1101的通信的逻辑分析仪截图如图6-图8所示,其中图6是启动CC1101时的逻辑波形,图7是写配置寄存器时的逻辑波形,图8读寄存器时的逻辑波形。

6 启动CC1101时的逻辑波形

图 写配置寄存器时的逻辑波形

图8 读寄存器时的逻辑波形

附录:

////////////////////////////////////////////////////////////////////////////////

// 文件名: TI_CC_spi.c

// 工作环境: IAR for ARM 5.41 Kickstart,基于STM32F103ZE-EK

// 作者: 程家阳

// 生成日期: 2010.03.15

// 功能: STM32与CCxxxx进行通信的SPI底层函数,完成初始化STM32的SPI口用于连接

// CCxxxx,读写CCxxxx寄存器。

//注意:

//

//

// 相关文件:

// 修改日志:

////////////////////////////////////////////////////////////////////////////////

#include "include.h"

#include "TI_CC_spi.h"

////////////////////////////////////////////////////////////////////////////////

// 程序名 : void TI_CC_Wait(unsigned int cycles)

// 作用 : 延时

// 输入参数:无

// 输出参数:无

// 说明: uS级延时

//

////////////////////////////////////////////////////////////////////////////////

void TI_CC_Wait(unsigned int cycles)

{

while(cycles>15) // 15 cycles consumed by overhead

cycles = cycles - 6; // 6 cycles consumed each iteration

}

////////////////////////////////////////////////////////////////////////////////

// 程序名 : void TI_CC_SPISetup(void)

// 作用 : 初始化配置SPI

// 输入参数:无

// 输出参数:无

// 说明:

//

////////////////////////////////////////////////////////////////////////////////

void TI_CC_SPISetup(void)

{

SPI_InitTypeDef SPI_SST_Init_Structure;//定义SPI配置结构体

GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_SET);//CS disable

RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1 ,ENABLE);//时钟使能

//配置为双线双工模式

SPI_SST_Init_Structure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;

//主器件

SPI_SST_Init_Structure.SPI_Mode=SPI_Mode_Master;

//8bit数据帧

SPI_SST_Init_Structure.SPI_DataSize=SPI_DataSize_8b;

//时钟线默认高

SPI_SST_Init_Structure.SPI_CPOL=SPI_CPOL_High ;

//数据捕获于第二个时钟沿,这两个其实配置了时钟极性和相位

SPI_SST_Init_Structure.SPI_CPHA=SPI_CPHA_2Edge;

//NSS模式选择

SPI_SST_Init_Structure.SPI_NSS=SPI_NSS_Soft;

//波特率预分频值为 64

SPI_SST_Init_Structure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64;

//数据传输从 MSB 位开始

SPI_SST_Init_Structure.SPI_FirstBit=SPI_FirstBit_MSB;

SPI_Init(SPI1, &SPI_SST_Init_Structure); //操作

SPI_Cmd(SPI1,ENABLE); //使能

//下面的几句,具体作用不太清楚,需了解

//TI_CC_SPI_USCIA0_PxSEL |= TI_CC_SPI_USCIA0_SIMO | TI_CC_SPI_USCIA0_SOMI | TI_CC_SPI_USCIA0_UCLK;

// SPI option select

//TI_CC_SPI_USCIA0_PxDIR |= TI_CC_SPI_USCIA0_SIMO | TI_CC_SPI_USCIA0_UCLK;

// SPI TXD out direction

}

////////////////////////////////////////////////////////////////////////////////

// 程序名 : void TI_CC_SPIWriteReg(char addr, char value)

// 作用 : 向一个"addr"指向的寄存器中写入值"value"

// 输入参数:char addr :指向的地址

// char value :要写入的值

// 输出参数:无

// 说明:

//

////////////////////////////////////////////////////////////////////////////////

void TI_CC_SPIWriteReg(char addr, char value)

{

GPIO_WriteBit(TI_CC_CSn_GPIO, TI_CC_CSn_PIN, Bit_RESET); //CS enable

// Wait for CCxxxx ready

while(GPIO_ReadInputDataBit(TI_

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

网站地图

Top