STM32使用SPI向W25Q64存储信息(HAL库)

news2024/12/24 9:06:16

        SPI全双工通信:全双工在时钟脉冲周期的每一个周期内,每当主设备同时发送一个字节的同时,会接受从设备接受一个字节数据,SPI全双工最大的特点就是发送和接受数据同步进行发送多少数据就要接受多少数据。使用全双工通信的具体过程如下。

        主设备发送数据(MOSI):主设备通过MOSI(Master Output Slaver Input )引脚发送数据。

        从设备发送数据(MISO):从设备通过MISO(Master Input Slaver Output)引脚发送数据。

        时钟同步(SCLK):主机发送多少个字节,就对应着要发送多少个时钟脉冲,每一个时钟脉冲对应着一个数据bit位。

        片选信号(NSS/CS):拉低对应从机的片选信号,代表选中这个从机。                                                                                                                                                           

          flash存储模块: W25Q64 后面的 64代表64Mbit  也就是 8MB 的总容量,划出64k容量称为块,每个块在划出4k的容量是扇区,在细分出256Byte是页。 

         这里对flash模块,写入数据的流程如下,首先要对模块写使能,然后对已经写过数据的区域进行写擦除,这里W25Q64闪存模块以及类似的模块中,写使能(Write Enbale)是一个必要的步奏,是为了防止各种意外写入

        hal(硬件抽象层)库中,需要将代码写到注释里面,这种写法在重新配置STM32CubleMX的时候,代码不会被删除,会保留注释区域内的代码。

        W25Q64的数据手册里面,有写使能的地址,擦除命令格式,这里写使能是   0x06这个数据帧格式。

        在函数结构体中,把这个地址,发送出去就完成了写使能,才能对W25Q64正常的写入数据,同样的擦除扇区也需要特定的数据帧命令,还有页编程地址,这些在数据手册里面都能找到,图放在下面,找到之后,在发送数据帧里面,加入就能完成对应的功能。

        0x02擦除扇区,首地址,程序中将0x02,作为数据帧发送出去,就能完成对W25Q64的扇区擦除。

        0x02页编程地址,数据帧首段有这个地址,就代表着,要对页4K 这个地址进行变成

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
static void SaveLEDSate(uint8_t ledstate)
	
{	//声明写使能数据帧
	uint8_t Wtrite_EnableCmd[] = {0x06};
	//写使能格式
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,Wtrite_EnableCmd,1,HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
	//擦除扇区数据帧
	uint8_t SecortErase[] = {0x20,0x00,0x00,0x00};
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,SecortErase,4,HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);

	HAL_Delay(100);
	//在此写使能
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,Wtrite_EnableCmd,1,HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
	//页编程
	uint8_t pageProgCmd[5] = {0x02,0x00,0x00,0x00,ledstate};
	
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,pageProgCmd,5,HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);


}
static uint8_t LoadLEDState(void)
{
	uint8_t readDataCmd [] = {0x03,0x00,0x00,0x00};
	uint8_t ledState = 0xff;
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
	HAL_SPI_Transmit(&hspi1,readDataCmd,4,HAL_MAX_DELAY);
	HAL_SPI_Receive(&hspi1,&ledState,1,HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
	
	return ledState;

}

/* USER CODE END 0 */

/* USER CODE BEGIN PFP */
static void SaveLEDSate(uint8_t ledstate);
/* USER CODE END PFP */

        到这里,就通过以上函数就能对W25Q64,进行写数据了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vst 算法R语言手工实现 | Seurat4 筛选高变基因的算法

1. vst算法描述 (1)为什么需要矫正 image source: https://ouyanglab.com/singlecell/basic.html In this panel, we observe that there is a very strong positive relationship between a gene’s average expression and its observed variance. I…

【iOS】static、extern、const、auto关键字以及联合使用

目录 前言extern关键字static关键字const关键字 联合使用static和externstatic和constextern和const auto关键字 先了解一下静态变量所在的全局/静态区的特点:【iOS】内存五大分区 前言 上面提到的全局/静态区中存放的是全局变量或静态变量: 全局变量…

逻辑回归(Logistic Regression,LR)

分类和回归是机器学习的两个主要问题。 分类处理的是离散数据回归处理的是连续数据 线性回归:回归 拟合一条线预测函数: 逻辑回归:分类——找到一条线可以将不同类别区分开 虽然称为逻辑回归,但是实际是一种分…

Chromium CI/CD 之Jenkins实用指南2024-在Windows节点上创建任务(九)

1. 引言 在现代软件开发流程中,持续集成(CI)和持续交付(CD)已成为确保代码质量和加速发布周期的关键实践。Jenkins作为一款广泛应用的开源自动化服务器,通过其强大的插件生态系统和灵活的配置选项&#xf…

【第4章】Spring Cloud之Nacos单机模式支持mysql

文章目录 前言一、初始化1. 初始化数据库2. 修改配置文件 二、效果1. 重新启动2. 新增用户 总结 前言 在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具…

数据如光,科技助航丨泰迪智能科技2024年暑期数据分析学徒班正式开班

7月16日,泰迪智能科技2024年暑期数据分析学徒班在泰迪智能科技天河培训中心正式开班,泰迪智能科技培训业务部孙学镂、教学代表周津、授课讲师巫兴港、就业指导老师赵欣欣、孟宪同、教学班主任黄晨华出席此次开班仪式。 仪式伊始,孙学镂代表广…

达梦数据库的系统视图v$arch_status

达梦数据库的系统视图v$arch_status 在达梦数据库(DM Database)中,V$ARCH_STATUS 是一个动态性能视图(Dynamic Performance View),用于显示归档日志的状态信息。这个视图可以帮助数据库管理员监控和管理数…

【Linux服务器Java环境搭建】010在linux中安装Redis,以及对Redis的配置与远程连接

系列文章目录 【Linux服务器Java环境搭建】 前言 好久没有更新博客了,今天下了班回到家,看到电脑桌上尘封已久的《Spring Boot应用开发实战》,翻开目录想起来之前写的系列【Linux服务器Java环境搭建】还未完结,那就继续吧&#…

通义千问AI模型对接飞书机器人-模型配置(2-1)

一 背景 根据业务或者使用场景搭建自定义的智能ai模型机器人,可以较少我们人工回答的沟通成本,而且可以更加便捷的了解业务需求给出大家设定的业务范围的回答,目前基于阿里云的通义千问模型研究。 二 模型研究 参考阿里云帮助文档&#xf…

IDEA的断点调试(Debug)

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

基于chrome插件的企业应用

一、chrome插件技术介绍 1、chrome插件组件介绍 名称 职责 访问权限 DOM访问情况 popup 弹窗页面。即打开形式是通过点击在浏览器右上方的icon,一个弹窗的形式。 注: 展示维度 browser_action:所有页面 page_action:指定页面 可访问绝大部分api 不可以 bac…

数据分析入门:用Python和Numpy探索音乐流行趋势

一、引言 音乐是文化的重要组成部分,而音乐流行趋势则反映了社会文化的变迁和人们审美的变化。通过分析音乐榜单,我们可以了解哪些歌曲或歌手正在受到大众的欢迎,甚至预测未来的流行趋势。Python作为一种强大的编程语言,结合其丰…

【数据库系列】Parquet 文件介绍

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

记录些Spring+题集(8)

Spring Bean 的生命周期 Spring Bean 的生命周期涉及到 Spring 框架中对象的创建、初始化、使用和销毁等关键过程。 在Spring框架中,Bean的生命周期经历以下几个阶段: 1)实例化: Spring 根据配置文件或注解等方式创建 Bean 实例…

《0基础》学习Python——第十八讲__爬虫\<1>

一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序(通常使用Python),爬虫可以自动化地访问网页,解析网页内容并提取出所需的数据。爬虫可以用于各种用途,如搜索引擎的索引,数据分析和挖掘&#x…

vue 腾讯云 javascript sdk + 简单富文本组件设计+实战

<template><div><quill-editor v-model"content" ref"myQuillEditor" :options"editorOption" change"onEditorChange"input"handleInput"></quill-editor><!-- 链接添加对话框 --><el-di…

随手记:推荐vscode好用的几个小插件

原始用了挺久的插件&#xff0c;先上截图&#xff0c;以后有空再编辑&#xff1a; fittenCode 是一个AI小助手&#xff0c;相对来说很智能&#xff0c;你在vscode当中编写代码&#xff0c;甚至都可以知道你下一步知道干嘛&#xff0c;训练的还可以。而且还可以帮你起名字&…

spring MVC 简单的案例(2)用户登录

一、用户登录 1&#xff09;前端代码 index.html <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maxim…

Filebeat k8s 部署(Deployment)采集 PVC 日志发送至 Kafka——日志处理(二)

文章目录 前言Filebeat Configmap 配置Filebeat Deployment验证总结 前言 在上篇文章中总结了 Django 日志控制台输出、文件写入按天拆分文件&#xff0c;自定义 Filter 增加 trace_id 以及过滤——日志处理&#xff08;一)&#xff0c;将日志以 JSON 格式写入日志文件。我们的…

【BUG】已解决:SyntaxError invalid syntax

SyntaxError invalid syntax 目录 SyntaxError invalid syntax 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…