国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

STM32F407讀寫SPI接口的flash W25Q128存儲芯片驅動程序

[復制鏈接]
樓主
完整源碼.rar (1.4 MB, 售價: 2 E幣)
使用了固件庫,附件中用windows畫圖工具畫了幾幅示意圖幫助理解,圖畫得比較丑,希望能幫助到其他人
STM32F407讀寫SPI接口的flash W25Q128存儲芯片驅動程序 220013bw4mp4665541ljp5.png STM32F407讀寫SPI接口的flash W25Q128存儲芯片驅動程序 220027kgsazoyysra5bos6.png
部分源程序如下:完整源碼請參考本文附件
  1. #include "stm32f4xx.h"
  2. #include "spi.h"


  3. void spi1_init(void)
  4. {
  5.     GPIO_InitTypeDef  GPIO_InitStruct;
  6.     SPI_InitTypeDef SPI_InitStruct;
  7.    
  8.     //開啟SPI1 和 GPIOB的時鐘
  9.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  10.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  11.    
  12.    
  13.     //設置引腳 PB3--SPI1_SCK PB4--SPI1_MISO PB5--SPI1_MOSI
  14.     //模式、推挽、是否上拉等等
  15.         
  16.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//復用模式
  17.     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
  18.     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5;    //3 4 5號引腳
  19.     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內部上拉電阻
  20.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速

  21.     GPIO_Init(GPIOB, &GPIO_InitStruct);
  22.    
  23.     //復用為SPI1
  24.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);
  25.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
  26.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);
  27.    
  28.     //PB14---作為 W25Q128的片選
  29.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
  30.     //GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽輸出
  31.     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;    //14號引腳
  32.     //GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;//內部上拉電阻
  33.     //GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速

  34.     GPIO_Init(GPIOB, &GPIO_InitStruct);
  35.    
  36.     //默認先不選中W25Q128
  37.     CS = 1;

  38.     //關于主從模式 高低位那個先發 8或16bits 時鐘的頻率 極性和相位
  39.     SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  40.     //W25Q128 MODE 3
  41.     SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;//從機mode 3的需求
  42.     SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;//從機mode 3的需求
  43.     SPI_InitStruct.SPI_CRCPolynomial = 7;//校驗和多項式有幾項
  44.     SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;//從機的需求
  45.     SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//兩線全雙工
  46.     SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;//從機的需要
  47.     SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
  48.     SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;//軟件管理片選引腳
  49.     SPI_Init(SPI1, &SPI_InitStruct);

  50.     //使能SPI1
  51.     SPI_Cmd(SPI1, ENABLE);
  52.    
  53. }


  54. unsigned char spi1_write_read_byte(unsigned char data)
  55. {
  56.     //等上一次發送完成
  57.     while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) != SET);
  58.    
  59.     SPI_I2S_SendData(SPI1, data);
  60.    
  61.     //等接收緩沖非空
  62.     while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != SET);
  63.    
  64.     return SPI_I2S_ReceiveData(SPI1);

  65. }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 02:07

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表