久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3486|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:765366 發(fā)表于 2020-5-30 22:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我給學(xué)生講解SPI接口時,寫的STM32F407 讀寫SPI接口的flash W25Q128的例程
使用了固件庫,附件中用windows畫圖工具畫了幾幅示意圖幫助理解,圖畫得比較丑,希望能幫助到其他人

單片機源程序如下:
  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.     //設(shè)置引腳 PB3--SPI1_SCK PB4--SPI1_MISO PB5--SPI1_MOSI
  14.     //模式、推挽、是否上拉等等
  15.         
  16.     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//復(fù)用模式
  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;//內(nèi)部上拉電阻
  20.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速

  21.     GPIO_Init(GPIOB, &GPIO_InitStruct);
  22.    
  23.     //復(fù)用為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;//內(nèi)部上拉電阻
  33.     //GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//快速

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

  38.     //關(guān)于主從模式 高低位那個先發(fā) 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.     //等上一次發(fā)送完成
  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. }
復(fù)制代碼
  1. void spi_init(void)
  2. {


  3.     GPIO_InitTypeDef GPIO_InitStruct;
  4.     SPI_InitTypeDef SPI_InitStruct;
  5.    
  6.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  7.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  8.    
  9.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;
  10.     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  11.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  12.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_14;
  13.     GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;
  14.    
  15.     GPIO_Init(GPIOB, &GPIO_InitStruct);

  16.     GPIO_SetBits(GPIOB, GPIO_Pin_14);
  17.    
  18.     // SCK MISO MOSI
  19.     GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF;
  20.     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  21.     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  22.     GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_3 | GPIO_Pin_4 |GPIO_Pin_5;
  23.     GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;
  24.    
  25.     GPIO_Init(GPIOB, &GPIO_InitStruct);
  26.    
  27.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1);
  28.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1);
  29.     GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1);
  30.    
  31.     SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
  32.     SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
  33.     SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
  34.     SPI_InitStruct.SPI_CRCPolynomial = 7;
  35.     SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
  36.     SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  37.     SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
  38.     SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
  39.     SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;

  40.     SPI_Init(SPI1, &SPI_InitStruct);

  41.     //ê1ÄüSPI
  42.     SPI_Cmd(SPI1, ENABLE);
  43.    
  44.     spi_write_read_byte(0xff);

  45. }



  46. u8 spi_write_read_byte( u8 data )
  47. {
  48.     while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) != SET);
  49.     SPI_I2S_SendData(SPI1, data);
  50.    
  51.     while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != SET);

  52.     return SPI_I2S_ReceiveData(SPI1);
  53. }

復(fù)制代碼
全部資料51hei下載地址:
09 SPI.rar (1.4 MB, 下載次數(shù): 81)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
板凳
ID:765366 發(fā)表于 2020-5-31 00:02 | 只看該作者
首次發(fā)帖等待審核
回復(fù)

使用道具 舉報

地板
ID:124010 發(fā)表于 2021-4-14 14:50 | 只看該作者
你好,請問我讀取id的時候,讀到的全部是0xFF可能是啥原因
回復(fù)

使用道具 舉報

5#
無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线免费观看 | h视频在线免费看 | 高清一区二区视频 | 特一级黄色毛片 | 日韩视频一区二区三区 | 精品一区二区三区在线观看 | 免费天天干 | 综合久久一区 | 9999精品视频 | 中文字幕高清一区 | 免费看欧美一级片 | 国产午夜精品久久久 | 99视频在线| 91免费福利在线 | 91精品国产91久久久久久 | 成年人黄色小视频 | 日韩精品一区二区三区在线播放 | 男人的天堂中文字幕 | 人人干人人看 | 国产精品视频 | 一级毛片免费完整视频 | 成人精品国产一区二区4080 | 日本免费一区二区三区 | 少妇一区在线观看 | 欧美一区成人 | 欧美激情网站 | 日韩av一区二区在线观看 | 国产91亚洲精品 | 国产伦精品一区二区三区照片91 | 精品免费国产一区二区三区四区 | 国产精品一区二区在线 | 亚洲国产高清高潮精品美女 | 天堂av中文 | 精品国产一二三区 | 美女天堂在线 | 欧美一区二区在线观看 | 日本网站免费观看 | 成人网在线观看 | av中文在线观看 | 久久久成人免费视频 | 色综合av |