標(biāo)題:
STM32RCt6 SPI與W25Q16源程序
[打印本頁]
作者:
IceHowe
時(shí)間:
2019-7-19 18:23
標(biāo)題:
STM32RCt6 SPI與W25Q16源程序
#include "w25qxx.h"
#include "spi.h"
#include "delay.h"
#include "usart.h"
u16 W25QXX_TYPE=W25Q16; //默認(rèn)是W25Q16
//初始化SPI FLASH的IO口 SPI CS PA2
void W25QXX_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );//PORTB時(shí)鐘使能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; // PA2 推挽
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
W25QXX_CS=1; //SPI FLASH不選中
SPI2_Init(); //初始化SPI
SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//設(shè)置為18M時(shí)鐘,高速模式
W25QXX_TYPE=W25QXX_ReadID();//讀取FLASH ID.
}
//讀取W25QXX的狀態(tài)寄存器
//BIT7 6 5 4 3 2 1 0
//SPR RV TB BP2 BP1 BP0 WEL BUSY
//SPR:默認(rèn)0,狀態(tài)寄存器保護(hù)位,配合WP使用
//TB,BP2,BP1,BP0:FLASH區(qū)域?qū)懕Wo(hù)設(shè)置
//WEL:寫使能鎖定
//BUSY:忙標(biāo)記位(1,忙;0,空閑)
//默認(rèn):0x00
u8 W25QXX_ReadSR(void)
{
u8 byte=0;
W25QXX_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_ReadStatusReg); //發(fā)送讀取狀態(tài)寄存器命令
byte=SPI2_ReadWriteByte(0Xff); //讀取一個(gè)字節(jié)
W25QXX_CS=1; //取消片選
return byte;
}
//寫W25QXX狀態(tài)寄存器
//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以寫!!!
void W25QXX_Write_SR(u8 sr)
{
W25QXX_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_WriteStatusReg);//發(fā)送寫取狀態(tài)寄存器命令
SPI2_ReadWriteByte(sr); //寫入一個(gè)字節(jié)
W25QXX_CS=1; //取消片選
}
//W25QXX寫使能
//將WEL置位
void W25QXX_Write_Enable(void)
{
W25QXX_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_WriteEnable); //發(fā)送寫使能
W25QXX_CS=1; //取消片選
}
//W25QXX寫禁止
//將WEL清零
void W25QXX_Write_Disable(void)
{
W25QXX_CS=0; //使能器件
SPI2_ReadWriteByte(W25X_WriteDisable); //發(fā)送寫禁止指令
W25QXX_CS=1; //取消片選
}
復(fù)制代碼
#include "w25qxx.h"
#include "spi.h"
#include "usart.h"
#include "key.h"
#include "delay.h"
#include "led.h"
#define SIZE sizeof(key0)
int main(void)
{
u32 FLASH_SIZE=16*1024*1024;//2M字節(jié)
const u8 key0[]={"按下KEY0"};
const u8 key1[]={"按下KEY1"};
u8 data[SIZE];
u8 key;
KEY_Init();
delay_init();
LED_Init();
W25QXX_Init();
uart_init(115200);
while(W25QXX_ReadID()!=W25Q16) //檢測(cè)不到W25Q16
{
printf("未檢測(cè)到W25Q16\n");
delay_ms(1000);
}
if(W25QXX_ReadID()==W25Q16)
{
printf("檢測(cè)到W25Q16\n");
}
W25QXX_Erase_Chip();
while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)
{
W25QXX_Write((u8*)key0,FLASH_SIZE-100,SIZE); //從倒數(shù)第100個(gè)地址處開始,寫入SIZE長度的數(shù)據(jù)
printf("%s\n","存儲(chǔ)內(nèi)容為:按下KEY0");
PAout(8)=!PAout(8);
}
else if(key==KEY1_PRES)
{
W25QXX_Write((u8*)key1,FLASH_SIZE-100,SIZE); //從倒數(shù)第100個(gè)地址處開始,寫入SIZE長度的數(shù)據(jù)
printf("%s\n","存儲(chǔ)內(nèi)容為:按下KEY1");
PDout(2)=!PDout(2);
}
else if(key==WKUP_PRES)
{
W25QXX_Read(data,FLASH_SIZE-100,SIZE); //從倒數(shù)第100個(gè)地址處開始,讀出SIZE個(gè)字節(jié)
printf("讀取成功,內(nèi)容為:%s\n",data);
PAout(8)=!PAout(8);
PDout(2)=!PDout(2);
}
else
{
delay_ms(10);
}
}
}
復(fù)制代碼
全部資料51hei下載地址:
SPI_Flash.7z
(185.11 KB, 下載次數(shù): 87)
2019-7-20 03:32 上傳
點(diǎn)擊文件名下載附件
完整工程代碼
下載積分: 黑幣 -5
(新版)MINI-STM32--原理圖M.pdf
(351.44 KB, 下載次數(shù): 39)
2019-7-19 18:19 上傳
點(diǎn)擊文件名下載附件
STM32RCt6原理圖
下載積分: 黑幣 -5
作者:
jzdcff
時(shí)間:
2019-7-31 12:34
你好,在實(shí)際用的時(shí)候大部分存儲(chǔ)讀寫的是 32位整數(shù),讀寫函數(shù)只能按照8位傳輸,請(qǐng)問改如何實(shí)現(xiàn)32位整數(shù)的讀寫保存。
作者:
ppnnwst
時(shí)間:
2021-11-10 09:54
nihao,id讀取不對(duì)怎么辦
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1