娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月21日(星期六)

2019年06月21日 | 嵌入式stm32學習:SPI-讀寫串行FLASH

發布者:清晨微風 來源: eefocus關鍵字:stm32  SPI  讀寫串行FLASH 手機看文章 掃描二維碼
隨時隨地手機看文章

bsp_spi_flash.h


#ifndef __SPI_FLASH_H

#define __SPI_FLASH_H


#include "stm32f4xx.h"

#include


/* Private typedef -----------------------------------------------------------*/

//#define  sFLASH_ID                       0xEF3015     //W25X16

//#define  sFLASH_ID                       0xEF4015     //W25Q16

//#define  sFLASH_ID                        0XEF4017     //W25Q64

#define  sFLASH_ID                       0XEF4018     //W25Q128



//#define SPI_FLASH_PageSize            4096

#define SPI_FLASH_PageSize              256

#define SPI_FLASH_PerWritePageSize      256


/* Private define ------------------------------------------------------------*/

/*命令定義-開頭*******************************/

#define W25X_WriteEnable              0x06 

#define W25X_WriteDisable             0x04 

#define W25X_ReadStatusReg          0x05 

#define W25X_WriteStatusReg       0x01 

#define W25X_ReadData                   0x03 

#define W25X_FastReadData             0x0B 

#define W25X_FastReadDual             0x3B 

#define W25X_PageProgram              0x02 

#define W25X_BlockErase               0xD8 

#define W25X_SectorErase              0x20 

#define W25X_ChipErase                0xC7 

#define W25X_PowerDown                0xB9 

#define W25X_ReleasePowerDown     0xAB 

#define W25X_DeviceID                   0xAB 

#define W25X_ManufactDeviceID       0x90 

#define W25X_JedecDeviceID          0x9F 


#define WIP_Flag                  0x01  /* Write In Progress (WIP) flag */

#define Dummy_Byte                0xFF

/*命令定義-結尾*******************************/



/*SPI接口定義-開頭****************************/

#define FLASH_SPI                           SPI5

#define FLASH_SPI_CLK                       RCC_APB2Periph_SPI5

#define FLASH_SPI_CLK_INIT                  RCC_APB2PeriphClockCmd


#define FLASH_SPI_SCK_PIN                   GPIO_Pin_7                  

#define FLASH_SPI_SCK_GPIO_PORT             GPIOF                       

#define FLASH_SPI_SCK_GPIO_CLK              RCC_AHB1Periph_GPIOF

#define FLASH_SPI_SCK_PINSOURCE             GPIO_PinSource7

#define FLASH_SPI_SCK_AF                    GPIO_AF_SPI5


#define FLASH_SPI_MISO_PIN                  GPIO_Pin_8                

#define FLASH_SPI_MISO_GPIO_PORT            GPIOF                   

#define FLASH_SPI_MISO_GPIO_CLK             RCC_AHB1Periph_GPIOF

#define FLASH_SPI_MISO_PINSOURCE            GPIO_PinSource8

#define FLASH_SPI_MISO_AF                   GPIO_AF_SPI5


#define FLASH_SPI_MOSI_PIN                  GPIO_Pin_9                

#define FLASH_SPI_MOSI_GPIO_PORT            GPIOF                      

#define FLASH_SPI_MOSI_GPIO_CLK             RCC_AHB1Periph_GPIOF

#define FLASH_SPI_MOSI_PINSOURCE            GPIO_PinSource9

#define FLASH_SPI_MOSI_AF                   GPIO_AF_SPI5


#define FLASH_CS_PIN                        GPIO_Pin_6               

#define FLASH_CS_GPIO_PORT                  GPIOF                     

#define FLASH_CS_GPIO_CLK                   RCC_AHB1Periph_GPIOF


#define SPI_FLASH_CS_LOW()      {FLASH_CS_GPIO_PORT->BSRRH=FLASH_CS_PIN;}

#define SPI_FLASH_CS_HIGH()     {FLASH_CS_GPIO_PORT->BSRRL=FLASH_CS_PIN;}

/*SPI接口定義-結尾****************************/


/*等待超時時間*/

#define SPIT_FLAG_TIMEOUT         ((uint32_t)0x1000)

#define SPIT_LONG_TIMEOUT         ((uint32_t)(10 * SPIT_FLAG_TIMEOUT))


/*信息輸出*/

#define FLASH_DEBUG_ON         1


#define FLASH_INFO(fmt,arg...)           printf("<<-FLASH-INFO->> "fmt"n",##arg)

#define FLASH_ERROR(fmt,arg...)          printf("<<-FLASH-ERROR->> "fmt"n",##arg)

#define FLASH_DEBUG(fmt,arg...)          do{

                                          if(FLASH_DEBUG_ON)

                                          printf("<<-FLASH-DEBUG->> [%d]"fmt"n",__LINE__, ##arg);

                                          }while(0)




void SPI_FLASH_Init(void);

void SPI_FLASH_SectorErase(u32 SectorAddr);

void SPI_FLASH_BulkErase(void);

void SPI_FLASH_PageWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite);

void SPI_FLASH_BufferWrite(u8* pBuffer, u32 WriteAddr, u16 NumByteToWrite);

void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead);

u32 SPI_FLASH_ReadID(void);

u32 SPI_FLASH_ReadDeviceID(void);

void SPI_FLASH_StartReadSequence(u32 ReadAddr);

void SPI_Flash_PowerDown(void);

void SPI_Flash_WAKEUP(void);



u8 SPI_FLASH_ReadByte(void);

u8 SPI_FLASH_SendByte(u8 byte);

u16 SPI_FLASH_SendHalfWord(u16 HalfWord);

void SPI_FLASH_WriteEnable(void);

void SPI_FLASH_WaitForWriteEnd(void);


#endif /* __SPI_FLASH_H */


bsp_spi_flash.c


#include "./flash/bsp_spi_flash.h"



static __IO uint32_t  SPITimeout = SPIT_LONG_TIMEOUT;   


static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);


 /**

  * @brief  SPI_FLASH初始化

  */

void SPI_FLASH_Init(void)

{

  SPI_InitTypeDef  SPI_InitStructure;

  GPIO_InitTypeDef GPIO_InitStructure;


  /* 使能FLASH_SPI 及GPIO 時鐘 */

  /*!< SPI_FLASH_SPI_CS_GPIO, SPI_FLASH_SPI_MOSI_GPIO, 

       SPI_FLASH_SPI_MISO_GPIO,SPI_FLASH_SPI_SCK_GPIO 時鐘使能 */

  RCC_AHB1PeriphClockCmd (FLASH_SPI_SCK_GPIO_CLK | FLASH_SPI_MISO_GPIO_CLK|FLASH_SPI_MOSI_GPIO_CLK|FLASH_CS_GPIO_CLK, ENABLE);


  /*!< SPI_FLASH_SPI 時鐘使能 */

  FLASH_SPI_CLK_INIT(FLASH_SPI_CLK, ENABLE);


  //設置引腳復用

  GPIO_PinAFConfig(FLASH_SPI_SCK_GPIO_PORT,FLASH_SPI_SCK_PINSOURCE,FLASH_SPI_SCK_AF); 

    GPIO_PinAFConfig(FLASH_SPI_MISO_GPIO_PORT,FLASH_SPI_MISO_PINSOURCE,FLASH_SPI_MISO_AF); 

    GPIO_PinAFConfig(FLASH_SPI_MOSI_GPIO_PORT,FLASH_SPI_MOSI_PINSOURCE,FLASH_SPI_MOSI_AF); 


  /*!< 配置 SPI_FLASH_SPI 引腳: SCK */

  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_SCK_PIN;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;  


  GPIO_Init(FLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);


    /*!< 配置 SPI_FLASH_SPI 引腳: MISO */

  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MISO_PIN;

  GPIO_Init(FLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);


    /*!< 配置 SPI_FLASH_SPI 引腳: MOSI */

  GPIO_InitStructure.GPIO_Pin = FLASH_SPI_MOSI_PIN;

  GPIO_Init(FLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);  


    /*!< 配置 SPI_FLASH_SPI 引腳: CS */

  GPIO_InitStructure.GPIO_Pin = FLASH_CS_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

  GPIO_Init(FLASH_CS_GPIO_PORT, &GPIO_InitStructure);


  /* 停止信號 FLASH: CS引腳高電平*/

  SPI_FLASH_CS_HIGH();


  /* FLASH_SPI 模式配置 */

  // FLASH芯片 支持SPI模式0及模式3 據此設置CPOL CPHA

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;

  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;

  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

[1] [2] [3]
關鍵字:stm32  SPI  讀寫串行FLASH 引用地址:嵌入式stm32學習:SPI-讀寫串行FLASH

上一篇:STM32學習筆記——按鍵輸入
下一篇:嵌入式STM32學習:I2C-讀寫EEPROM2

推薦閱讀

sbit用來定義一個特殊功能寄存器的某一位。sbit name = sfr-name ^ bit-position; sbit name = sfr-address ^ bit-position; sbit name = sbit-address; name 特殊功能寄存器某一位的名稱 sfr-name 已定義的特殊功能寄存器名稱 bit-position 特殊功能寄存器比特位置 sfr-address 特殊功能寄存器的地址 sbit-address 特...
移動應用、基礎設施與國防應用中核心技術與 RF 解決方案的領先供應商 Qorvo?, Inc.宣布,發布兩款全新的氮化鎵(GaN)功率放大器(PA)系列產品--- QPA2212和QPA1022,它們適合國際Ka頻段的衛星通信應用與X頻段的相控陣雷達應用。這些解決方案提供的功率、線性度和效率可達到行業最高水平,且體積更小,因此這兩款器件既能提高系統性能,又能降低成...
本實驗運用keil uvision4軟件以及isis7 Professional仿真軟件完成的。需事先安裝好這兩個軟件,下面開始我們的實驗:我們先用isis7 繪制出如圖所示的電路圖:由于我對中間單片機芯片有些許移動,因此,線有點亂,望理解!(此處運用INT0)接下來,我們開始在keil軟件中編程輸入以下代碼:#include<reg51.h>sbit K=P3^3;/*void delays(){ unsigned ...
4.3 串口通信4.3.1 通信的概念通信一詞按照傳統的理解就是信息的傳輸與交換。對于單片機來說,通信則與傳感器、存儲芯片、外圍控制芯片等技術緊密結合,成為整個單片機系統的“神經中樞”;沒有通信,單片機所實現的功能僅僅局限于單片機本身,就無法通過其它設備獲得有用信息,也無法將自己產生的信息告訴其它設備。如果單片機通信沒處理好的話,它和外圍...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 健康| 武城县| 牙克石市| 观塘区| 安庆市| 宣恩县| 扶风县| 湟中县| 日照市| 义乌市| 肥乡县| 芜湖市| 昌宁县| 莒南县| 万宁市| 鄱阳县| 太仓市| 辰溪县| 蓝田县| 西安市| 棋牌| 华阴市| 个旧市| 体育| 宜兰市| 伊吾县| 宜宾市| 武功县| 景德镇市| 县级市| 大新县| 会昌县| 泗洪县| 陈巴尔虎旗| 若尔盖县| 瓮安县| 达孜县| 专栏| 绥宁县| 宜兴市| 安康市|