当前位置: 首页 > 系统教程 > Win7系统教程 > 详细页面

STM32连接射频si4438模块

发布时间:2019-03-15 15:44:13 文章来源:win7 64位系统下载 作者: IT狐狸王

}

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

ret = 0;

接收信号:

STM32单片机官方开发工具

GPIO_InitTypeDef GPIO_InitStructure;

}

vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber, pRadioConfiguration->Radio_PacketLength);

u16 i;

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );

….

void radio_hal_SpiWriteByte(u8 byteToWrite)

SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

SPI_InitStructure.SPI_CRCPolynomial = 7;

si446x_fifo_info(0x00);

参数,包括调制模式、数据速率等参数,RSSI threshold设置信号阈值。数据速率射频

#include

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

GPIO_InitStructure.GPIO_Pin = RF_

SPI移植:

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

else

/* Configure SPI2 pins: SCK, MISO and MOSI */

#include compiler_defs.h

u16 i,crc16;

u8* ptr;

break;

*/

/* Configure NSEL pins */

{

4、跳频功能

*pData++ = STM32SPI2_ReadWriteByte(0xFF);

break;

return SI4338RecvLen;

发送端:使用这个函数发送既可以!

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

Radio_Config:配置SDN power IRQ引脚

GPIO_InitStructure.GPIO_Pin = RF_SDN_PIN;

return 0;

void radio_hal_SpiReadData(u8 byteCount, u8* pData)

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

#include si446x_api_lib.h

{

{

}

bMain_IT_Status = bRadio_Check_Tx_RX();

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

/* SPI2 configuration */

}

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

memset(ptr,0,len);

while(byteCount--)

case SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT:{

2、 芯片选择si4438 B1模式

#include

if(buf == NULL) return -1;

}

RF parameter

ptr = (u8*)buf;

GPIO_SetBits(RF_POWER_PORT, RF_POWER_PIN);

{

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

//#include hardware_defs.h

if(ptr == NULL) return -1;

//#include platform_defs.h

生成的代码是基于C8051F910单片机的,用u盘装xp系统教程视频,我们所用的是,所以必须做好移植。

if(retry>250)

vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber, 64);

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

SPI_Cmd(SPI2, ENABLE);

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

}

GPIO_Init(GPIOB, GPIO_InitStructure);

case SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT:

这里设置的射频

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

SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;

}

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//????ê?è?

//RF_IRQ

}

void STM32SPI2_Disable(TYPE_SPI type)

case SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT:{

//注意:需要在U8 bRadio_Check_Tx_RX(void)函数把接收的数据拷贝出来,然后再RECV函数memcpy过来就可以了。

//RF_SDN

u8* ptr;

}

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

{

break;

//APB2=72M/8=9M

u8 retry=0;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

{

switch (bMain_IT_Status)

//#include driversradioSi446xsi446x_patch.h

return ret;

计算通道号数量:

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

case SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT:{

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

default:

vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber,pRadioConfiguration->Radio_PacketLength);

GPIO_Init(RF_ON_PORT, GPIO_InitStructure);

{

{

u8 radio_hal_NirqLevel(void)

//#include si446x_nirq.h

{

接收函数:

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

GPIO_Init(RF_SDN_PORT, GPIO_InitStructure);

{

#define SILABS_RADIO_SI446X

void STM32SPI2_Enable(TYPE_SPI type)

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

{

4、 Select Application

SEGMENT_VARIABLE(bMain_IT_Status, U8, SEG_XDATA);

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

其他的不动

}

}

base freq基频,如何重装电脑系统xp,中心频率,

*/

#include stm32f10x_spi.h

}

default: ;break;

/*

#endif

}

//RF_POWER

switch (bMain_IT_Status)

//vRadio_StartTx_Variable_Packet(pRadioConfiguration->Radio_ChannelNumber,ptr, len);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

void radio_hal_DeassertShutdown(void)

vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber,0u); 启动接收

//处理接收的数据

int ret = -1;

return STM32SPI2_ReadWriteByte(0xFF);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);

int SI4338SendData(void* buf,u32 len){

GPIO_SetBits(RF_SDN_PORT, RF_SDN_PIN);

}

return SPI2->DR;

else

break;

}

if(type == TYPE_SPI_FLASH)

GPIO_InitTypeDef GPIO_InitStructure;

{

3、 Radio Configuration Application

#include radio_hal.h

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

GPIO_SetBits(GPIOB, GPIO_Pin_12);

}

GPIO_SetBits(RF_ON_PORT, RF_ON_PIN);

} /* switch */

bMain_IT_Status = bRadio_Check_Tx_RX();

SPI2->DR=TxData;

u8 radio_hal_SpiReadByte(void)

#include radio_config.h

GPIO_SetBits(RF_SDN_PORT, RF_SDN_PIN);

SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;//SPI_BaudRatePrescaler_64;

#include si446x_defs.h

STM32单片机中文官网

{

if(retry>250)

retry++;

if(Si446xCmd.GET_INT_STATUS.PH_PEND SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT)

return GPIO_ReadInputDataBit(RF_IRQ_PORT, RF_IRQ_PIN);

}

else if(type == TYPE_SPI_RF)

while(byteCount--)

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

void STM32SPI2_Config(void)

NIRQ配置成RX data output,即NIRQ和单片机引脚相连单片机可以通过该引脚判断是否有数据接收。低电平有效!然后即可生成代码!

//recv OK ,you must start RX!

vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber, pRadioConfiguration->Radio_PacketLength);

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(RF_POWER_PORT, GPIO_InitStructure);

STM32SPI2_ReadWriteByte(byteToWrite);

while(1){

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

return SI4338RecvLen;

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

#if 1

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

return SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT;

1、 Select Project

int recvLen;

void radio_hal_AssertShutdown(void)

SEGMENT_VARIABLE(bMain_IT_Status, U8, SEG_XDATA);

}

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

GPIO_InitStructure.GPIO_Pin = RF_ON_PIN;

while((SPI2->SR10) == 0)//

}

return -1;

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

{

}

}

把不是自己的平台的屏蔽了!

底层配置完毕,配置bsh头文件:

retry=0;

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

STM32SPI2_ReadWriteByte(*pData++);

}

while((SPI2->SR11) == 0) {

/* Packet RX */

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

}

}

memcpy(ptr,SI4338RecvData,SI4338RecvLen);

使用SI的WDS工具生成代码

radio.c radio hal层 spi接口修改处

GPIO_InitStructure.GPIO_Pin = RF_IRQ_PIN;

//#include sample_code_func.h

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

U8 bRadio_Check_Tx_RX(void){

retry++;

/* Get payload length */

GPIO_ResetBits(GPIOB,GPIO_Pin_12);//

ptr = (u8*)buf;

}

{

{

int SI4338RecvData(void* buf,u32 len){

GPIO_InitStructure.GPIO_Pin = RF_POWER_PIN;

SPI_I2S_DeInit(SPI2);

不需要生成spi.c,建立STM32 SPI配置文件:

///* Clear Packet Sending flag */

}

#include radio_comm.h

GPIO_ResetBits(RF_SDN_PORT, RF_SDN_PIN);

2、 Configure project 配置工程

选择Bidirectional packet ,双向通信模式

si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, rxInformation[0]);

/* Enable SPI2 */

//#include cdd_common.h

{

}

{

return 0;

vRadio_StartTx_Variable_Packet(pRadioConfiguration->Radio_ChannelNumber,ptr, len);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

SPI_Init(SPI2, SPI_InitStructure);

#include radio.h

{

void radio_hal_SpiWriteData(u8 byteCount, u8* pData)

Channel spacing 通道空间,某个通道回忆 base freq+ channel spacin*num 为频率通信,当然会有小浮动,但是浮动不会超过 Channel spacing。

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

#include stdio.h

}

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

#include STM32SPI2.h

1、 选择仿真模式

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

void Radio_Config(void)

}

{

u8 STM32SPI2_ReadWriteByte(u8 TxData)

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

之间的距离有关系,速度越快,对应的距离要求越短。所以这应该按照自己的需求来选。

……………………………………….

SI4338RecvLen =Si446xCmd.FIFO_INFO.RX_FIFO_COUNT;

if((recvLen = SI4338RecvData(void*( buf),64)) >0){

Crystal:晶振默认!

SPI_Cmd(SPI2, DISABLE);

}

{

}

/*

Main接收端

{

//#include application_defs.h

GPIO_Init(GPIOB, GPIO_InitStructure);

memcpy(SI4338RecvData,rxInformation,Si446xCmd.FIFO_INFO.RX_FIFO_COUNT);

1、频率范围:425-525 MHz

unsigned char buf[64];

GPIO_Init(RF_IRQ_PORT, GPIO_InitStructure);

等!

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

//RF_ON

版权声明:本文来源:win7 64位系统下载,由本文作者:IT狐狸王所写的原创文章仅此参考,转载请注明:STM32连接射频si4438模块,谢谢!

本文关键词: 通信 射频 单片机
返回系统下载大全首页
60