用SPI協議與外設進行通信(W25Q128)


 SPI明明是MISO,主機作為輸入,為什么配置的時候配置的是輸出模式?

 

 

從參考手冊中可以看到,當我們配置為復用功能輸出的時候是同時具有輸入功能的,故只用配置成輸出就行。

使用SPI協議與外設W25Q128進行通信:

 

1.初始化GPIO

2.配置SPI工作模式

3.接收以及發送數據(數據要先發送,再接收)

//4.獲取FLASH ID

發送0X9F,由於SPI時序是發送完一個字節,再發送第二個字節的時候接收第一個字節的數據,所以這兒在接第一個數據的同時,再繼續發三個DUMMY。才能收到返回的地址。

5.寫使能(數據擦除也是一種寫數據(寫1)),所以在進行數據擦除之前首先要寫使能。

6.擦除FLASH

7.讀取數據

8.獲取寄存器的狀態

9.讀取數據 最多寫256個數據

main函數實現:

/**
  ******************************************************************************

#include "stm32f4xx.h"
#include "./usart/bsp_debug_usart.h"
#include "./flash/bsp_spi_flash.h"

uint8_t readBuffer[4096] = {0X0};
uint8_t writeBuff[4096] = {0x0};

/**
  * @brief  主函數
  * @param  無
  * @retval 無
  */
int main(void)
{    
    uint32_t device_id = 0;
    uint32_t i = 0;
    
  /*初始化USART 配置模式為 115200 8-N-1,中斷接收*/
  Debug_USART_Config();
    
    FLASH_SPI_Config();
    
    /* 發送一個字符串 */
    Usart_SendString( DEBUG_USART,"這是一個FLASH實驗\n");
    printf("這是一個FLASH實驗\n");
    
    device_id = Read_Device_ID();
    
    printf("device_id = 0x%x\n", device_id);
    
    erace_secter(0X00);
    
    Read_buffer(readBuffer, 0X00, 4096);
    
    printf("***********************\n");
    
    for(i = 0; i<= 4096 ;i++)
        printf("0x%x ", readBuffer[i]);
          
  for(i=0;i<256;i++)
      writeBuff[i] = i;
   
  Write_buffer(writeBuff,0x00,256);
    
    //讀出寫入后的數據
  Read_buffer(readBuffer,0x00,256);  
    
  printf("\r\n*************讀出寫入后的數據**********\r\n");

  for(i=0;i<256;i++)
      printf("0x%x ",readBuffer[i]);
      
  while(1)
    {    
        
    }    
}

/*********************************************END OF FILE**********************/

tip:每個命令一定要對着手冊輸入正確。一步一步調試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM