0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F0xx_SPI读写(Flash) 配置详细过程

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-07 11:40 次阅读

Ⅰ、概述

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

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

Ⅱ、下载

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

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

今天的软件工程下载地址(360云盘):

https://yunpan.cn/cSCxAn24RF7YD访问密码 44ad

STM32F0xx的资料可以在我360云盘下载:

https://yunpan.cn/cS2PVuHn6X2Bj访问密码 8c37

Ⅲ、准备工作

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

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

Ⅳ、SPI原理

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

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

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

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

Ⅴ、代码描述

①RCC时钟


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

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

注意:

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

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

②输出引脚配置


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

注意:

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

③主机SPI配置


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

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

④读写接口函数


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

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

Ⅵ、说明

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

本文章提供的软件工程是基于ST标准外设库为基础建立而成,而非使用STM32CubeMX建立工程。个人觉得使用ST的标准外设库适合与学习者,STM32CubeMX建立工程结构复杂,对于学习者,特别是初学者估计会头疼。

今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1633

    浏览量

    147941
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1706

    浏览量

    91507
  • STM32F0
    +关注

    关注

    0

    文章

    61

    浏览量

    17103
收藏 人收藏

    评论

    相关推荐

    LuatOS入门课|Air201模组与SPI Flash的交互艺术

    今天我会把我了解的关于如何使用SPI读写外部Flash教给大家,本文将通过Air201+扩展板读写外部flash的演示,教你使用
    的头像 发表于 11-17 09:51 254次阅读
    LuatOS入门课|Air201模组与<b class='flag-5'>SPI</b> <b class='flag-5'>Flash</b>的交互艺术

    STM32CUBEMX(10)--Flash读写

    概述 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是STM32F030R8T6,64K大
    发表于 09-10 15:36

    【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植到 GD32F4xx

    GD32F4xx 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F4xx系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍:硬件资源对比
    的头像 发表于 09-06 09:40 1244次阅读
    【GD32 MCU 移植教程】8、从 <b class='flag-5'>STM32F4xx</b> 系列移植到 GD32<b class='flag-5'>F4xx</b> 系

    STM32F10xx芯片资料

    电子发烧友网站提供《STM32F10xx芯片资料.pdf》资料免费下载
    发表于 07-08 14:56 1次下载

    【GD32F303红枫派开发板使用手册】第二十讲 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册 •GD32F303 SPI操作方式,参考19.2.2东方红开发板使用手册 •NAND FLASH
    的头像 发表于 06-20 09:50 886次阅读
    【GD32<b class='flag-5'>F</b>303红枫派开发板使用手册】第二十讲 <b class='flag-5'>SPI-SPI</b> NAND <b class='flag-5'>FLASH</b><b class='flag-5'>读写</b>实验

    【GD32F470紫藤派开发板使用手册】第十一讲 SPI-SPI NOR FLASH读写实验

    通过本实验主要学习以下内容: •SPI简介 •GD32F470 SPI简介 •SPI NOR FLASH——GD25Q32ESIGR简介 •
    的头像 发表于 05-17 09:57 1771次阅读
    【GD32<b class='flag-5'>F</b>470紫藤派开发板使用手册】第十一讲 <b class='flag-5'>SPI-SPI</b> NOR <b class='flag-5'>FLASH</b><b class='flag-5'>读写</b>实验

    为什么stm32f4xx_flash.h提供的库函数是Flash_EraseSector()?

    为什么stm32f4xx_flash.h提供的库函数是Flash_EraseSector()而不像stm32f10x_flash.h里面提供的是FLASH_ErasePage,因为一个
    发表于 04-29 06:07

    stm32f0xx_stdperiph_lib_um.chm怎么用?

    最近用STM32F0,没有中文文档找到库里面有个stm32f0xx_stdperiph_lib_um.chm 这个怎么用?捣鼓了一会没整明白比如 我想知道所有RCC的库函数, 怎么看?
    发表于 04-24 07:19

    如何使用SPI的DMA模式读写FLASH

    环境:HAL库 + USB + W25Q64 + Fatfs 硬件:stm32f103c8t6 + MX25L64 我使用普通模式,完成在W25Q64中写入文件,通过USB可以再PC中读取
    发表于 04-16 07:59

    STM32F429ZIT6的FLASH擦除读写失败的原因?

    因为项目需要,有一部分配置的数据需要保存到FLASH存储区。于是查看了官方的手册,STM32F429ZI是按照扇区划分,划分为Bank1和Bank2。其中每一个块又划分为12个扇区,4个16kb,1
    发表于 04-12 07:45

    STM32H7 SPI速度配置为80M时,读写数据不对是怎么回事?

    BaudRatePrescaler为4时(40M),可以正常读写,收发的数据也是对的。 当BaudRatePrescaler为2时(80),SPI读写函数返回值错误。后来把SPI的IO
    发表于 03-29 08:17

    求助,关于SPI读写Flash的理解

    利用SPI读写Flash指令的过程中,当主机发送指令后,为什么还需要再发送“任意的数据”,才能够获取指令解释后的返回值。 当读取Flash
    发表于 03-20 06:06

    stm32F0在hal库时钟初始化这里把HSI关掉了,为什么还可以擦写Flash

    stm32F0 Flash擦写操作时 HSI 必须是开启的, 但看 stmF030 hal库1.11.3stm32f0xx_hal_rcc.c 文件里 HAL_RCC_OscConfig 函数
    发表于 03-14 08:11

    STM32F101xxSTM32F103xx ARM 内核32位高性能微控制器参考手册

    电子发烧友网站提供《STM32F101xxSTM32F103xx ARM 内核32位高性能微控制器参考手册.pdf》资料免费下载
    发表于 01-29 09:25 8次下载

    stm32f103 flash模拟eeprom

    STM32F103的Flash存储器可以模拟EEPROM的功能,在本文中我们将详细介绍如何使用STM32F103的Flash存储器来实现E
    的头像 发表于 01-09 11:21 2027次阅读