您的位置 首页 FPGA

根据STM32单片机衔接射频si4438模块的方案设计

基于STM32单片机连接射频si4438模块的方案设计-SI4438射频模块参数:

1、频率范围:425-525MHz

2、数字接收信号强度指示(RSSI)

3、64字节收发数据寄存器(FIFO)

4、跳频功能

SI4438射频模块参数:

1、频率规模:425-525MHz

2、数字接纳信号强度指示(RSSI)

3、64字节收发数据寄存器(FIFO)

4、跳频功用

等!

运用SI的WDS东西生成代码

1、 挑选仿真形式

2、 芯片挑选si4438 B1形式

3、 Radio ConfiguraTIon ApplicaTIon

4、 Select ApplicaTIon

1、 Select Project

挑选BidirecTIonal packet ,双向通讯形式

2、 Configure project 装备工程

Frequency and power: 频率和功率的设置,

base freq基频,中心频率,

Channel spacing 通道空间,某个通道回想 base freq+ channel spacin*num 为频率通讯,当然会有小起浮,可是起浮不会超越 Channel spacing。

核算通道号数量:

(Base freq + channel spacin*num) 》=425MHz

(Base freq + channel spacin*num) 《=525MHz

所以Base freq的设置以及channel spacing的设置会影响到通道的数量。

Crystal:晶振默许!

其他的不动

RF parameter

这儿设置的射频参数,包含调制形式、数据速率等参数,RSSI threshold设置信号阈值。数据速率射频之间的间隔有联系,速度越快,对应的间隔要求越短。所以这应该依照自己的需求来选。

Pakect数据包的设置,包含TX和RX缓冲区的长度、前导码的装备Preamble、同步字的装备SyncWord、Field对应负载的字节数据,留意总的负载字节数为TX和RX阈值,详细分几个fields看个人需求。

NIRQ装备成RX data output,即NIRQ和单片机引脚相连单片机能够经过该引脚判别是否有数据接纳。低电平有用!然后即可生成代码!

生成的代码是根据C8051F910单片机的,咱们所用的是STM32,所以有必要做好移植。

SPI移植:

不需要生成spi.c,树立STM32 SPI装备文件:

#include

#include“stm32f10x_spi.h”

#include“STM32SPI2.h”

u8STM32SPI2_ReadWriteByte(u8TxData)

{

u8retry=0;

while((SPI2-》SR&1《《1)==0){

retry++;

if(retry》250)

return0;

}

SPI2-》DR=TxData;

retry=0;

while((SPI2-》SR&1《《0)==0)//

{

retry++;

if(retry》250)

return0;

}

returnSPI2-》DR;

}

//APB2=72M/8=9M

voidSTM32SPI2_Config(void)

{

SPI_InitTypeDefSPI_InitStructure;

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

/*ConfigureSPI2pins:SCK,MISOandMOSI*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

/*ConfigureNSELpins*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_SetBits(GPIOB,GPIO_Pin_12);

/*SPI2configuration*/

SPI_I2S_DeInit(SPI2);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);

SPI_Cmd(SPI2,DISABLE);

SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode=SPI_Mode_Master;

SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;

SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;

SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;

SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_128;//SPI_BaudRatePrescaler_64;

SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial=7;

SPI_Init(SPI2,&SPI_InitStructure);

/*EnableSPI2*/

SPI_Cmd(SPI2,ENABLE);

STM32SPI2_ReadWriteByte(0xff);//发动传输

}

//í?ò?ê±?????üê1?üò???SPIéè±?,2?êyTYPE_SPI_ALL?TD§

voidSTM32SPI2_Enable(TYPE_SPItype)

{

/*

if(type==TYPE_SPI_FLASH)//这其实没啥用

{

GPIO_SetBits(GPIOA,GPIO_Pin_4);//ê§?üRF

GPIO_ResetBits(GPIOC,GPIO_Pin_4);//ê1?üFLASH

}

else

{

*/

//GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH

GPIO_ResetBits(GPIOB,GPIO_Pin_12);//

/*

}

*/

}

voidSTM32SPI2_Disable(TYPE_SPItype)

{

if(type==TYPE_SPI_FLASH)

{

GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH

}

elseif(type==TYPE_SPI_RF)

{

GPIO_SetBits(GPIOB,GPIO_Pin_12);//ê§?üRF

}

else

{

GPIO_SetBits(GPIOC,GPIO_Pin_4);//ê§?üFLASH

GPIO_SetBits(GPIOA,GPIO_Pin_4);//ê§?üRF

}

}

radio.cradiohal层spi接口修正处

voidradio_hal_SpiWriteByte(u8byteToWrite)

{

STM32SPI2_ReadWriteByte(byteToWrite);

}

u8radio_hal_SpiReadByte(void)

{

returnSTM32SPI2_ReadWriteByte(0xFF);

}

voidradio_hal_SpiWriteData(u8byteCount,u8*pData)

{

while(byteCount–)

{

STM32SPI2_ReadWriteByte(*pData++);

}

}

voidradio_hal_SpiReadData(u8byteCount,u8*pData)

{

while(byteCount–)

{

*pData++=STM32SPI2_ReadWriteByte(0xFF);

}

}

Radio_Config:装备SDNpowerIRQ引脚

voidRadio_Config(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//oíFLASH12ó?ò???SPI,SPIò??-?úFLASHμ?3?ê??ˉ?Dμ÷ó?

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);

//RF_POWER

GPIO_InitStructure.GPIO_Pin=RF_POWER_PIN;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(RF_POWER_PORT,&GPIO_InitStructure);

GPIO_SetBits(RF_POWER_PORT,RF_POWER_PIN);

//RF_ON

GPIO_InitStructure.GPIO_Pin = RF_

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/346825.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部