SPI操作flash MX25L64读写数据

本文档详细介绍了如何使用STM32F10X的SPI接口与Macronix MX25L64 Flash进行读写操作。首先,通过初始化SPI、GPIO来配置硬件连接,然后正确操作SPI控制器,理解SPI状态寄存器和时序。接着,遵循Flash的读写步骤,确保在操作前检查WIP和WEL状态位。最后,提供了读取和写入数据的函数示例,强调了写入时基于页的限制和注意事项。

STM32F10X SPI操作flash MX25L64读写数据 

  简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信。ARM主控芯片STM32F103,flash芯片为MACRONIX INTERNATIONAL的MX25L6465E,64Mbit。

SPI应该是嵌入式外围中最简单的一种应用了吧!一般SPI应用有两种方法:软件仿真,手动模拟产生时序和应用主控芯片的SPI控制器。

一般采用第二种方法比较好,比较稳定。应用主控芯片的SPI控制器,要点:正确的初始化SPI、操作SPI各寄存器和正确理解flash的时序。下面是过程,采用的是STM32F10X自带的库函数

 

1、初始化:void SpiFlashInitialzation(void);

要知道硬件是怎么连接的,是SPI1还是SPI2连接到flash中去,通过连接图知道我们要操作的是SPI2。初始化大概3个部分,配置时钟;配置GPIO;配置SPI2。这里要注意的是,CS片选脚是作为普通的GPIO来使用,输出方式为“推挽式输出”,其他CLK,MISO,MOSI为“复用功能推挽式输出”;

代码:

 

 

[c-sharp]  view plain  copy
 
  1. void SpiFlashInitialzation(void)  
  2. {  
  3.      /*初始化的SPI,GPIO结构体*/  
  4.      SPI_InitTypeDef  SPI_InitStructure;  
  5.      GPIO_InitTypeDef GPIO_InitStructure;  
  6.        
  7.      RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2,  ENABLE); /*在RCC_APB1ENB中使能SPI2时钟(位14)*/  
  8.      RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,  ENABLE);/*因为与SPI2相关的4个引脚和GPIOB相*/  
  9.                                                                                                                         /*关,GPIOB时钟(位3),这句现在还不 */  
  10.                                                                                                                              /*确定要不要,待调试时再确定              */  
  11.     /*上面这一句是必须的,因为CS脚是当做GPIO来使用的,2011-01-30调试*/  
  12.                                                                                                                           
  13.     /*配置SPI_FLASH_CLK(PB13),SPI_FLASH_MISO(PB14),SPI_FLASH_MOSI(PB15)*/  
  14.     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;  
  15.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;                    /*复用功能推挽式输出*/  
  16.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  
  17.     GPIO_Init( GPIOB, &GPIO_InitStructure);  
  18.       
  19.     /*配置输入SPI_FLASH_CS(PB12)*/  
  20.     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;  
  21.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;   /*推挽式输出*/  
  22.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  
  23.     GPIO_Init( GPIOB, &GPIO_InitStructure);  
  24.   
  25.     SPI_FLASH_CS_SET;             /*不选flash*/  
  26.   
  27.   
  28.     /* SPI2配置 增加于2010-01-13*/  
  29.    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值