历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

2020年02月04日 | 基于STM32单片机连接射频si4438模块的方案设计

2020-02-04 来源:eefocus

SI4438射频模块参数:

1、频率范围:425-525MHz

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

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

4、跳频功能

基于STM32单片机连接射频si4438模块的方案设计

等!

使用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_


推荐阅读

史海拾趣

Helium公司的发展小趣事

2017年,随着区块链技术的兴起,Helium团队看到了新的机遇。他们意识到区块链的透明性和自确认性可以为物联网网络的建设带来革命性变化。于是,Helium决定将网络建设“去中心化”,并借助区块链技术重新定义激励机制。这一决策标志着Helium从单纯的物联网项目转变为融合区块链技术的创新企业。通过去中心化的方式,Helium降低了网络建设和维护的成本,加速了网络覆盖的速度,为物联网设备提供了更加便捷和经济的连接方案。

Aimtec公司的发展小趣事

在电子行业的发展过程中,Aimtec公司积极寻求与行业领军企业的合作机会。通过与这些企业的合作,Aimtec不仅获得了更多的市场资源和技术支持,还提升了自身的技术水平和创新能力。同时,这些合作也为Aimtec带来了更多的商业机会和发展空间,实现了双方的共赢发展。

Diplohmatic A/S公司的发展小趣事

Diplohmatic A/S公司非常重视企业文化的建设。公司倡导“创新、协作、诚信、共赢”的核心价值观,通过举办各类员工活动、开展团队建设和员工培训等方式,不断增强员工的归属感和凝聚力。这种积极向上的企业文化氛围激发了员工的创新精神和工作热情,为公司的持续发展提供了强大的动力。

Fibrefab Limited公司的发展小趣事

Fibrefab始终坚持以客户为中心的服务理念。为了提升客户满意度和忠诚度,Fibrefab不断加强售前咨询、售中服务和售后支持等方面的投入。公司建立了一套完善的服务体系,为客户提供从方案设计、产品选型、安装调试到后期维护等全方位的服务支持。此外,Fibrefab还积极收集客户反馈和建议,不断优化产品和服务以满足客户需求。

Gamewell-FCI ( Honeywell )公司的发展小趣事

为了进一步扩大市场份额,Fibrefab开始实施全球化战略。公司先后在亚洲、欧洲和美洲等地设立生产基地和研发中心,以满足不同地区客户的需求。同时,Fibrefab还积极与全球知名的电信运营商和设备制造商建立合作关系,共同推动光纤通讯技术的发展和应用。这一战略的实施不仅帮助Fibrefab拓展了海外市场,也提升了其品牌影响力和市场竞争力。

E. Dold & Söhne KG公司的发展小趣事

随着公司实力的不断增强,E. Dold & Söhne KG公司开始积极拓展海外市场。公司先后在多个国家和地区设立了分支机构或办事处,与当地企业开展合作,共同开发市场。此外,公司还积极参与国际展会和交流活动,与国际同行交流技术和管理经验,不断提升自身的竞争力。

问答坊 | AI 解惑

给想学linux的朋友一些建议

给想学linux的朋友一些建议(我学linux的体会) 一. 什么人会学linux? 这个问题涉及到linux是否会代替Windows。我认为绝对不可能。Windows易上手易学习的特点,以及Microsoft多年的积累,加上丰富的软件选择,是linux不可比拟的。 那为什么我们 ...…

查看全部问答>

基于单片机的复杂可编程逻辑器件快速配置方法

摘要:介绍基于SRAM的可重配置CPLD的原理,通过对多种串行配置的比较,提出了由单片机和FLASH存储器组成的串行配置方式,并从系统复杂度、可靠性和经济性等方面进行了比较和分析。 关键词:复杂可编程逻辑器件 静态随机存储器 被动串行 基于SRAM ...…

查看全部问答>

十八般兵器-----------单片机励志篇

十八般兵器 快使用单片机,哼哼哈兮! 孔子说:“工欲善其事,必先利其器”,学习单片机所用的工具、元器件和数模电路是有一些区别的,我们在学习之前 最好先备齐它们,至少让外人看出我们是搞过单片机的。有几样东东很重要,在上场之前不得不提 ...…

查看全部问答>

传AMD将推出3.3GHz双核速龙II处理器

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 AMD不久前终于在移动计算机领域向英特尔发起了攻击,推出了一些新的移动处理器。但是,AMD还更新了其台式电脑芯片产品线。然而,总是有推出更多的处理器的空间,因为英特尔定期发布新的芯片。A ...…

查看全部问答>

适合电桥小信号输出放大的差分放大器?

RT,在网上找了些,发现有个专门做电桥信号放大的芯片,AM457,AM467和AM417,可一问价格,二十几块钱,晕死, 这么贵! 不知道大家知不知道性价比好点的?…

查看全部问答>

如何学习电子方面

小弟是计算机的专科2年级学生,学校教的很少,现在想学习关于硬件方面。以后希望自己有能力设计电路。可是以前都没有接触过这方面,不知道从哪里开始学起,和学一些什么内容。 请那位大大指条明路 …

查看全部问答>

232问题, 往PC机上发送数据,如何接收 ?

发送多于16个自己的数据, pc就接收困难。我PC部分使用com控件接收。在C#下编的程序。 不知道遇到类似问题的人,如何解决 这个问题的 。 我用的2812 。 …

查看全部问答>

请教F2812的几个问题

小弟最近按照EEWORLDDEC f2812实验板的原理图自己刷了一块PCB 在调试中遇到了一点问题 1。片内flash在烧写时总是不成功,用EEWORLD提供的FLASH测试程序提示FLASH无法写入。小弟想请问在烧写片内FLASH要注意些什么,F2812的引脚定义要注意些什么 2 ...…

查看全部问答>

lmp90100芯片,有谁用过吗

本帖最后由 dontium 于 2015-1-23 12:48 编辑 有谁用过NS公司的lmp90100芯片没有,这两天我用这款芯片作为PT100和热电偶的前端处理,但是一直不能让芯片动起来,希望用过的朋友能提供一下调试经验,因为我用的是自己做的板子做的测试,现在无法定 ...…

查看全部问答>

发一个黑龙江省2012TI杯电子竞赛赛题

本帖最后由 paulhyde 于 2014-9-15 04:10 编辑 黑龙江省2012TI杯电子竞赛赛题  …

查看全部问答>