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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3069|回復: 2
打印 上一主題 下一主題
收起左側

STM32RCt6 SPI與W25Q16源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:570907 發表于 2019-7-19 18:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "w25qxx.h"
  2. #include "spi.h"
  3. #include "delay.h"
  4. #include "usart.h"

  5. u16 W25QXX_TYPE=W25Q16;        //默認是W25Q16



  6. //初始化SPI FLASH的IO口   SPI CS PA2
  7. void W25QXX_Init(void)
  8. {        
  9.   GPIO_InitTypeDef GPIO_InitStructure;
  10.         RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA, ENABLE );//PORTB時鐘使能

  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;  // PA2 推挽   
  12.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽輸出
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.          GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.          GPIO_SetBits(GPIOA,GPIO_Pin_2);

  16.   W25QXX_CS=1;                                //SPI FLASH不選中
  17.         SPI2_Init();                           //初始化SPI
  18.         SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//設置為18M時鐘,高速模式
  19.         W25QXX_TYPE=W25QXX_ReadID();//讀取FLASH ID.

  20. }  

  21. //讀取W25QXX的狀態寄存器
  22. //BIT7  6   5   4   3   2   1   0
  23. //SPR   RV  TB BP2 BP1 BP0 WEL BUSY
  24. //SPR:默認0,狀態寄存器保護位,配合WP使用
  25. //TB,BP2,BP1,BP0:FLASH區域寫保護設置
  26. //WEL:寫使能鎖定
  27. //BUSY:忙標記位(1,忙;0,空閑)
  28. //默認:0x00
  29. u8 W25QXX_ReadSR(void)   
  30. {  
  31.         u8 byte=0;   
  32.         W25QXX_CS=0;                            //使能器件   
  33.         SPI2_ReadWriteByte(W25X_ReadStatusReg); //發送讀取狀態寄存器命令   
  34.         byte=SPI2_ReadWriteByte(0Xff);          //讀取一個字節  
  35.         W25QXX_CS=1;                            //取消片選     
  36.         return byte;   
  37. }
  38. //寫W25QXX狀態寄存器
  39. //只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以寫!!!
  40. void W25QXX_Write_SR(u8 sr)   
  41. {   
  42.         W25QXX_CS=0;                            //使能器件   
  43.         SPI2_ReadWriteByte(W25X_WriteStatusReg);//發送寫取狀態寄存器命令   
  44.         SPI2_ReadWriteByte(sr);                       //寫入一個字節  
  45.         W25QXX_CS=1;                            //取消片選                  
  46. }   
  47. //W25QXX寫使能        
  48. //將WEL置位   
  49. void W25QXX_Write_Enable(void)   
  50. {
  51.         W25QXX_CS=0;                                  //使能器件   
  52.     SPI2_ReadWriteByte(W25X_WriteEnable);         //發送寫使能  
  53.         W25QXX_CS=1;                                   //取消片選                  
  54. }
  55. //W25QXX寫禁止        
  56. //將WEL清零  
  57. void W25QXX_Write_Disable(void)   
  58. {  
  59.         W25QXX_CS=0;                            //使能器件   
  60.     SPI2_ReadWriteByte(W25X_WriteDisable);  //發送寫禁止指令   
  61.         W25QXX_CS=1;                            //取消片選                  
  62. }         
復制代碼
  1. #include "w25qxx.h"
  2. #include "spi.h"
  3. #include "usart.h"
  4. #include "key.h"
  5. #include "delay.h"
  6. #include "led.h"

  7. #define SIZE sizeof(key0)

  8. int main(void)
  9. {
  10.         u32 FLASH_SIZE=16*1024*1024;//2M字節
  11.         const u8 key0[]={"按下KEY0"};
  12.         const u8 key1[]={"按下KEY1"};
  13.         u8 data[SIZE];
  14.         u8 key;
  15.         
  16.         KEY_Init();
  17.         delay_init();
  18.         LED_Init();
  19.         W25QXX_Init();
  20.         uart_init(115200);
  21.         
  22.         while(W25QXX_ReadID()!=W25Q16)                                                                //檢測不到W25Q16
  23.         {
  24.                 printf("未檢測到W25Q16\n");
  25.                 delay_ms(1000);
  26.         }
  27.         if(W25QXX_ReadID()==W25Q16)
  28.         {
  29.                 printf("檢測到W25Q16\n");
  30.         }
  31.         W25QXX_Erase_Chip();
  32.         while(1)
  33.         {
  34.                 key=KEY_Scan(0);
  35.                 if(key==KEY0_PRES)
  36.                 {
  37.                         W25QXX_Write((u8*)key0,FLASH_SIZE-100,SIZE);                        //從倒數第100個地址處開始,寫入SIZE長度的數據
  38.                         printf("%s\n","存儲內容為:按下KEY0");
  39.                         PAout(8)=!PAout(8);
  40.                 }
  41.                 else if(key==KEY1_PRES)
  42.                 {
  43.                         W25QXX_Write((u8*)key1,FLASH_SIZE-100,SIZE);                        //從倒數第100個地址處開始,寫入SIZE長度的數據
  44.                         printf("%s\n","存儲內容為:按下KEY1");
  45.                         PDout(2)=!PDout(2);
  46.                 }
  47.                 else if(key==WKUP_PRES)
  48.                 {
  49.                         W25QXX_Read(data,FLASH_SIZE-100,SIZE);                                        //從倒數第100個地址處開始,讀出SIZE個字節
  50.                         printf("讀取成功,內容為:%s\n",data);
  51.                         PAout(8)=!PAout(8);
  52.                         PDout(2)=!PDout(2);
  53.                 }
  54.                 else
  55.                 {
  56.                         delay_ms(10);
  57.                 }

  58.         }
  59.         
  60. }

復制代碼
全部資料51hei下載地址:
SPI_Flash.7z (185.11 KB, 下載次數: 87)
(新版)MINI-STM32--原理圖M.pdf (351.44 KB, 下載次數: 39)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:544352 發表于 2019-7-31 12:34 | 只看該作者
你好,在實際用的時候大部分存儲讀寫的是 32位整數,讀寫函數只能按照8位傳輸,請問改如何實現32位整數的讀寫保存。
回復

使用道具 舉報

板凳
ID:979665 發表于 2021-11-10 09:54 | 只看該作者
nihao,id讀取不對怎么辦
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频中文字幕 | www.欧美 | 欧美中文字幕一区二区 | 中文字幕亚洲欧美日韩在线不卡 | 日本一二区视频 | 91精品国产91久久久久久丝袜 | 国产精品夜夜夜一区二区三区尤 | 久久精品国产一区 | 亚洲网站免费看 | 欧美一级淫片免费视频黄 | 九色综合网| 黄色91在线 | 成人一级视频在线观看 | 免费黄色的视频 | 啪啪网页 | 激情欧美一区二区三区中文字幕 | 欧美一区二区成人 | 国产a视频 | 精品久久久av | 91精品国产乱码久久久久久久 | 午夜理伦三级理论三级在线观看 | 国产高清在线精品 | 日韩av在线免费 | 色婷婷国产精品综合在线观看 | 美女高潮网站 | 日韩欧美第一页 | 日韩手机在线视频 | 久久久久久国产精品免费免费 | 国产精品精品视频一区二区三区 | 免费观看成人鲁鲁鲁鲁鲁视频 | 欧美日韩视频在线播放 | 在线观看国产视频 | 日韩一区二区三区在线视频 | 在线一区视频 | 欧美日韩电影一区二区 | 国产精品成人av | 国产亚洲网站 | 亚洲日韩中文字幕一区 | 欧美一区二区三区视频在线播放 | 中文字幕国产视频 | 青青操av |