stm32f407硬件spi读写sst25vf闪存flash代码

发布者:bin0990最新更新时间:2015-11-19 来源: eefocus关键字:stm32f407  spi  sst25vf  flash 手机看文章 扫描二维码
随时随地手机看文章
  1. void SPI_FLASH_Init(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. SPI_InitTypeDef SPI_InitStructure;
  5. NVIC_InitTypeDef NVIC_InitStructure;
  6.  
  7. /* Enable the SPI periph */
  8. RCC_APB2PeriphClockCmd(FLASH_SPI_CLK, ENABLE);
  9.  
  10. /* Enable SCK, MOSI and MISO GPIO clocks */
  11. RCC_AHB1PeriphClockCmd(FLASH_SPI_SCK_GPIO_CLK | FLASH_SPI_MOSI_GPIO_CLK | FLASH_SPI_MISO_GPIO_CLK, ENABLE);//FLASH_SPI_MISO_GPIO_CLK
  12.  
  13. /* Enable CS GPIO clock */
  14. RCC_AHB1PeriphClockCmd(FLASH_SPI_CS_GPIO_CLK, ENABLE);
  15.  
  16. /* Enable 157 GPIO clock */
  17. RCC_AHB1PeriphClockCmd(FLASH_SPI_157_GPIO_CLK, ENABLE);
  18.  
  19.  
  20. GPIO_PinAFConfig(FLASH_SPI_SCK_GPIO_PORT, FLASH_SPI_SCK_SOURCE, FLASH_SPI_SCK_AF);
  21. GPIO_PinAFConfig(FLASH_SPI_MISO_GPIO_PORT, FLASH_SPI_MISO_SOURCE, FLASH_SPI_MISO_AF);
  22. GPIO_PinAFConfig(FLASH_SPI_MOSI_GPIO_PORT, FLASH_SPI_MOSI_SOURCE, FLASH_SPI_MOSI_AF);
  23.  
  24. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  25. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  26. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  27. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  28.  
  29. /* SPI SCK pin configuration */
  30. GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN;
  31. GPIO_Init(FLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
  32.  
  33. /* SPI MOSI pin configuration */
  34. GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MOSI_PIN;
  35. GPIO_Init(FLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
  36.  
  37. /* SPI MISO pin configuration */
  38. GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN;
  39. GPIO_Init(FLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
  40.  
  41.  
  42. /* Configure GPIO PIN for Lis Chip select */
  43. GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN;
  44. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  45. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  46. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  47. GPIO_Init(FLASH_SPI_CS_GPIO_PORT, &GPIO_InitStructure);
  48.  
  49. SPI_FLASH_CS_HIGH();
  50.  
  51. /* Configure GPIO PIN for 157 */
  52. GPIO_InitStructure.GPIO_Pin = FLASH_SPI_157_PIN;
  53. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  54. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  55. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  56. GPIO_Init(FLASH_SPI_157_GPIO_PORT, &GPIO_InitStructure);
  57.  
  58. /* SPI1 configuration */
  59. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  60. SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  61. SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  62. SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  63. SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  64. SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  65. SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  66. SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  67. SPI_InitStructure.SPI_CRCPolynomial = 7;
  68. SPI_Init(FLASH_SPI, &SPI_InitStructure);
  69.  
  70. /* Enable SPI1 */
  71. SPI_Cmd(FLASH_SPI, ENABLE);
  72. SPI_FLASH_157_DIS();
  73.  
  74. //SPI_DMAInit();
  75. /* I2S DMA IRQ Channel configuration */
  76. /* NVIC_InitStructure.NVIC_IRQChannel = SPI1_DMA_RX_IRQn;
  77. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  78. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  79. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  80. NVIC_Init(&NVIC_InitStructure);
  81.  
  82. NVIC_InitStructure.NVIC_IRQChannel = SPI1_DMA_TX_IRQn;
  83. NVIC_Init(&NVIC_InitStructure);
  84. Delay_Init(168);*/
  85.  
  86. }
  87.  
  88. /*------------------------------------------------------------------------------
  89. 函数名称 : SPI_FLASH_Writebyte
  90. 函数功能 : 写一个字节数据
  91. 入口参数 : address:地址 buffer:数据
  92. 出口参数 : 无
  93. ------------------------------------------------------------------------------*/
  94.  
  95. void SPI_FLASH_Writebyte(unsigned int Addr, unsigned char *buf)
  96. {
  97. unsigned short i = 0, j = 0;
  98.  
  99. SPI_FLASH_WriteEnable();
  100.  
  101. SPI_FLASH_CS_LOW();
  102. SPI_FLASH_SendByte(0x02);
  103. SPI_FLASH_SendByte((Addr)>>16);
  104. SPI_FLASH_SendByte((Addr)>>8);
  105. SPI_FLASH_SendByte((Addr));
  106. SPI_FLASH_SendByte(*buf);
  107. SPI_FLASH_CS_HIGH();
  108. SPI_FLASH_WaitForWriteEnd();
  109. SPI_FLASH_WriteDisable();
  110. delay_nus(20);
  111. }
  112. /*------------------------------------------------------------------------------
  113. 函数名称 : SPI_FLASH_Writenbyte
  114. 函数功能 : 写一个字节数据
  115. 入口参数 : address:地址 buffer:数据 num :数量
  116. 出口参数 : 无
  117.  
  118. ------------------------------------------------------------------------------*/
  119.  
  120.  
  121. void SPI_FLASH_Writenbyte(unsigned int Addr, unsigned char *buf,u16 num)
  122. {
  123. u8 i;
  124. for(i=0;i
  125. {
  126. SPI_FLASH_Writebyte(Addr++,&buf[i]);
  127. }
  128.  
  129. }
  130. /*------------------------------------------------------------------------------
  131. 函数名称 : SPI_FLASH_Readnbyte
  132. 函数功能 : 写一个字节数据
  133. 入口参数 : address:地址 buffer:数据 num :数量
  134. 出口参数 : 无
  135.  
  136. ------------------------------------------------------------------------------*/
  137.  
  138. void SPI_FLASH_Readnbyte(unsigned int Addr,unsigned char *buf,u16 num)
  139. {
  140. unsigned short i = 0;
  141.  
  142. SPI_FLASH_CS_LOW();
  143.  
  144. SPI_FLASH_SendByte(0x0b);
  145. SPI_FLASH_SendByte(Addr>>16);
  146. SPI_FLASH_SendByte(Addr>>8);
  147. SPI_FLASH_SendByte(Addr);
  148. //dummy
  149. SPI_FLASH_SendByte(Dummy_Byte);
  150. for(i=0;i
  151. {
  152. buf[i]= SPI_FLASH_SendByte(Dummy_Byte);
  153.  
  154. }
  155.  
  156.  
  157. SPI_FLASH_CS_HIGH();
  158.  
  159. }
  160.  
  161. main()
  162.  
  163. {
  164.  
  165. u8 bufda[25]="123456789abcdefghijkl";
  166.  
  167.  
  168.  
  169. SPI_FLASH_Init();
  170.  
  171.  
  172. // Write_74HC595(HC595_OUT,3,&davalu);
  173. // Write_595_ENABLE();
  174. SPI_FLASH_157_EN();//kang 2014.07.10
  175. SPI_FLASH_ChipErase();
  176. SPI_FLASH_157_DIS();
  177.  
  178.  
  179. SPI_FLASH_157_EN(); //kang 2014.07.10
  180.  
  181. i= SPI_FLASH_ReadID();
  182. SPI_FLASH_157_DIS();
  183.  
  184. SPI_FLASH_157_EN();
  185.  
  186. SPI_FLASH_Writenbyte(5,bufda,20);
  187. SPI_FLASH_157_DIS();
  188.  
  189. SPI_FLASH_157_EN();
  190. SPI_FLASH_Readnbyte(5,readbuf,20);
  191. SPI_FLASH_157_DIS();
  192.  
  193. }
关键字:stm32f407  spi  sst25vf  flash 引用地址:stm32f407硬件spi读写sst25vf闪存flash代码

上一篇:stm32读写nrf24l01复位不通过的问题
下一篇:stm32f407时钟配置方法例程解析

推荐阅读最新更新时间:2024-03-16 14:40

stm32f103c8t6内部flash读写实例
单片机源程序如下: /************************************************************************************ #include stm32f10x.h #include delay.h #include HX711.h #include usart.h #include key.h #include flash_S.h int main(void) { u8 i,t; u8 len; u16 times=0; delay_init(); NVIC_Configu
[单片机]
AVR学习笔记------SPI总线和AVR SPI
SPI是一种采用串行同步方式的3线或4线通信接口,使用信号有使能信号,同步时钟,同步数据输入和数据输出。其常用于微控制器和外围芯片的直接连接和扩展。 一个典型的SPI总线系统包括一个主机和一个从机,双方之间通过主机输出/从机输入(MOSI),主机输入/从机输出(MISO) ,同步时钟信号(SCLK),从机选择(SS|),4跟信号线相连。SPI的通信过程本质上就是在同步时钟作用下的串行移位。可以把主机和从机看成是两个串行移位寄存器,通过MOSI和MISO首尾相连。主机发起传输时,先拉低从机选择信号,然后在内部时钟的作用下将SPI数据寄存器中的内容逐步移出,通过MOSI传送到从机。双方数据交换完毕后,拉高从机选择信号,停止SC
[单片机]
STM32读写内部Flash
工作中使用STM32F407ZGT6这块芯片开发项目,内部Flash有1M之多,出于数据存储需要,而外部没有拓展EEPROM,就想着将数据存入Flash中。因此研究了一下STM32F4读写内部Flash的一些操作。 以下是关于Flash介绍,部分来自互联网: 【STM32F4 内部Flash的一些信息】 STM32F407ZGTx的内部Flash的地址是:0x08000000,大小是0x00100000。 写Flash的时候,如果发现写入地址的Flash没有被擦出,数据将不会写入。Flash的擦除操作,只能按Sector进行。不能单独擦除一个地址上的数据。因此在写数据之前需要将地址所在Sector的所有数据擦除。
[单片机]
STM32读写内部<font color='red'>Flash</font>
基于stm32f103zet6之硬件SPI的学习
有几天没有更新博客了,主要是因为这几天都在捣鼓彩屏和触摸屏,分别使用FSMC和模拟IO来实现功能,又因为这块屏有些问题,所以、就网购了一块屏,估计今天能到了,今天准备学习下硬件SPI,之前使用IO模拟SPI实现了对DS1302的访问,下一步准备学习SD卡的,在论坛里面查看了下资料,发现如果使用软件模拟SPI来进行SD的通信话,会极大降低对SD卡的读写速度,但是,如果使用SD模式或者说使用硬件SPI来访问SD卡,那么 速度会有很大的提升,其实我自己也没有证实,也只是根据前人的经验,所以现在准备证实一下,所以就像准备开始学习硬件SPI了,该来的还是来了。 一、所谓的stm32硬件SPI 1、我们使用的SPI的主模式,主模式和从模式的区
[单片机]
基于stm32f103zet6之硬件<font color='red'>SPI</font>的学习
飞思卡尔16位单片机(十三)—— SPI模块测试
一、SPI模块介绍 串行外围器件接口(SPI)模块提供单片机和外围器件间的全双工、同步和串行通信。这些外围器件可以包括其他微控制器、模数移位器、移位寄存器、传感器和存储器等。SPI运行在主模式中最高可运行在总线时钟除以2的波特率上,在辅模式中最高可运行在总线时钟除以4的波特率上。 SPI的中心元件是SPI移位寄存器。数据写入双缓冲发射器(写入SPIDR),然后转移到位于数据传输起点的SPI移位寄存器。在数据字节中转换后,数据被传输到双缓冲接收器,在这里数据可以被读取(从SPIDR读取)。管脚复用逻辑控制着单片机管脚和SPI模块间的连接。SPI的功能框图如下图所示。 当SPI配置为主SPI时,时钟输
[单片机]
飞思卡尔16位单片机(十三)—— <font color='red'>SPI</font>模块测试
MSP430F149嵌入式系统中FLASH K9F1G08U0M的应用
NAND Flash是采用NAND结构技术的非易失存储器,具有ROM存储器的特点,存储在该芯片中的数据可在断电情况下维持10年不丢失,而芯片的引脚与访问又具有类似于RAM的特点。NAND FLASH 存储器将数据线与地址线复用为8条线,另外还分别提供了命令控制信号线,因此,NAND FLASH 存储器不会因为存储容量的增加而增加引脚数目。从而极大方便了系统设计和产品升级。 1 元件介绍 1.1 MSP430芯片 MSP430系列单片机是TI公司推出的16位RISC系列单片机,该系列是一组超低功耗微控制器,供电电压范围为1.8V―3.6V。考虑到本系统有微体积、低功耗的要求,在此选用MSP430F149,它具有60KB Flas
[单片机]
MSP430F149嵌入式系统中<font color='red'>FLASH</font> K9F1G08U0M的应用
还是跑在Flash里快?
这肯定是很多人关心的问题,下面通过一个例子看看会有什么样的结论: 测试手段如下: 主循环一直在做一个变量的自加(sum1++),当然前提保证不会溢出。 用Cortex-M3内部的Systick计数,以一秒钟为限,这个sum1的数值大小,可以判断哪种方式比较快。为了严密,我们观察第一秒到第二秒之间的计数效果;而不是从第0秒到第1秒(因为使能Systick到真正开始执行sum1++可能有间隙)。在第一次进入Systick的ISR时,记录下sum1的值;第二次进入Systick的ISR时,再次记录sum1的值,两次值之差即为一秒钟间隔中sum1执行了多少次自加。由此看出哪种方式比较快。 同样的测试前提:Prefetc
[单片机]
TMS320C6713的FLASH引导装载系统设计
前言 DSP系统的引导装载是指在系统加电时,由DSP将一段存储在外部非易失性存储器中的代码移植到内部高速存储器单元并执行的过程。这种方式即可利用外部存储单元扩展DSP本身有限的ROM资源,又能充分发挥DSP内部资源的高速效能。因此,引导装载系统的性能直接关系到整个DSP系统的可靠性和处理速度,是DSP系统设计中必不可少的重要环节。在装载系统中,外部非易失性存储器和DSP的性能尤为重要。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统EPROM要低。为此,本文介绍了TMS320C6713浮点DSP芯片和SST公司提供的SST39VF400A FIASH存储器的基本特点,给出了使用该FLASH存储器设计
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved