018 - STM32学习笔记 - SPI读写FLASH(三)- 写入字符串、小数与整数

018 - STM32学习笔记 - SPI访问Flash(三)- 写入字符串、小数与整数

上节对Flash的跨页写入数据进行了完善,但是数据写入都是以Byte数组的方式进行写入,这节分别进行字符串的写入和小数整数的写入,本节内容对SPI的函数不需要进行修改,在主函数的调用中会完善如何写入字符串、小数和整数。

1、字符串写入

u8 ReadBuffer[4096] = {0x00};
u8 WriteBuffer[] = "STM32学习笔记\r\nSPI读写Flash测试例程!";
int main(void)
{u32 TransferStatus = 0;u32 device_id = 0;LED_Config();DEBUG_USART1_Config();SPI_GPIO_Config();printf("\r\n这是SPI读取FLASH_Device_ID的测试实验!\r\n");SPI_Flash_WakeUp();							//掉电唤醒device_id = SPI_FLASH_ReadID();				 //获取设备IDif(device_id == sFLASH_ID){printf("\r\n检测到SPI FLASH W25Q128 !设备号为:0x%X \r\n",device_id);SPI_Flash_Erase(FLASH_SectorErass);						//扇区擦除,FLASH_SectorErass为宏定义,值为0x00SPI_FLASH_BufferWrite(WriteBuffer,FLASH_WriteAddress,sizeof(WriteBuffer));		//写入字符串printf("\r\n写入的数据为:\r\t%s\r\n",WriteBuffer);SPI_Flash_ReadDate(ReadBuffer,FLASH_ReadAddress,sizeof(WriteBuffer));			//读取写入的数据printf("\r\n读出的数据为:\r\t%s\r\n",ReadBuffer);TransferStatus = strcmp((char *)WriteBuffer,(char *)ReadBuffer);if(TransferStatus == 0){LED_GREEN;printf("\r\n 16M串行Flash(W24Q128)测试成功! \r\n");}else{LED_RED;printf("\r\n 16M串行Flash(W24Q128)测试失败! \r\n");}}while(1){}
}

测试效果:

在这里插入图片描述

2、小数、整数读写

int main(void)
{uint8_t cal_flag = 0;u32 device_id = 0;u32 i = 0;long double doubleBuffer[7] = {0};int intBuffer[7] = {0};DEBUG_USART1_Config();SPI_GPIO_Config();printf("\r\n这是SPI读取FLASH_Device_ID的测试实验!\r\n");SPI_Flash_WakeUp();									//掉电唤醒device_id = SPI_FLASH_ReadID();						 //获取FlashIDprintf("\r\ndevice_id = 0x%X\r\n",device_id);if(device_id == sFLASH_ID){SPI_Flash_ReadDate(&cal_flag, SPI_FLASH_PageSize*0, 1);				//读取数据标志位if(cal_flag == 0xFE){for(i = 0;i < 7;i++)									//先将浮点数数组和整数数组清空{doubleBuffer[i] = 0;intBuffer[i] = 0 ;}printf("\r\n检测到数据标志\r\n");SPI_Flash_ReadDate((void*)doubleBuffer, SPI_FLASH_PageSize*1, sizeof(doubleBuffer));     //读取小数数据,写入是首地址为256  SPI_Flash_ReadDate((void*)intBuffer, SPI_FLASH_PageSize*2, sizeof(intBuffer));           //读取整数数据,写入时首地址为512printf("\r\n从芯片读到数据:\r\n");			for( i=0; i<7; i++ ){printf("读取小数 = %LF \r\n",doubleBuffer[i]);printf("读取整数 = %d \r\n",intBuffer[i]);				}printf("\r\nFLASH存在数据,复位将清除小数写入实验\r\n");SPI_Flash_Erase(0);}else											//若未读取到数据标志位,则首先写入{printf("\r\n没有检测到数据标志,FLASH没有存储数据,即将进行小数写入实验\r\n");cal_flag =0xFE;SPI_Flash_Erase(0);            //写入前先擦除扇区SPI_FLASH_BufferWrite(&cal_flag, SPI_FLASH_PageSize*0, 1); 			//往第0页写入,即起始地址为0x00for( i=0; i<7; i++ ){doubleBuffer[i] = i +0.1;intBuffer[i]=i*100+1 ;}SPI_FLASH_BufferWrite((void*)doubleBuffer, SPI_FLASH_PageSize*1, sizeof(doubleBuffer));		//写入地址为256SPI_FLASH_BufferWrite((void*)intBuffer, SPI_FLASH_PageSize*2, sizeof(intBuffer));		    //写入地址为512printf("向芯片写入数据:");for( i=0; i<7; i++ ){printf("写入小数 = %LF\r\n",doubleBuffer[i]);printf("写入整数 = %d\r\n",intBuffer[i]);}printf("\r\n请复位开发板,以读取数据进行检验\r\n");}}SPI_Flash_PowerDown();while(1){}
}

无数据,写入数据:

在这里插入图片描述

读取数据:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Storage、正则表达式

1 LocalStorage 2 SessionStorage 3 正则表达式的使用 4 正则表达式常见规则 5 正则练习-歌词解析 6 正则练习-日期格式化 Storage-Storage的基本操作 // storage基本使用// 1.token的操作let token localStorage.getItem("token")if (!token) {console.log(&q…

Spring的创建和使用

目录 Spring的创建1.创建一个普通的Maven项目2.添加spring框架支持3.添加启动类 存储Bean对象1. 创建Bean2.将Bean注册到容器当中 获取并使用Bean对象1.得到Spring上下文2. 获取指定Bean对象3. 使用Bean对象 总结 Spring 是⼀个包含了众多⼯具⽅法的 IoC 容器。那么它就具备以下…

CloudCompare——M3C2计算两点云之间的鲁棒距离

目录 1.概述2、计算原理3、操作流程 本文由CSDN点云侠原创&#xff0c;原文链接。爬虫网站请自重。 M3C2 (plugin) 1.概述 CloudCompare中的Plugins -> M3C2 Distance 功能是用来计算两组点云间的鲁棒距离的特别方法。从CloudCompare-2.9版开始&#xff0c;M3C2插件还包括…

隐私计算大会亮点前瞻:《隐私计算应用研究报告(2023年)》发布预告

7月26日&#xff0c;2023隐私计算大会将于青岛正式扬帆&#xff0c;本次大会将齐聚业内专家大咖共论行业最新进展&#xff0c;洞察未来发展趋势&#xff0c;共同推进隐私计算行业蓬勃发展。 本次大会将公开正式发布《隐私计算应用研究报告&#xff08;2023&#xff09;》、“隐…

leetcode 9 回文数

class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int num x;int value 0;while(num > 0){value value * 10 num % 10;num num / 10;}return value x;} }

阿里云RockMQ与SpringBoot的整合

前言&#xff1a; 开源版本Rocket和商业版本的RocketMQ有些不同&#xff0c;研究的是商业版本的RocketMQ&#xff0c;阿里云的官方文档&#xff0c;感觉有点乱。看不咋明白&#xff0c;网上虽然有教程&#xff0c;大都还是有点缺少&#xff0c;有时候会突然跳了步骤&#xff0c…

Java 设计模式——观察者模式

目录 1.概述2.结构3.案例实现3.1.抽象观察者3.2.观察对象3.3.具体观察者3.4.具体观察对象3.5.测试 4.优缺点5.使用场景6.JDK 源码解析——Observable / Observer6.1.Observable 类6.2.Observer 接口6.3.案例 1.概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#…

数据结构与算法——顺序表(顺序存储结构)及初始化详解

顺序表&#xff0c;全名顺序存储结构&#xff0c;是线性表的一种。通过《什么是线性表》一节的学习我们知道&#xff0c;线性表用于存储逻辑关系为“一对一”的数据&#xff0c;顺序表自然也不例外。 不仅如此&#xff0c;顺序表对数据的物理存储结构也有要求。顺序表存储数据…

HIVE SQL实现通过两字段不分前后顺序去重

--数据建表 drop table if exists db.tb_name; create table if not exists db.tb_name ( suj1 string,suj2 string ) ;insert overwrite table db.tb_name values ("语文","数学") ,("语文","英语") ,("数学","语文&…

Linux 漏洞扫描

Linux 漏洞扫描程序会仔细检查基于 Linux 的系统&#xff0c;以减轻潜在的风险和漏洞。 什么是 Linux 漏洞扫描程序 Linux 漏洞扫描程序是一种专门的漏洞扫描工具&#xff0c;旨在识别基于 Linux 的系统中的安全漏洞和弱点,它会扫描配置错误、过时的软件版本和已知漏洞。 为…

何时使用Windbg静态分析?何时使用Windbg动态调试?

目录 1、概述 2、使用Windbg静态分析dump文件 2.1、异常捕获模块自动生成dump文件 2.2、从Windows任务管理器中导出dump文件 2.3、从正在动态调试的Windbg中使用命令导出dump文件 2.4、使用Windbg静态分析dump文件的一般步骤 3、使用Windbg动态调试目标进程 3.1、程序发…

OpenCV的HSV颜色空间在无人车中颜色识别的应用

RGB属于三基色空间&#xff0c;是大家最为熟悉的&#xff0c;看到的任何一种颜色都可以由三基色进行混合而成。然而一般对颜色空间的图像进行有效处理都是在HSV空间进行的&#xff0c;HSV(色调Hue,饱和度Saturation,亮度Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角…