历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2021年01月13日 | STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)

2021-01-13 来源:eefocus

https://yunpan.cn/c6mfRJWva6AJ2  访问密码

 

STM32F10x_SPI(软件模拟)读写Flash(25Q16)实例源代码工程:

https://yunpan.cn/c6mf6zyzCaMwd  访问密码

 

STM32F1资料:

https://yunpan.cn/crBUdUGdYKam2  访问密码 ca90

 

Ⅲ、STM32硬件SPI

    STM32所有系列芯片都带有SPI硬件控制器,根据芯片型号不同,SPI数量也不同,有些有一个SPI,有些有3个SPI。STM32的SPI控制器功能也是很强大的,只需要简单的配置就能高效的进行SPI通信。

 

1.SPI原理

上面是SPI的系统框图,来自STM32F1的参考手册.

 

A.引脚

MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。

MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。

SCK:串口时钟,为通信提供时钟。(作为主设备的输出,从设备的输入)。

NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为“片选引脚”,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。

 

B.缓冲区SPI->DR

发送缓冲区:只要往SPI1->DR写入数据,它自动将存入发送缓冲区,并执行发送操作。这就是高效的一点,而不像模拟SPI,还需要我们控制时钟,控制MOSI引脚输出高低电平。

 

接收缓冲区:原理和发送缓冲区差不多,只是这个是接收数据。接收满了,才通知我们需要去读取数据。

 

C.波特率发生器

STM32的硬件SPI还可以通过配置来控制通信的速度。

 

2.SPI引脚

该函数位于spi.c文件下面;

 

使用的SPI需与引脚对应,CS片选信号我们这里是通过普通IO来控制的,若不同请在spi.h里面修改为你开发板上的引脚。

 

 

3.SPI配置

该函数位于spi.c文件下面;

 

该函数是文章的重要一项,主要是对硬件SPI进行的一些初始化配置。

SPI为主模式,时钟线平时为高,上升沿采集数据,8位数据格式,软件控制片选,数据高位在前。

 

1.传输方向:SPI_Direction =SPI_Direction_2Lines_FullDuplex;

总共有四个方式:

两线全双工:SPI_Direction_2Lines_FullDuplex

两线只接收:SPI_Direction_2Lines_RxOnly

单线只接收:SPI_Direction_1Line_Rx

单线只发送:SPI_Direction_1Line_Tx

 

2.模式:SPI_Mode = SPI_Mode_Master;

总共有两种模式:

主机模式:SPI_Mode_Master

从机模式:SPI_Mode_Slave

 

3.数据:SPI_DataSize = SPI_DataSize_8b;

8位数据长度:SPI_DataSize_8b

16位数据长度:SPI_DataSize_16b

 

4.时钟极性:SPI_CPOL = SPI_CPOL_High;

也就是我们平时不操作时,时钟的电平。

低电平:SPI_CPOL_Low

高电平:SPI_CPOL_High

 

5.时钟相位:SPI_CPHA = SPI_CPHA_2Edge;

也就是我们需要等多少个“时钟”操作通信口MOSI、MISO。

1个时钟:SPI_CPHA_1Edge

2个时钟:SPI_CPHA_2Edge

 

6.片选信号:SPI_NSS = SPI_NSS_Soft;

也就是我们如果控制NSS片选引脚;

软件控制:SPI_NSS_Soft

硬件控制:SPI_NSS_Hard

 

7.波特率(时钟)分频:SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;

也就是我们控制SPI通信的速率,和USART串口的波特率类似。

这里的参数有很多种,请见源代码。

 

8.第一位传输数据:SPI_FirstBit = SPI_FirstBit_MSB;

在一根通信线上一字节(8Bit)数据分8次传输才能完成,这里是高位先传输,还是低位先传输的意思。

高位:SPI_FirstBit_MSB

低位:SPI_FirstBit_LSB

 

9.校验:SPI_CRCPolynomial = 7;

校验的数据位长度。

 

4.SPI读写数据

函数位于spi.c文件下面;

 

这两个函数就是我们使用到的接口,在上面SPI配置好之后,操作这两个函数就可以控制其引脚读写了。

这两个函数就是我们上面说的“发送缓冲区”和“接收缓冲区”所需要使用到的部分。

这里需要注意:发送和接收数据都是通过SPI->DR寄存器,读、写操作会控制数据的流向。

 

Ⅳ、软件模拟SPI

从51学习过来的朋友就应该知道,51的资源很少,没有SPI硬件控制器,要想使用SPI通信方式,就需要使用IO口模拟的方式来实现SPI通信。只需要按照通信的时序就能控制其通信。

 

使用软件模拟SPI通信有优点,也有缺点。

优点:移植很方便,代码只需要简单修改就可以使用在其他芯片上;

缺点:控制IO麻烦,对时序要求高;

 

1.模拟SPI引脚

该函数位于spi.c文件下面;

 

这个主要配置模拟SPI引脚。(如果你板子上使用的引脚不同,请修改spi.h文件的定义即可)

 

 

2.模拟SPI初始化

该函数位于spi.c文件下面;

 

这里初始化需要把状态定好,不然第一次操作会有问题。

 

 

3.模拟SPI写函数(时序)

该函数位于spi.c文件下面;

 

这种时序的写法在学习过51的朋友来看再熟悉不过了。

注意:

1、高字节在前,说以上面红色标记的的部分就是将高位先输出,依次移位输出。

2、在时钟的上升沿将数据输出,所以在“时钟-高”之前将数据输出。

 

 

4.模拟SPI读函数(时序)

该函数位于spi.c文件下面;

 

读时序和写时序原理类似,但还是存在差异。

注意:

1、高位先输出来(从机输出),所以,需要将读取的数据依次移向高位。

2、在时钟的下降沿读出数据,所以,我红色标记的部分可以看得出来,是在时钟为低之后才去读取数据。

 

 

Ⅴ、修改代码,适应开发板

       看见这篇文章,你可能觉得芯片型号(STM32F103ZE)不是你的芯片芯片型号,硬件接口(SPI1)、(USART1)也不是板子上的接口,那怎么办呢,其实很简单,适当修改一下就行。

 

1.修改芯片型号

该工程适合STM32F1系列的所有芯片,只需要修改一下型号。修改芯片型号,可以看我的另外一篇文章:如何将工程(修改来)运行在自己开发板上;

 

当然,其他系列(F0、F2、F3、F4等)也可以使用该配置,但需要更换外设库。

 

2.修改硬件接口

笔者提供的工程源代码,在个人看来整理的还算比较整洁(名称清晰、排版整齐、文件分类明确)、相比很多开发板卖家提供的例程来说,要好的多。所以,看了之后,你应该知道如何修改。

 

1、LED灯的IO,位于bsp.h下,修改为你的LED灯IO口就行了。

 

2、USART,本文是使用USART1,如果你使用USART2的话,需要usart.c文件下“USART_GPIO_Configuration”引脚配置、USART_Configuration串口配置、发送接收函数USART1 改为USART2等。

 

3、SPI接口

这个在上面讲述中都提及了修改,就是修改spi.c和spi.h文件里面的配置。


推荐阅读

史海拾趣

amcc [applied micro circuits corp]公司的发展小趣事

Applied Micro Circuits Corp(AMCC)是一家半导体公司,主要从事高性能处理器和高速互连解决方案的设计和制造。以下是关于AMCC公司发展的五个相关故事:

  1. 公司成立与早期发展:AMCC公司于1979年由Hemant Kanakia等人在美国加利福尼亚州的圣塔克拉拉创立。公司最初专注于设计和制造用于通信和数据中心应用的集成电路芯片。在成立初期,AMCC致力于开发高性能、低功耗的处理器和互连解决方案,以满足不断增长的通信市场需求。

  2. 技术创新与产品发布:AMCC公司在技术创新方面处于行业领先地位。公司持续投入研发,并推出了一系列创新产品。1997年,AMCC发布了第一款64位PowerPC处理器,开创了其在高性能处理器市场的先河。随后,公司不断推出新一代的处理器产品,包括PowerPC、ARM等系列,以满足不同客户的需求。

  3. 业务拓展与市场扩张:随着时间的推移,AMCC不断拓展其业务范围和市场覆盖。公司不仅在通信领域取得了成功,还逐渐进军数据中心、云计算、存储等新兴领域。AMCC通过与各大客户和合作伙伴的紧密合作,扩大了产品的市场份额和影响力。

  4. 收购与整合:AMCC通过一系列收购和整合,加强了自身的技术实力和市场竞争力。公司收购了一些在特定领域具有核心技术的公司,如Tahoe Networks(2004年)、3ware(2005年)、Mindspeed Technologies(2014年)等。这些收购使得AMCC得以快速扩大产品线,并加速了公司在新兴市场的布局。

  5. 英特尔收购:2016年,英特尔公司宣布以约17亿美元的价格收购AMCC。这一交易使得AMCC成为英特尔旗下的子公司,英特尔得以借助AMCC在通信和数据中心领域的技术优势和客户资源,进一步拓展其在半导体行业的地位。此次收购也标志着AMCC作为独立实体的终结,但其在半导体行业的技术贡献和市场影响将持续延续。

这些故事展示了AMCC公司在技术创新、产品发布、业务拓展、收购整合等方面的发展历程,以及其作为半导体行业重要参与者的地位和影响力。

AMD(超微)公司的发展小趣事
  1. 公司成立与早期发展:AMD(Advanced Micro Devices)公司成立于1969年,由Jerry Sanders在美国加利福尼亚州圣克拉拉创立。最初,AMD致力于生产挑战Intel在x86处理器市场的产品,但起初面临着市场份额不足和技术挑战等问题。然而,随着时间的推移,AMD逐渐在市场上获得了一席之地,并推出了一系列创新产品。

  2. x86处理器市场竞争:AMD在x86处理器市场与Intel展开了激烈的竞争。1991年,AMD推出了第一款x86兼容处理器386DX-40,开始了与Intel的竞争。此后,AMD不断推出更快、更强大的处理器,如K6系列、Athlon系列等,一度取得了一定的市场份额。

  3. ATI收购与图形处理器发展:为了拓展业务,AMD于2006年收购了图形处理器制造商ATI Technologies。这一收购使AMD进入了图形处理器市场,并推出了一系列创新的图形处理器产品,如Radeon系列。AMD通过不断推出高性能、高度集成的图形处理器,赢得了广大用户的青睐。

  4. 全球Foundry战略:为了降低制造成本并提高生产效率,AMD实施了全球Foundry战略。2008年,AMD成立了GlobalFoundries,将自己的制造业务转移给这家独立的半导体制造公司。这一举措使AMD得以专注于设计和研发,提升了公司的竞争力。

  5. 技术创新与新市场拓展:除了在x86处理器和图形处理器市场取得成功外,AMD还不断进行技术创新,拓展新的市场。例如,AMD在数据中心领域推出了EPYC系列服务器处理器,致力于满足云计算和大数据处理的需求。此外,AMD还在游戏主机市场与Sony和Microsoft等公司合作,提供高性能的处理器和图形处理器。

这些故事展示了AMD在其创立以来的发展历程,包括在x86处理器市场的竞争、图形处理器领域的扩展、全球Foundry战略的实施以及在新兴市场的技术创新和市场拓展等方面取得的成就。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着全球对环保和可持续发展的重视,Galaxy Microelectronics也开始关注其生产过程中的环保问题。

发展:公司投入巨资建设绿色工厂,采用先进的环保技术和设备,减少生产过程中的能源消耗和废弃物排放。同时,Galaxy Microelectronics还积极推广环保理念,与供应商和客户共同构建绿色供应链。这些举措不仅提升了公司的社会形象,还为其在竞争激烈的市场中赢得了更多客户的青睐。

Carlisle Interconnect Technologies公司的发展小趣事

进入21世纪,Carlisle Interconnect Technologies开始了全球化的布局。公司不仅在北美和欧洲设立了多个生产基地和研发中心,还积极开拓亚洲和拉丁美洲等新兴市场。通过全球化的战略布局,公司不仅能够更好地利用全球资源,还能够更深入地了解各地市场需求,进一步推动业务发展。同时,公司还加强了与国际知名企业的合作,共同推动电子行业的发展和进步。

这五个故事只是Carlisle Interconnect Technologies发展历程中的一部分,但它们足以展示公司在电子行业中的创新、进取和不断追求卓越的精神。这些故事也为我们揭示了一个成功企业的发展轨迹:从创业初期的创新与突破,到不断的技术升级和产品多样化,再到全球化的布局与业务拓展,每一步都充满了挑战与机遇。

友盟(AP)公司的发展小趣事

在市场拓展方面,友盟(AP)公司也展现出了强大的实力。公司通过线上线下相结合的方式,积极开展市场推广活动,扩大品牌知名度和影响力。同时,友盟还积极参与行业交流和合作,与业界同行共同探讨行业发展趋势和未来发展方向。这些努力不仅提升了友盟在行业内的地位,也为其未来的发展奠定了坚实的基础。

Amecon Magnetics公司的发展小趣事

Amecon Magnetics公司成立于XXXX年,初始阶段主要专注于磁性材料的研发与生产。在创立初期,公司面临着资金短缺、技术挑战以及市场竞争激烈等多重困难。然而,创始人凭借对磁性材料领域的深刻理解和坚定信念,带领团队不断突破技术难题,逐步开发出具有竞争力的产品。

问答坊 | AI 解惑

图像处理系统及算法1 图像处理系统的组成

一般的图象处理系统大体来说按功能分,都有如下四个部分:图象采集部分,图象处理部分,图象显示部分,图象存储部分。最典型的图象处理系统就是数码相机,功能图大体如下: 大体来说,数码相机的处理过程是由图象传感器(CCD或CMOS)接收到的图 ...…

查看全部问答>

PSD813F2在FPGA配置中的应用

摘要:可编程外围器件PSD应用于单片机系统后,简化了单片机外围电路的设计,增加了系统的可靠性;利用PSD与单片机组成的系统,通过计算机串口对FPGA进行实时在线编程、仿真和配置。 关键词:可编程外围器件(PSD) 在应用可编程(IAP) 可编程门阵 ...…

查看全部问答>

ARM Corte-M3内核微控制器快速入门与应用

[ 本帖最后由 小瑞 于 2009-12-1 09:27 编辑 ]…

查看全部问答>

怎么样在任务栏上显示PDA电量?

怎么样在任务栏上显示PDA电量?…

查看全部问答>

低价转让fpga开发板

1.jpg (22.51 KB) 2010-9-21 11:23 2.jpg (19.75 KB) 2010-9-21 11:23   ...…

查看全部问答>

EEWORLD联系贴

          大家好,我有个建议一直想说,又担心大家分歧太大,一直没说,不过思来想去,还是说出来让大家分析一下是否可行,众人拾材火焰高吗,         & ...…

查看全部问答>

哪位高手给讲讲定时器?

我现在用的是5502的板子,在板上UARTONCHIP测试程序中,GPT_Config  MyGptConfig {0,0,0,0,0,0x56c4,0x0003,0...}函数中的0x56c4,0x0003是怎样计算出来的?能不能把具体的计算过程告诉我?我对这个问题已经困惑很久了,查了很多的资料 ...…

查看全部问答>

机房监控

机房监控机房监控JCD-PSMS8.0监控项目:1、供配电监控市电输入交流监控三相电压、电流、有关功率、功率因数等;以及对配电柜内8个开关进行监控,可查看所监测配电 线路的参数。相应的参数应存有历史曲线,可查看该参数的历史曲线,可通过IE浏览器 ...…

查看全部问答>

这个是什么情况??

我的信息肿么变成这样了?好久就注册了啊?…

查看全部问答>

【加工方法】DIY之非金属材料的加工方法讨论—开始动手

        【原创内容,转帖请注明https://bbs.eeworld.com.cn】         设计工作完成后我们开始动手加工,加工零件时候一定要注意自身安全,不要让工具伤到自己。    &nb ...…

查看全部问答>