• 发文
  • 评论
  • 微博
  • 空间
  • 微信

stm32f0单片机快速入门十 用 spi hal 库读写w25q128-利来app官方下载

topsemic嵌入式 2021-01-14 21:53 发文

1.w25q128 介绍

当我们有比较多的数据需要掉电存储时,上一篇文章所介绍的 24c02 (256个字节eeprom)就不够了。此时我们会用到另外一种类型的存储器,即 flash。比如具有 spi 接口的 w25q128。这颗小芯片虽然也只有简单的 8 个引脚,但存储容量却达到了128m-bit,也就是 16m 字节,同时它的读写速度可以达到 66mb/s。但是由于 stm32f030 不支持 quad/dual spi,只能以标准 spi 方式读写,所以速度会低一些。以下是 w25q128 的主要特点:

a.133mhz spi clock。

b.10万次擦写寿命,20年数据保持时间。

c.每颗具有64-bit唯一序列号 unique id。

d.每次可以写入 1 到 256 字节数据。

e.写之前需要对目的地址所在扇区进行擦除操作。

( winbond w25q128 datasheet )

我们通过以下连线使 w25q128 连至 stm32f030 的 spi1:

w25q128                   stm32f030

pin 1   /cs               pa4 也可以用其它 gpio 引脚

pin 2   do                pa6 spi1_miso

pin 3   /wp              ( vcc )

pin 4   gnd              ( gnd )    

pin 5   di                pa7 spi1_mosi

pin 6   clk               pa5 spi1_sck

pin 7   /hold or /reset   ( vcc )

pin 8   vcc               ( vcc )

2.代码

代码的开发如果想提高效率,一个方法就是充分利用前人的成果,而不是自己一再的去造轮子。对于w25q128 我们可以从github上找到驱动代码:https://github.com/nimaltd/w25qxxgnu general public license v3.0我们把它集成进spi例程里,完成 w25q128 的读写功能。step 1,下载后把解压的文件夹 w25qxx-master 放在 stm32cube_fw_f0_v1.11.0driversbspcomponents

step 2, 我们用 keil 打开下面这个工程:stm32cube_fw_f0_v1.11.0projectsstm32f030r8-nucleoexamplesspispi_fullduplex_compollingmdk-armproject.uvprojx在项目(stm32f030r8-nucleo)上点鼠标右键,选择add group...新建 group 并改名称为 driversbspcomponentsw25qxx-master

step 3, 在 driversbspcomponentsw25qxx-master上点右键,选择add existing files to group "driversbspcomponentsw25qxx-master"...,找到 drivers/bsp/components/w25qxx-master/w25qxx.c 点击add,然后可以看到w25qxx.c已经添加进项目中:

step 4, 在 options for target 里添加路径,这里使用的是工程所在路径的相对路径,也可以使用绝对路径,但如果工程拷贝到别的地方的时候,此包含路径就需要跟随更改。add include path  ../../../../../../drivers/bsp/components/w25qxx-master

step 5, 驱动头文件 w25qxx.h 中原来包含的的 spi.h, 因为我们使用的 cube 库,头文件需要做如下替换://#include "spi.h"#include "stm32f0xx_hal.h"step 6, main.h 里根据实际情况配置引脚,把驱动头文件 #include "w25qxx.h" 包含进来。片选信号 cs 可以由任意一个 gpio 控制,在函数hal_spi_mspinit(spi_handletypedef *hspi)里把cs引脚配置为gpio输出就行了,实际的拉低拉高是驱动代码实现的。

step 7, 在 main.c 里定义了 spihandle 并指向 spi1, 我们在 w25qxx.c里也要用到这个 handle,所以通过 extern 来引用一下。

step 8, 初始化 spi1,然后调用 w25qxx 驱动的初始化代码 w25qxx_init( ); 然后就可以用擦除,读写等函数了。

在代码的修改过程中,我们可以再次体会 cube 库的这种分层结构带来的好处,特别是如何与第三方驱动代码融合。各个模块就像积木一样,我们只需要把它们搭建起来就可以快速的实现我们想要的功能。下面是读出数据时实际抓取的波形:

参考资料:pm0215  stm32f0xxx cortex-m0 programming manualum1785 description of stm32f0 hal and low-layer driverswinbond w25q128 datasheetstm32f030 datasheet

stm32f030 reference manual

声明:本文为ofweek维科号作者发布,不代表ofweek维科号立场。如有侵权或其他问题,请及时联系利来国际下载举报。
2
评论
评论

相关阅读

暂无数据

topsemic嵌入式

topsemic,让芯片使用更简...

热门文章排行榜
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

举报文章问题

×
  • 营销广告
  • 重复、旧闻
  • 格式问题
  • 低俗
  • 标题夸张
  • 与事实不符
  • 疑似抄袭
  • 我有话要说
确定 取消

举报评论问题

×
  • 淫秽色情
  • 营销广告
  • 恶意攻击谩骂
  • 我要吐槽
确定 取消

用户登录×