IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32使用W25QXX flash闪存芯片基于串口自由写入或读取数据 -> 正文阅读

[嵌入式]STM32使用W25QXX flash闪存芯片基于串口自由写入或读取数据

先上效果图

你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

代码

主程序

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "stdio.h"
#include "w25qxx.h"


int main(void){

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init();
	uart_init(115200);
	W25QXX_Init();			//W25QXX初始化
	
	
	while(W25QXX_ReadID()!=W25Q16){								//检测不到W25Q16
		delay_ms(1000);
		printf("未检测到W25Q16,请检查!\r\n");
	}
	
	
	while(1){
		w25q16_SHUJU_CHULI();
	}
	   
}

w25qxx.c串口协议程序

#include "w25qxx.h" 
#include "spi.h"
#include "delay.h"
#include "usart.h"

#define MINGLIN 1
#define DIZHI 2
#define SHUJU 3

//要写入到W25Q64的字符串数组
u8 W25Q16_DATA[256];
u8 tishi_bit=9;
u8 r_w=0;
u8 state=MINGLIN;

u16 i=0;
u32 addr;
u8 datatemp[256];
u32 FLASH_SIZE=16*1024*1024;	//FLASH 大小为16M bit  /  2M字节 

void  w25q16_RXBUF_HANDLE(void){
	static u8 k=0;
	u8 Res;
	Res = USART_ReceiveData(USART1);	//读取接收到的数据
	
	if(state==MINGLIN){
		if(Res=='r'){
			k=0;
			r_w=1;
			state=DIZHI;
		}
		else if(Res=='w'){
			k=0;
			r_w=2;
			state=DIZHI;
		}	
	}
	else if(state==DIZHI){
		W25Q16_DATA[k]=Res;
		k++;
		if(k==6){
			k=0;
			tishi_bit=1;
		}
	}
	else if(state==SHUJU){
		if(k>2){
			if((Res=='=')&&(W25Q16_DATA[k-3]=='=')&&(W25Q16_DATA[k-2]=='=')&&(W25Q16_DATA[k-1]=='=')){
				W25Q16_DATA[k-3]='\0';
				tishi_bit=4;
				k=0;
			}
			else{
				W25Q16_DATA[k]=Res;
				k++;
			}
		}
		else{
			W25Q16_DATA[k]=Res;
			k++;
		}
	}
}


void w25q16_SHUJU_CHULI(void){
	
	if(tishi_bit==9){
		printf("请输入读或写指令与地址(000000--ffffff) { r000000或 w000000 }\r\n");
		state=MINGLIN;
		tishi_bit=0;
	}
	else if(tishi_bit==1){
		addr |= ((u32)W25Q16_DATA[0]-48)<<20;
		addr |= ((u32)W25Q16_DATA[1]-48)<<16;
		addr |= ((u32)W25Q16_DATA[2]-48)<<12;
		addr |= ((u32)W25Q16_DATA[3]-48)<<8;
		addr |= ((u32)W25Q16_DATA[4]-48)<<4;
		addr |= ((u32)W25Q16_DATA[5]-48);
		if(r_w==1){
			W25QXX_Read(W25Q16_DATA,addr,255);
			printf("地址:%X处的数据为:\r\n\r\n",addr);
			printf("%s\r\n\r\n",W25Q16_DATA);
			tishi_bit=9;
			r_w=0;
			state=MINGLIN;
			addr=0;
		}
		else if(r_w==2){
			printf("请输入要在地址:%X  处写入的数据,并以四个“====”结束\r\n",addr);
			tishi_bit=0;
			r_w=0;
			state=SHUJU;
		}
	}
	else if(tishi_bit==4){
		printf("已在地址:%X  处成功写入数据\r\n",addr);
		W25QXX_Write(W25Q16_DATA,addr,255);	
		tishi_bit=9;
		state=MINGLIN;
		addr=0;
	}
}

该串口协议程序现仅默认单次最大输入数据为255字节;且每次读取或写入W25QXX flash闪存芯片也默认为255字节;如需修改更大数据,请修改u8 W25Q16_DATA[256]数组缓存的大小,以及W25QXX_Write(W25Q16_DATA,addr,255)
W25QXX_Read(W25Q16_DATA,addr,255)
两个函数最后的一个数值,代表写入数据量的大小

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:57:21  更:2021-10-15 11:57:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:34:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码