找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4195|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:91350 发表于 2015-10-29 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
完整代码下载: sst25vf.rar (6.84 KB, 下载次数: 44)
  1. void SPI_FLASH_Init(void)
  2. {
  3.     GPIO_InitTypeDef GPIO_InitStructure;
  4.     SPI_InitTypeDef  SPI_InitStructure;
  5.     NVIC_InitTypeDef   NVIC_InitStructure;

  6.     /* Enable the SPI periph */
  7.     RCC_APB2PeriphClockCmd(FLASH_SPI_CLK, ENABLE);

  8.     /* Enable SCK, MOSI and MISO GPIO clocks */
  9.     RCC_AHB1PeriphClockCmd(FLASH_SPI_SCK_GPIO_CLK | FLASH_SPI_MOSI_GPIO_CLK | FLASH_SPI_MISO_GPIO_CLK, ENABLE);//FLASH_SPI_MISO_GPIO_CLK

  10.     /* Enable CS  GPIO clock */
  11.     RCC_AHB1PeriphClockCmd(FLASH_SPI_CS_GPIO_CLK, ENABLE);
  12.    
  13.     /* Enable 157  GPIO clock */
  14.     RCC_AHB1PeriphClockCmd(FLASH_SPI_157_GPIO_CLK, ENABLE);
  15.    

  16.     GPIO_PinAFConfig(FLASH_SPI_SCK_GPIO_PORT, FLASH_SPI_SCK_SOURCE, FLASH_SPI_SCK_AF);
  17.     GPIO_PinAFConfig(FLASH_SPI_MISO_GPIO_PORT, FLASH_SPI_MISO_SOURCE, FLASH_SPI_MISO_AF);
  18.     GPIO_PinAFConfig(FLASH_SPI_MOSI_GPIO_PORT, FLASH_SPI_MOSI_SOURCE, FLASH_SPI_MOSI_AF);

  19.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  20.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  21.     GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
  22.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  23.     /* SPI SCK pin configuration */
  24.     GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN;
  25.     GPIO_Init(FLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);

  26.     /* SPI  MOSI pin configuration */
  27.     GPIO_InitStructure.GPIO_Pin =  FLASH_SPI_MOSI_PIN;
  28.     GPIO_Init(FLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);

  29.     /* SPI MISO pin configuration */
  30.     GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN;
  31.     GPIO_Init(FLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);


  32.     /* Configure GPIO PIN for Lis Chip select */
  33.     GPIO_InitStructure.GPIO_Pin = FLASH_SPI_CS_PIN;
  34.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  35.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  36.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  37.     GPIO_Init(FLASH_SPI_CS_GPIO_PORT, &GPIO_InitStructure);
  38.    
  39.     SPI_FLASH_CS_HIGH();

  40.   /* Configure GPIO PIN for 157 */
  41.     GPIO_InitStructure.GPIO_Pin = FLASH_SPI_157_PIN;
  42.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  43.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  44.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  45.     GPIO_Init(FLASH_SPI_157_GPIO_PORT, &GPIO_InitStructure);

  46.     /* SPI1 configuration */
  47.     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  48.     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  49.     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  50.     SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  51.     SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  52.     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  53.     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  54.     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  55.     SPI_InitStructure.SPI_CRCPolynomial = 7;
  56.     SPI_Init(FLASH_SPI, &SPI_InitStructure);

  57.     /* Enable SPI1  */
  58.     SPI_Cmd(FLASH_SPI, ENABLE);
  59.     SPI_FLASH_157_DIS();
  60.    
  61.     //SPI_DMAInit();
  62.     /* I2S DMA IRQ Channel configuration */
  63.    /* NVIC_InitStructure.NVIC_IRQChannel = SPI1_DMA_RX_IRQn;
  64.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  65.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  66.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  67.     NVIC_Init(&NVIC_InitStructure);
  68.    
  69.     NVIC_InitStructure.NVIC_IRQChannel = SPI1_DMA_TX_IRQn;
  70.     NVIC_Init(&NVIC_InitStructure);
  71.     Delay_Init(168);*/

  72. }

  73. /*------------------------------------------------------------------------------
  74. 函数名称 : SPI_FLASH_Writebyte
  75. 函数功能 : 写一个字节数据
  76. 入口参数 :  address:地址  buffer:数据
  77. 出口参数 :  无
  78. ------------------------------------------------------------------------------*/

  79. void SPI_FLASH_Writebyte(unsigned int Addr, unsigned char *buf)
  80. {
  81.     unsigned short i = 0, j = 0;

  82.     SPI_FLASH_WriteEnable();

  83.     SPI_FLASH_CS_LOW();
  84. SPI_FLASH_SendByte(0x02);
  85. SPI_FLASH_SendByte((Addr)>>16);
  86.     SPI_FLASH_SendByte((Addr)>>8);
  87. SPI_FLASH_SendByte((Addr));
  88. SPI_FLASH_SendByte(*buf);
  89.     SPI_FLASH_CS_HIGH();
  90.     SPI_FLASH_WaitForWriteEnd();
  91.     SPI_FLASH_WriteDisable();
  92.     delay_nus(20);
  93. }
  94. /*------------------------------------------------------------------------------
  95. 函数名称 : SPI_FLASH_Writenbyte
  96. 函数功能 : 写一个字节数据
  97. 入口参数 :  address:地址  buffer:数据 num :数量
  98. 出口参数 :  无

  99. ------------------------------------------------------------------------------*/


  100. void SPI_FLASH_Writenbyte(unsigned int Addr, unsigned char *buf,u16 num)
  101. {
  102. u8 i;
  103. for(i=0;i<num;i++)
  104. {
  105.    SPI_FLASH_Writebyte(Addr++,&buf[i]);
  106. }

  107. }
  108. /*------------------------------------------------------------------------------
  109. 函数名称 : SPI_FLASH_Readnbyte
  110. 函数功能 : 写一个字节数据
  111. 入口参数 :  address:地址  buffer:数据 num :数量
  112. 出口参数 :  无

  113. ------------------------------------------------------------------------------*/

  114. void SPI_FLASH_Readnbyte(unsigned int Addr,unsigned char *buf,u16 num)
  115. {
  116.     unsigned short i = 0;

  117.     SPI_FLASH_CS_LOW();

  118.     SPI_FLASH_SendByte(0x0b);
  119. SPI_FLASH_SendByte(Addr>>16);
  120. SPI_FLASH_SendByte(Addr>>8);
  121. SPI_FLASH_SendByte(Addr);
  122. //dummy
  123. SPI_FLASH_SendByte(Dummy_Byte);
  124.     for(i=0;i<num;i++)
  125.     {
  126.   buf[i]= SPI_FLASH_SendByte(Dummy_Byte);

  127. }


  128.     SPI_FLASH_CS_HIGH();

  129. }

  130. main()

  131. {

  132.   u8 bufda[25]="123456789abcdefghijkl";



  133.     SPI_FLASH_Init();

  134.      
  135.    //  Write_74HC595(HC595_OUT,3,&davalu);
  136.     // Write_595_ENABLE();
  137.          SPI_FLASH_157_EN();//kang 2014.07.10
  138.    SPI_FLASH_ChipErase();
  139.    SPI_FLASH_157_DIS();


  140.     SPI_FLASH_157_EN(); //kang 2014.07.10
  141.             
  142.     i= SPI_FLASH_ReadID();
  143.     SPI_FLASH_157_DIS();

  144.     SPI_FLASH_157_EN();
  145.   
  146.      SPI_FLASH_Writenbyte(5,bufda,20);
  147.      SPI_FLASH_157_DIS();
  148.      
  149.      SPI_FLASH_157_EN();
  150.      SPI_FLASH_Readnbyte(5,readbuf,20);
  151.      SPI_FLASH_157_DIS();

  152. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表