历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2018年10月10日 | stm32之nRF24L01无线模块(1):SPI2到SPI1的移植

2018-10-10 来源:eefocus

    本来要接着写滴答定时器的,但是趁热打铁写下SPI2到SPI1的移植。

    为什么SPI2到SPI1的移植要放在nRF24L01模块里写呢,因为无线模块最重要的数据传输就是通过SPI实现的。为什么需要移植呢,因为即使是一个厂家的板子,不同型号之间它的无线模块引脚也有可能是不同的,顺便稿下移植,加深下理解。SPI2移植到SPI1呢,自己做的时候遇到了一些问题,就从遇到的问题顺便讲下初始化。

1.引脚问题

    看stm32的手册,不知道为什么,无论在GPIO还是在SPI里都没有看到这个引脚的问题(初学者有可能移植的时候可能纳闷为什么是这些引脚),只有在引脚复用AFIO那里才提了一下,如下图

[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植

    这样才知道SPI1的引脚,但是SPI2的引脚手册里没有提到,只能结合板子的电路原理图顺便查一下了,以我用的两个德飞莱的板子为例,前者是德飞莱M3S,可以插ILI9320那个板子,后者是德飞莱小一些没有SD插槽那个板子。

[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植


[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植

    可以看到二者的引脚是不同的,但是引脚并不是随意给出的,在不进行重映射的情况下,前者的SPI引脚是SPI2对应的引脚,后者则是SPI1对应的引脚。由于对应的引脚不同,自然在GPIO的初始化时候,要修改初始化的引脚,引脚的输入输出模式,在数据手册中已经给出,如下

[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植

2.时钟的使能

    由于引脚改了,使能的GPIO时钟也需要进行一下修改,同时切记不要忘了SPI1和SPI2时钟的区别,看一下数据手册中给出的系统结构,如下图

[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植
    特别需要注意的是SPI1挂在APB2上,而SPI2和SPI3挂在APB1上,因此SPI时钟初始化的时候,要注意是

RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2,  ENABLE );

RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,  ENABLE );

这两句的哪一个(我还傻傻滴找了半天RCC_APB1Periph_SPI1[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植

这个时钟在设置SPI速度的时候还会导致一个小问题,APB2的最大时钟是APB1的一倍,由于nRF24L01的最大频率是10MHz,因此移植的时候注意一下。

3.片选和使能的预定义

    看一下上面的无线模块的电路原理图,除了SPI引脚就是片选CSN和使能CE引脚了,这两个引脚是用于开始和结束SPI通信的,移植的时候也有可能没注意到。

    库函数中为了简洁明了,一般将引脚的置高置低都用预定义的形式表示,比如CE的置高置低是这么表示的

#define NRF24L01_CE_SET GPIO_SetBits(GPIOG,GPIO_Pin_6)

#define NRF24L01_CE_CLR GPIO_ResetBits(GPIOG,GPIO_Pin_6)

    在移植的时候,这种预定义很容易忽略,忘了的话根本就不会开始SPI通信,自然也就没有现象了。

4.库函数的改变

    在SPI2的函数中,只要是涉及写寄存器的部分,就要看下到底写的是SPI2还是SPI1的寄存器,当然,这里有一个很明显的特点,就是stm32官方的库函数一般是通用的,像下面这个SPI命令函数

SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState)

    而厂商写的,一般都是需要注意下的,比如SPI速度设置的函数

void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)

{

  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));

SPI2->CR1&=0XFFC7;

SPI2->CR1|=SPI_BaudRatePrescaler;

SPI_Cmd(SPI2,ENABLE); 

    这里写的寄存器就是SPI2的寄存器,移植的时候就需要改一下啦(结构体寄存器关系滴答定时器那里已经讲过啦)

5.玄学问题((*^__^*)。。。)

    搞硬件,必不可少的会出现玄学问题,比如keil4好使,keil5不好使的什么的,所以需要不断地尝试,自己做这个移植的时候,有一段毫不相关引脚注释居然改变了结果,最后一句一句注释掉,发现实际是厂商的函数写的不规范,把端口的输入输出频率的初始化给漏掉了[转载]stm32之nRF24L01无线模块(1):SPI2到SPI1的移植大部分玄学问题都是都原因的,移植的时候不断调试就能找到问题所在。


推荐阅读

史海拾趣

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

对于基本二阶段低通滤波器电路,网友可能会有多方面的问题。以下是一些常见问题及其详细回答:

1. 基本二阶段低通滤波器电路的结构是怎样的?

回答:基本二阶段低通滤波器电路通常由两个一阶低通滤波器级联而成,每个一阶低通滤波器包含一个电阻和一个电容。具体来说,电路由两个电阻(R1, R2)和两个电容(C1, C2)组成。输入信号首先经过R1和C1组成的一阶低通滤波器,然后其输出再经过R2和C2组成的第二个一阶低通滤波器。这种结构可以有效滤除输入信号中的高频分量,只保留低频部分。

2. 如何计算二阶段低通滤波器的截止频率?

回答:二阶段低通滤波器的截止频率并非简单地将两个一阶滤波器的截止频率相加或平均。实际上,其截止频率与两个电阻和两个电容的值都有关。对于RC滤波器,单个一阶低通滤波器的截止频率为f_c1 = 1/(2πR1C1)和f_c2 = 1/(2πR2C2)。然而,对于二阶RC低通滤波器,其总截止频率通常使用以下公式计算:

f_c = \frac{1}{2\pi\sqrt{R_1R_2C_1C_2}} \] 这个公式考虑了两个滤波阶段的相互作用。 ### 3. 二阶段低通滤波器相比一阶滤波器有哪些优势? **回答**:二阶段低通滤波器相比一阶滤波器在滤波效果上有显著优势。具体来说,二阶段滤波器在通带内的增益更为平坦,而在阻带内的衰减速度更快(通常为-40dB/dec,比一阶滤波器的-20dB/dec快)。这意味着二阶段滤波器能更好地滤除高频噪声,保留低频信号,从而改善信号的纯度和信噪比。 ### 4. Sallen-Key结构和多路反馈结构(MFB)有什么区别? **回答**:Sallen-Key结构和多路反馈结构(MFB)是二阶低通滤波器的两种常见拓扑结构。Sallen-Key结构通常用于单位增益、高增益精度和低Q值的应用中,其电路结构相对简单,且对运算放大器的性能依赖性较小。而多路反馈结构(MFB)则适用于需要高Q值和高增益的应用场景。MFB结构通过引入额外的反馈路径来实现更高的Q值和更灵活的增益控制,但相应地,其电路复杂度也更高。 ### 5. 在实际应用中,如何选择合适的二阶段低通滤波器参数? **回答**:在选择二阶段低通滤波器的参数时,需要根据具体的应用需求来确定。首先,需要明确滤波器的截止频率,这取决于需要滤除的高频噪声的频率范围。其次,需要考虑滤波器的增益和相位特性,以确保信号在通过滤波器后能够保持所需的幅度和相位关系。最后,还需要考虑滤波器的稳定性和实现复杂度,以确保滤波器在实际应用中能够稳定可靠地工作。 在实际设计过程中,可能需要通过仿真软件来验证所选参数的效果,并根据仿真结果进行调整和优化。此外,还需要注意选择高质量的元件来构建滤波器电路,以确保滤波器的性能和稳定性。
亿晶源(ekinglux)公司的发展小趣事

随着市场的逐步扩大,亿晶源于2013年在东莞成立东莞市亿晶源光电科技有限公司,进一步扩大生产规模。公司高度重视技术创新,不断投入研发资金,引进高端人才,成功推出多款具有竞争力的LED半导体产品。同时,公司还通过了ISO9001质量体系认证,为产品质量的稳定提升提供了有力保障。

Connection One公司的发展小趣事

随着技术的不断成熟,Connection One公司开始寻求与其他企业的战略合作。通过与全球知名的电子设备制造商合作,公司的芯片产品得以广泛应用于各类电子设备中。这种合作不仅拓展了公司的市场份额,还提升了其品牌知名度。

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

AND Displays公司的发展小趣事

随着技术实力的增强和产品线的丰富,AND Displays开始积极拓展市场。公司不仅在国内建立了完善的销售网络,还积极开拓海外市场。通过与全球各大电子产品制造商的合作,AND Displays的显示面板逐渐进入了全球供应链,品牌影响力不断提升。同时,公司还注重品牌建设,通过参加国际展览、举办技术研讨会等方式,提升品牌知名度和美誉度。

宜源科技(ETERNAL)公司的发展小趣事

宜源科技公司深知品质对于企业长远发展的重要性。因此,公司从原材料采购到生产流程控制,再到产品出厂检验,都严格遵循国际标准和行业规范。通过不断提升产品品质,宜源科技赢得了客户的信赖和市场的认可,逐渐树立起自己的品牌形象。

问答坊 | AI 解惑

DSP6000图像的水平镜像变换算法

数学表达式原理: 设图像高度为IHeight,宽度为IWidth,原图中(x0,y0)经过水平镜像后从未将变为 (IWidth-x0,y0),其表达式为: X0=IWidth-y1; y0=y1 算法的C语言代码: /*水平镜像变换处理*/ void horizTranspose() {    & ...…

查看全部问答>

闻气味找故障

  嗅觉有时候也能帮助我们找到故障的位置。譬如说CRT显示器吧,用鼻子闻一闻,就知道故障出在哪了。   1.酸味    如果有这种味道,一般是内部电容有过热或过压爆裂,电容的酸性气体溢出所致。   2.糊味    一般是显 ...…

查看全部问答>

【藏书阁】LCD12232点阵液晶模块使用说明

[ 本帖最后由 wzt 于 2010-3-12 17:32 编辑 ]…

查看全部问答>

我相信这只手能拦截爱国者导弹~~

$(\'swf_t2I\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMTE1MDUxMDcy/v.sw ...…

查看全部问答>

怎样复习单片机

马上就要期末考了 ,真不知道怎么去复习。虽然有看一点书,但就是不会归纳知识点。看书没什么重点,而且平常也是看看程序 。…

查看全部问答>

请教两个问题

1、Ndis库没有向nids微端口驱动的接口函数(如初始化函数等)下发irp,那代码中的irp是从哪里来的?ndis微端口驱动自己组建的吗? 2、如何看到ndis微端口驱动中irp中包含的是什么板侧的指令?如断链指令…

查看全部问答>

为便携式 MFF 显示器选择最佳的 LED 背光驱动器

关键词:LED、WLED、白光 LED、CCFL、便携式 MFF 显示器、TPS61195、德州仪器、TI   为便携式 MFF 显示器选择最佳的 LED 背光驱动器 作者:Jeff Falin,德州仪器 (TI) 工厂应用工程师   摘要   白光 LED 将迅速取代冷阴极灯 ...…

查看全部问答>

1602液晶显示程序

新手写了一个用1602液晶在第二行第一位显示字母A的程序,程序可以通过编译,但是液晶上部显示,不知道什么原因?求助解答,谢谢 LIST P=16F873a           ;  告诉编译程序使用何种PIC单 ...…

查看全部问答>

【TI建议】组织TI来论坛讲课!

定期邀请TI,发贴讲课   比如有些应用笔记的分析,或者 LM3S的特色外围功能 [ 本帖最后由 蓝雨夜 于 2011-10-7 08:07 编辑 ]…

查看全部问答>