CC1101接口库在STM32上的移植
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_
CC1101接口库STM32移 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
