历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-10-16 来源: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_SPI1stm32之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的移植大部分玄学问题都是都原因的,移植的时候不断调试就能找到问题所在。


推荐阅读

史海拾趣

Electro-Optical Systems Inc公司的发展小趣事

面对未来,EOS制定了明确的发展战略和规划。他们将继续深耕红外探测器领域,不断提升产品性能和质量。同时,EOS也将积极布局新领域,探索新的增长点。他们关注新兴技术如人工智能、物联网等的发展动态,寻求与这些技术的深度融合和应用。通过不断创新和拓展新领域,EOS将为实现企业的可持续发展注入新的动力。

请注意,以上故事框架是基于EOS在红外探测器领域的发展情况和行业趋势进行构建的,具体细节和数据可能需要根据实际情况进行调整和完善。

淩志比高公司的发展小趣事

随着国内市场的逐渐饱和,淩志比高公司开始将目光投向海外市场。公司制定了国际化战略,积极拓展海外市场,与多家国际知名企业建立了合作关系。通过不断的市场拓展和品牌推广,淩志比高逐渐在国际市场上获得了认可。

ETAL公司的发展小趣事

在产品质量和技术水平得到认可后,ETAL开始积极拓展市场。公司制定了详细的市场营销策略,通过参加国际电子展会、与知名企业合作等方式提高品牌知名度。同时,ETAL还注重客户服务,建立了完善的售后服务体系,确保客户在使用产品过程中得到及时、专业的支持。这些举措使得ETAL的市场份额不断扩大,品牌影响力逐渐增强。

Esc Electronics Corp公司的发展小趣事

在市场竞争日益激烈的背景下,Esc意识到品质管理的重要性。公司投入大量资源用于提升产品质量和服务水平,通过严格的质量控制和客户反馈机制,不断优化产品设计和生产流程。同时,Esc还积极塑造品牌形象,通过参加行业展会、发布新品广告等方式,提升品牌知名度和美誉度。这些努力使得Esc在消费者心中树立了高品质、可信赖的形象。

Feller US公司的发展小趣事

随着全球汽车产业的不断发展,国际合作已成为企业拓展市场、提升竞争力的重要途径。菲斯克也深刻认识到了这一点,积极寻求与全球各地的汽车制造商和供应商建立合作关系。通过与国际巨头的合作,菲斯克不仅获得了先进的技术和管理经验,还成功进入了多个国际市场,实现了全球布局的目标。这一系列的国际合作不仅提升了公司的知名度和影响力,还为公司的长期发展提供了有力的支持。

Henkel公司的发展小趣事

在电动汽车领域,技术创新是企业生存和发展的关键。菲斯克一直致力于研发更加先进、更加环保的电动汽车技术。经过多年的努力,公司终于在某项关键技术上取得了重大突破。这一突破不仅提升了电动汽车的性能和续航里程,还为公司赢得了市场的广泛认可。菲斯克凭借这一技术优势,成功推出了一系列备受好评的电动汽车产品,进一步巩固了其在市场中的地位。

问答坊 | AI 解惑

《社区大讲堂》DO-254中的高设计可靠性的逻辑综合(六)--DO-254的工程需要考虑

DO-254的工程需要在综合时考虑更多 逻辑综合工具在设计可靠性方面能提供很多额外的价值。以下是一些支持DO-254项目中非常重要的功能。 可重复性的综合结果 DO-254需要设计的每一步都要有可重复性。 主要的目的是能够获取设计环境,设计工具 ...…

查看全部问答>

我见到过的最好的模电电子书,结合现在公司能实用的,不是纯理论的

我见到过的最好的模电电子书,结合现在公司能实用的,不是纯理论的…

查看全部问答>

Wince串口通信

各位大侠,谁能给我发个Wince串口通信程序及其.h文件配置。只要求能通信即可。因为我是新手想参考一下,不胜感谢~~我得邮箱是blueghostqu@163.com…

查看全部问答>

NXP的LPC24678的FE的设计思路

由于之前其他项目用过LPC2478做USB相关的设备,领导要求,我们这个项目也用到这个LPC2478,但是我们需要采用FE组网, 求高手指导下LPC2478的软硬件组网方案和具体设计思路? 感谢!…

查看全部问答>

一起讨论:如何做一个单片机程序通用模版

随着一年多的真实产品开发——虽然,嘿嘿,按照他们的说法,我这实在有点非主流,但在后期的调试中吃了不少苦头,于是在蛋疼的调试中,以及在阅读诸如《代码大全》这些书籍时,渐渐地萌生了一种如何做一个方便调试,方便扩展,方便移植的单片机程序 ...…

查看全部问答>

富士通FRAM心得提交2——硬件电路

续之前的 【富士通FRAM心得提交1】 https://bbs.eeworld.com.cn/thread-419758-1-1.html 前几天PCB板子终于寄过来了。为了减少浪费,一块板子上放了不少模块。 串口通信模块 硬件部分目前还是延续之前预定的方案,STM8S处理器,MB85 ...…

查看全部问答>

TVS管阵列厂家

TVS管阵列有哪些厂家做得比较好?…

查看全部问答>

嵌入式开发精品书籍推荐(十三)---嵌入式系统的C语言程序设计

嵌入式开发精品书籍推荐(十三)---嵌入式系统的C语言程序设计 随着电子技术的的飞速发展,对于电子工程师来说,如今的电子设计已经很少有只用硬件电路就能实现的项目了,尤其是现今到处都是智能化电子产品。凡是带有“智能化”字样的电子产品 ...…

查看全部问答>

IP摄像机连接音频监控设备注意哪些问题

对于网络监控录像机、硬盘录像机和视频服务器,一般情况下都有视频输入接口和音频输入接口,而它们都是一一对应的,可能都是BNC 或者莲花头接口,中间有一个孔。而拾音器一般都是几根线缆拉出来,对于三芯制的,一根是音频正极,一根是音频负极,最 ...…

查看全部问答>

A8采用GPMC和FPGA通信,异步页读模式配置

GPMC_CONFIG_1到7的配置如下 一、Gpmc_config_1:32’h40001000:设置异步非复用单个写,四长度页读模式,数据位宽16位, 二、Gpmc_config_2:32’h00060501:设置gpmc_a有效和gpmc_ncs有效之间时间间隔为1gpmc_fclk,gpmc_ncs下降沿和gpmc_fclk上 ...…

查看全部问答>