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

【经验分享】STM32F0单片机快速入门十 用 SPI HAL 库读写W25Q128

[复制链接]
STMCU小助手 发布时间:2021-9-17 17:37
1.W25Q128 介绍
- J% |0 \$ U/ n. q# t& v- g9 Y! l当我们有比较多的数据需要掉电存储时,上一篇文章所介绍的 24C02 (256个字节EEPROM)就不够了。此时我们会用到另外一种类型的存储器,即 Flash。比如具有 SPI 接口的 W25Q128。这颗小芯片虽然也只有简单的 8 个引脚,但存储容量却达到了128M-bit,也就是 16M 字节,同时它的读写速度可以达到 66MB/S。但是由于 STM32F030 不支持 Quad/Dual SPI,只能以标准 SPI 方式读写,所以速度会低一些。以下是 W25Q128 的主要特点:
/ L, `& B! q$ |  b) ^a.133MHz SPI Clock。5 t/ t3 b. D) [4 X
b.10万次擦写寿命,20年数据保持时间。
6 a4 g5 z8 }: x0 x* ^9 Ec.每颗具有64-Bit唯一序列号 Unique ID。
$ [: d5 X7 ~+ M. t6 z* V- c' _( Od.每次可以写入 1 到 256 字节数据。
  P% Z- o/ _9 R$ Y# s4 g9 x* Ze.写之前需要对目的地址所在扇区进行擦除操作。4 w+ y6 P% z4 K
14.png ; j/ o# V7 x* I! O% a& ~. R. Y  s
( Winbond W25Q128 datasheet )
( m1 m- a# {* b6 w. Y我们通过以下连线使 W25Q128 连至 STM32F030 的 SPI1:2 s7 D- o# w! e8 b5 Y; {

1 `1 C4 _. a8 @; T
( ^4 B4 W& f* r1 o9 a
W25Q128                   STM32F0305 s% O" U* f5 _0 N) F) Z
Pin 1   /CS               PA4 也可以用其它 GPIO 引脚
5 Z0 S$ Z: n- C7 \; ?4 ePin 2   DO                PA6 SPI1_MISO
. g4 ?$ ^: D* r" j3 J) pPin 3   /WP              ( VCC )
- a8 x) s! x; `; }# Q4 h* UPin 4   GND              ( GND )    7 {4 {8 I! [3 Y* T4 h
Pin 5   DI                PA7 SPI1_MOSI
$ `. w' t* T- d; D+ R$ X7 L: ~Pin 6   CLK               PA5 SPI1_SCK
- z8 V' ^1 r7 B) M5 P% U3 `9 ZPin 7   /HOLD or /RESET   ( VCC )
7 D$ F8 a1 y  N7 h8 _& \2 IPin 8   VCC               ( VCC )- _1 G. \5 r3 ^( O2 c9 i: Q4 I
2.代码
! @: B6 }3 m' [5 j1 v( O) q/ c代码的开发如果想提高效率,一个方法就是充分利用前人的成果,而不是自己一再的去造轮子。5 |& b/ U- `' P, t
对于W25Q128 我们可以从Github上找到驱动代码:7 k- }- J" C) q; x7 V
https://github.com/nimaltd/w25qxx
$ n8 T+ t/ o7 p% |GNU General Public License v3.0
4 s3 q6 `( @' U  l- e  u6 H我们把它集成进SPI例程里,完成 W25Q128 的读写功能。# i; D0 n6 X  N) y
Step 1,下载后把解压的文件夹 w25qxx-master 放在 STM32Cube_FW_F0_V1.11.0\Drivers\BSP\Components& o! x2 \& D  p0 k# U* M1 w
15.png ) S7 T* Z0 j) Q3 r
Step 2, 我们用 Keil 打开下面这个工程:6 l, J0 @8 j$ J( q$ W
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\SPI\SPI_FullDuplex_ComPolling\MDK-ARM\Project.uvprojx( W; ^! H$ N; w8 ~/ W: ~! ~
在项目(STM32F030R8-Nucleo)上点鼠标右键,选择Add Group...
6 C4 z5 T1 @$ }$ K: f: d+ ]新建 Group 并改名称为 Drivers\BSP\Components\w25qxx-master
+ z1 ~' u4 W2 J  J 16.png
) a" s% y; M( o9 U  f- B" EStep 3, 在 Drivers\BSP\Components\w25qxx-master上点右键,选择Add Existing Files to Group "Drivers\BSP\Components\w25qxx-master"...,
7 ^! t- z! r  @, C& d8 }5 x5 l找到 Drivers/BSP/components/w25qxx-master/w25qxx.c 点击Add,然后可以看到w25qxx.c已经添加进项目中:1 V: M: p7 ^1 M
17.png
+ S# y. h1 x/ G- G5 ]Step 4, 在 Options for Target 里添加路径,这里使用的是工程所在路径的相对路径,也可以使用绝对路径,但如果工程拷贝到别的地方的时候,此包含路径就需要跟随更改。
" u/ A' F6 Y& L5 T4 b5 aAdd include path  ../../../../../../Drivers/BSP/components/w25qxx-master
$ `. L- @9 W7 w7 W4 B) [0 z 18.png
9 |6 p) K; x+ w  I3 t/ O5 j6 R: YStep 5, 驱动头文件 w25qxx.h 中原来包含的的 spi.h, 因为我们使用的 Cube 库,头文件需要做如下替换:
, [2 l- D. ?" m. {8 P//#include "spi.h"
% R) ~) w+ C, T2 J7 }6 y& n& @5 z#include "stm32f0xx_hal.h"9 J1 d; r8 ^! `. e- H
Step 6, main.h 里根据实际情况配置引脚,把驱动头文件 #include "w25qxx.h" 包含进来。片选信号 CS 可以由任意一个 GPIO 控制,在函数' L! K) l1 U0 d: j, V
HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)' p/ Z* M4 P) X7 _. G5 \3 J( n: a! Q
里把CS引脚配置为GPIO输出就行了,实际的拉低拉高是驱动代码实现的。
6 J5 N' u3 Q* V- e% T% z' N8 ]: ?! g8 H
19.png
+ e7 w& p; V$ C 20.png
0 n3 z! I8 o  f  p- X! p+ m2 t! `
4 x0 b4 S' e7 _( bStep 7, 在 main.c 里定义了 SpiHandle 并指向 SPI1, 我们在 w25qxx.c里也要用到这个 Handle,所以通过 extern 来引用一下。5 Z" H5 ]1 L) N6 F7 ?2 L
21.png # A# w4 }" X, j" f7 {
Step 8, 初始化 SPI1,然后调用 w25qxx 驱动的初始化代码 W25qxx_Init( ); 然后就可以用擦除,读写等函数了。: t( V3 _' B; \4 l0 i' k- b

1 s: C  E( \# r7 A 22.png
: Z- V/ h. z( v* N4 ]1 j4 \/ g 23.png
( c4 `  J0 x7 M6 C. Q在代码的修改过程中,我们可以再次体会 Cube 库的这种分层结构带来的好处,特别是如何与第三方驱动代码融合。各个模块就像积木一样,我们只需要把它们搭建起来就可以快速的实现我们想要的功能。( _2 E+ U% e: n- s9 j
下面是读出数据时实际抓取的波形:) d2 }) R4 f7 u6 `* `
24.png - Y  c! [. q  t; Q

8 [4 T& t4 F9 t* i1 i# X
收藏 1 评论0 发布时间:2021-9-17 17:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版