你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0xx_SPI读写(Flash)配置详细过

[复制链接]
STMCU小助手 发布时间:2023-1-6 15:54

Ⅰ、概述

/ \& k* ~2 u+ m- q( s; r0 j

关于SPI(Serial Peripheral Interface)串行外设接口可以说是单片机或者嵌入式软件开发人员必须掌握的一项通信方式,就是你在面试相关工作的时候都可能会问及这个问题。在这里问一个简单的问题:硬件SPI和软件模拟SPI的区别是有哪些?估计这个问题会问倒很多人。


! j2 S# e4 E- m, L

SPI通信中分为SPI主机和从机,在实际应用中作为主机是比较常见的一种,因为SPI的通信速度远比I2C的通信速度大,所以现在市面上有很多SPI从设备。

8 q; ^% _5 n( d; J% j

本文SPI读写操作,以SPI通信的FLASH(25Q16)为从设备进行举例。串口发送10字节数据,接收满10字节自动保存,间隔500ms读写数据,通过串口打印出来。

- V' P% D! \# [* C% [6 _* A

Ⅱ、下载

5 w7 M$ }5 {  [

文章提供的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘,请放心下载测试,如有问题请检查一下你的板子是否有问题。


* q: {$ D7 w8 P& ~3 l8 q

ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。


5 R: i9 c$ k; U. d

Ⅲ、准备工作


) M$ l- b8 A" I$ w8 f" u; c

建议准备F0的参考手册和数据手册,方便查阅相关知识,没有的请到ST官网或到我360云盘下载。


6 p! r5 P5 u* y( @

今天总结的软件工程是基于“TIM基本延时配置详细过程”修改而来,因此需要将该软件工程下载准备好。我每次都是提供整理好的软件工程供大家下载,但是,如果你是一位学习者,建议自己亲手一步一步操作:打开工程->新建文件(spi.c spi.h) ->添加到工程中->添加源代码。

$ s9 X  _+ a" t4 F

. O, G/ i6 M, _7 {8 I

Ⅳ、SPI原理

20170915012339234.png


, ?- p+ w% b4 F  z1 ]5 {7 l8 c


9 R% K5 |) r: t

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

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

SCK:串口时钟,作为主设备的输出,从设备的输入

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

& r: y8 [! E1 q% h3 W

Ⅴ、代码描述

①RCC时钟


$ a- l4 z7 ?3 [4 p* D: m

20170915012339709.png


2 N3 O  Y; j$ u; |+ }1 U

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

我个人习惯第一步配置时钟,ST官方提供的例程也是把配置时钟放在前面。关于RCC时钟的配置比较重要,有好几次我就是由于忘记配置相应RCC时钟,让我找了很久的问题,最后才发现是RCC时钟没有配置。

+ h0 m" N  `& ?9 e2 b

注意:

外设时钟不要随便添加,比如:RCC_APB1外设不要配置在RCC_APB2时钟里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);这样能编译过,但是错误的】

我每次都提醒RCC时钟,是因为很多人就是因为时钟而导致软件运行有问题,所以,提醒更多人要注意配置RCC.


3 B$ E- _, g* L) S2 c8 z- n

②输出引脚配置

5 w) o8 I& I- g7 L7 n$ T) l

20170915012339736.png

  u4 z  ~. C0 g' ?4 E

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

注意:

SCK、MISO、MOSI这三根线需配置为复用功能,片选信号配置为输出功能(由控制从设备)。

/ }( s  l5 x  L  _

③主机SPI配置


7 Y1 S& f- o0 b

20170915012340524.png


+ q$ c6 A$ U6 }0 Y. w

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

该配置和F1的区别在于F0需要配置SPI_RxFIFOThresholdConfig。

! G" b- p9 H3 g" I# V

④读写接口函数

' U% ~3 t/ b- B5 D

20170915012340480.png

, d4 y) K" m5 z( k. c

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

) v2 g: M5 k, }3 O: a

由于是硬件SPI,这里我把读写都写在一起了,实际应用中也是比较常见的,软件模拟SPI的读写函数还是存在差异。


7 b- g0 f1 @6 x1 ?$ c

Ⅵ、说明

或许你硬件芯片不是提供工程里面的芯片,但是STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片,甚至是F2、F4等芯片上(具体请看手册、或者亲自测试)。


+ W& B: @- T, L5 D. ^7 X
" v4 h" z9 k" k) p0 W# x
赞 收藏 评论0 发布时间:2023-1-6 15:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版