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

news2024/12/29 0:11:19

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();				 //获取设备ID
    if(device_id == sFLASH_ID)
    {
        printf("\r\n检测到SPI FLASH W25Q128 !设备号为:0x%X \r\n",device_id);
        SPI_Flash_Erase(FLASH_SectorErass);						//扇区擦除,FLASH_SectorErass为宏定义,值为0x00
        SPI_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();						 //获取FlashID
    printf("\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));           //读取整数数据,写入时首地址为512
            printf("\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页写入,即起始地址为0x00
            for( 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));		//写入地址为256
            SPI_FLASH_BufferWrite((void*)intBuffer, SPI_FLASH_PageSize*2, sizeof(intBuffer));		    //写入地址为512
            printf("向芯片写入数据:");
            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.coloradmin.cn/o/771010.html

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

相关文章

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S 软链接和硬链接

r(Read&#xff0c;读取)&#xff1a;对文件而言&#xff0c;具有读取文件内容的权限&#xff1b;对目录来说&#xff0c;具有浏览目 录的权限。 w(Write,写入)&#xff1a;对文件而言&#xff0c;具有新增、修改文件内容的权限&#xff1b;对目录来说&#xff0c;具有删除、移…

Burp Suite---渗透测试工具

文章目录 Burp SuiteBurp Suite入门设置代理HTTP的代理 Proxy&#xff08;代理&#xff09; Burp Suite 是一款集成化的渗透测试工具&#xff0c;包含了很多功能&#xff0c;可以帮助我们高效地完成对Web应用程序的渗透测试和攻击。 Burp Suite由Java语言编写&#xff0c;基于…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

PuTTY下载(免安装exe)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

手写数字识别Minst(CNN)

文章目录 手写数字识别网络结构加载数据集数据集可视化CNN网络结构训练模型保存模型和加载模型测试模型 手写数字识别 网络结构 网上给出的基本网络结构&#xff1a; 然而在本数据集中&#xff0c;输入图不是1*32*32&#xff0c;是1*28*28。所以正确的网络结构应该是 level…

实现关注公众号以后自动推送小程序

准备好小程序的APPID和跳转路径 然后一行代码搞定&#xff1a; <a data-miniprogram-appid"小程序APPID" data-miniprogram-path"跳转路径">点我跳转到小程序</a>

Shuffle简单理解

map的结果本身是无序的&#xff0c;但是map输出的结果有序 mapper和reduce是不同的机器&#xff0c;进行了网络传输&#xff0c;所以存在数据拷贝 第二次排序&#xff0c;是将每个reduce对应的task进行排序&#xff0c;然后再进入reduce maptask运行结束&#xff0c;每个mask块…

被字节拷打了~基础还是太重要了...

今天分享一篇一位同学去字节面试的实习面经&#xff0c;技术栈是java&#xff0c;投了go后端岗位&#xff0c;主要拷打了 redismysql网络系统java算法&#xff0c;面试问题主要集中在 mysql、redis、网络这三部门&#xff0c;因为面试官是搞 go 的&#xff0c;java 只是随便问了…

55 # 实现可写流

先在 LinkedList.js 给链表添加一个移除方法 class Node {constructor(element, next) {this.element element;this.next next;} }class LinkedList {constructor() {this.head null; // 链表的头this.size 0; // 链表长度}// 可以直接在尾部添加内容&#xff0c;或者根据…

数据库小白看这里,这个Oracle数据库知识图谱你值得拥有

2022年前后&#xff0c;墨天轮社区曾陆续推出PostgreSQL知识图谱、MySQL知识图谱&#xff0c;并得到了大家的广泛好评。此后&#xff0c;便有众多朋友对Oracle知识图谱发起不断“催更“。经过近期的内容搜集整合、专家复审与打磨&#xff0c;墨天轮社区正式推出Oracle知识图谱&…

MySQL五种约束类型(普通 /自增主键,外键等) + 进阶查询(聚合查询,内 /外连接查询,自连接查询,子查询,合并查询)

文章目录 前言一、五种约束NOT NULL 约束UNIQUE 约束DEFAULT 约束PRIMARY KEY 主键约束(重点)普通主键自增主键 FOREIGN KEY 外键约束(重点) 二、进阶查询聚合查询聚合函数GROUP BY子句HAVING 联合查询笛卡尔积内连接外连接自连接子查询单行子查询&#xff1a;返回一行记录的子…

AI时代图像安全“黑科技”如何助力人工智能与科技发展?

〇、前言 7月7日下午&#xff0c;2023世界人工智能大会&#xff08;WAIC&#xff09;“聚焦大模型时代AIGC新浪潮—可信AI”论坛在上海世博中心红厅举行。人工智能等技术前沿领域的著名专家与学者、投资人和领军创业者汇聚一堂&#xff0c;共同探索中国科技创新的驱动力量。 在…

搭载下一代人工智能技术,微软推出Power Automate流程挖掘产品

在近日的Microsoft Inspire大会中&#xff0c;微软揭晓了他们即将推出的Power Automate流程挖掘产品&#xff0c;并计划在8月1日正式对外开放。 试用地址&#xff1a;https://powerautomate.microsoft.com/zh-cn/#home-signup 这款产品搭载了下一代人工智能技术&#xff0c;有…

好用的思维导图软件有哪些?这几款简单好用

好用的思维导图软件有哪些&#xff1f;思维导图是一种非常有用的思维工具&#xff0c;可以帮助我们组织和理清复杂的信息。在如今的数字时代&#xff0c;有很多软件可以帮助我们创建和编辑思维导图。下面介绍几款简单好用的思维导图软件。 第一款&#xff1a;迅捷画图 这是一款…

多个信贷范围时客户主数据界面的定制(套头和信用缴纳范围=信贷范围)

客户主数据-销售范围-开票的界面有信贷范围&#xff0c;叫贷方控制范围。 但是默认是看不到的。需要进行配置。 但是SAP的配置里面的名字很奇怪&#xff0c;在客户账户组里面的销售数据中(OVT0)定制 双击后处理的这个界面&#xff0c;和界面的“”开票凭证“”对不上&#x…

云原生微服务应用的平台工程实践

作者&#xff1a;纳海 01 微服务应用云原生化 微服务是一个广泛使用的应用架构&#xff0c;而如何使得微服务应用云原生化却是近些年一直在演进的课题。国内外云厂商对云原生概念的诠释大同小异&#xff0c;基本都会遵循 CNCF 基金会的定义&#xff1a; 云原生技术有利于各组…

Linux内核源代码的目录结构包括部分:

内核核心代码&#xff1a;这部分代码包括内核的各个子系统和模块&#xff0c;如进程管理、内存管理、文件系统、网络协议栈等。这些代码构成了Linux内核的核心功能。 非核心代码&#xff1a;除了核心代码之外&#xff0c;还包括一些非核心的代码和文件&#xff0c;如库文件、固…

【网站搭建】1安装Hexo

1.前期准备工作 安装node.js和git Node.js (nodejs.org) Git - Downloads (git-scm.com) 安装好后验证是否完成安装 2.打开Git安装配置Hexo 由于国内的镜像源速度较慢&#xff0c;所以我们利用 npm 来安装 cnpm &#xff0c;在命令行中输入npm install -g cnpm --registry…

一文详解 requests 库中 json 参数和 data 参数的用法

在requests库当中&#xff0c;requests请求方法&#xff0c;当发送post/put/delete等带有请求体的请求时&#xff0c;有json和data2个参数可选。 众所周知&#xff0c;http请求的请求体格式主要有以下4种&#xff1a; application/jsonapplicaiton/x-www-from-urlencodedmult…

291. 单词规律 II(plus题)

给你一种规律 pattern 和一个字符串 s&#xff0c;请你判断 s 是否和 pattern 的规律相匹配。 如果存在单个字符到 非空 字符串的 双射映射 &#xff0c;那么字符串 s 匹配 pattern &#xff0c;即&#xff1a;如果 pattern 中的每个字符都被它映射到的字符串替换&#xff0c;那…