当前位置: 首页 > news >正文

小程序源码网免费/谷歌seo博客

小程序源码网免费,谷歌seo博客,百度网站内容,学做美食去哪个网站好在单片机编程中,读写内部Flash存储器是一种常见的方法来实现断电数据存储。这里以STM32系列单片机为例,展示如何通过HAL库进行简单的内部Flash读写操作。 以下是一个完整的示例代码,展示了如何擦除、写入和读取内部Flash中的数据。请注意&am…

在单片机编程中,读写内部Flash存储器是一种常见的方法来实现断电数据存储。这里以STM32系列单片机为例,展示如何通过HAL库进行简单的内部Flash读写操作。

以下是一个完整的示例代码,展示了如何擦除、写入和读取内部Flash中的数据。请注意,在实际应用中,你需要根据具体的单片机型号调整Flash地址范围和其他配置。

#include "main.h"
#include "stm32f4xx_hal_flash.h"#define DATA_ADDRESS 0x080E0000 // Flash起始地址,需要根据具体芯片型号调整void SystemClock_Config(void);
static void MX_GPIO_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();uint32_t dataToWrite = 0xDEADBEEF;uint32_t readData;// Unlock the Flash to enable the flash control register accessHAL_FLASH_Unlock();// Erase the user Flash areaFLASH_EraseInitTypeDef eraseInitStruct;uint32_t pageError = 0;eraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;eraseInitStruct.PageAddress = DATA_ADDRESS;eraseInitStruct.NbPages = 1; // 根据实际情况调整页数if (HAL_FLASHEx_Erase(&eraseInitStruct, &pageError) != HAL_OK){// Error occurred while page erase.while (1);}// Program the user Flash area word by wordif (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, DATA_ADDRESS, dataToWrite) == HAL_OK){// Check the written valuereadData = *(__IO uint32_t*)DATA_ADDRESS;if (readData != dataToWrite){// Verify errorwhile (1);}}else{// Error occurred while writing data in Flash memory.while (1);}// Lock the Flash to disable the flash control register accessHAL_FLASH_Lock();// Infinite loopwhile (1){}
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Configure the main internal regulator output voltage*/__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 8;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 7;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){// Initialization Errorwhile (1);}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){// Initialization Errorwhile (1);}
}/*** @brief GPIO Initialization Function* @param None* @retval None*/
static void MX_GPIO_Init(void)
{/* GPIO Ports Clock Enable */__HAL_RCC_GPIOH_CLK_ENABLE();
}

说明:

  1. 解锁Flash:在写入或擦除Flash之前,必须先解锁Flash控制寄存器。
  2. 擦除Flash:使用HAL_FLASHEx_Erase函数擦除指定的Flash区域。注意,擦除操作是以页为单位进行的。
  3. 写入Flash:使用HAL_FLASH_Program函数将数据写入Flash。
  4. 锁定Flash:完成操作后,重新锁定Flash以防止意外修改。

请确保在实际项目中正确处理错误情况,并根据具体的应用场景调整代码。

相关文章:

单片机读写内部flash实现断电数据存储

在单片机编程中,读写内部Flash存储器是一种常见的方法来实现断电数据存储。这里以STM32系列单片机为例,展示如何通过HAL库进行简单的内部Flash读写操作。 以下是一个完整的示例代码,展示了如何擦除、写入和读取内部Flash中的数据。请注意&am…...

注意力机制介绍

注意力机制介绍 1.注意力机制由来,以及解决什么问题2.什么是注意力机制3.注意力机制分类及如何实现3.1 Soft Attention(常见):软注意3.1.1普通Encoder-Decoder框架3.1.2加入Attention的Encoder-Decoder框架3.1.3如何理解注意力概率分布3.1.4 Attention机制本质思想 3.2 Hard At…...

爬虫运行后数据如何存储?

爬虫运行后获取的数据可以存储在多种不同的存储系统中,具体选择取决于数据的规模、查询需求以及应用场景。以下是一些常见的数据存储方法: 1. 文件系统 对于小型项目或临时数据存储,可以直接将数据保存到本地文件中。常见的文件格式包括&…...

C# 自动自定义截图的内容

C# 自动自定义截图的内容 using System; using System.Drawing; using System.Runtime.InteropServices; class Program {[DllImport("user32.dll")]public static extern IntPtr GetDesktopWindow();[DllImport("user32.dll")]public static extern IntP…...

Java的Stream流:文件处理、排序与串并行流的全面指南

Java的Stream流:文件处理、排序与串并行流的全面指南 Java 8 引入了 Stream API,这是一个用于处理集合数据的强大工具,它提供了一种声明式的方式来进行聚合操作。Stream 不是一个数据结构,而是一种对数据进行操作的抽象&#xff…...

[Maven]下载安装、使用与简介

很多框架的下载使用的流程和思路是差不多的,这里以maven做详细介绍。 下载安装与配置变量 下载 首先,我们要使用maven,必须先下载它的相关文件。想要下载,我们可以直接搜索maven。找到它的官网。这里不绕弯子,直接给出…...

056 WXML+ WXSS+PHP+LW+校园配送商城微信小程序开发与设计 源码 文档 全套资料

校园配送微信小程序 1.项目描述2. 1.绪论3.项目技术与功能4.界面展示5.源码获取 1.项目描述 摘 要 近几年来,随着互联网和电子商务的快速发展和普及,改变了人们日常消费模式。尤其是移动互联网的相结合,使得人们日常生活中更多的是通过手机移…...

Python 在同一/或不同PPT文档之间复制幻灯片

复制幻灯片可以帮助我们更高效地完成工作,节省大量的制作时间。通过复制现有的幻灯片,可以快速创建新的演示文稿,而无需重新设计板式样式等。此外,复制幻灯片还可以帮助我们保持内容的一致性,使整个PPT演示文稿看起来更…...

C#生成CSR(CertificateSigningRequest)和密钥

使用C#原生生成CSR(CertificateSigningRequest)和密钥。 生成的私钥妥善保存,丢失无法找回。 调用 var contents X509Helper.SigningRequestHelper.CreateSigningRequest("yourdomain.com", ["*.yourdomain.com"], X509Helper.AsymmetricAl…...

Docker 安装 Oracle创建表空间并导入数据库

一、Docker 安装Oracle 1、检查docker 版本 2、docker 下载镜像 3、 docker启动容器 4、 进入容器内部 5、安装成功,使用客户端工具连接 二、创建数据库用户与表空间 1、查询数据库文件位置 2、创建表空间 3、创建用户 4、设置权限 三、导出数据库DMP …...

elementui table子级tree懒加载bug

1. 删除子级刷新列表子级依然显示 2.更新状态子级列表未刷新 3.编辑子级后刷新页面显示状态未变更 el-table 树表格load源码 首先,load可以执行,但是只剩一个子节点就有问题,那么就直接可以定位bug在load方法里: 文件路径&am…...

AI与低代码技术融合:如何加速企业智能化应用开发?

引言 随着全球数字化转型的步伐加快,企业在智能化应用开发方面面临着前所未有的挑战和机遇。传统的软件开发方式往往需要大量的技术人员、时间和资源,而在瞬息万变的市场环境中,这种模式显得效率低下且难以满足企业快速迭代和创新的需求。 与…...

【C#】新建窗体文件,Form、UserControl

从用途、功能性和架构方面进行描述。 1. 继承自 Form 的窗体(通常是窗口): 在 C# 中,Form 是用于创建应用程序的主窗口或对话框窗口的类。当您继承自 Form 时,您创建的是一个完整的窗口,可以显示内容、与…...

ansible学习笔记之02command模块与shell模块

目录 1、概述 2、模块介绍 2.1 command模块 2.2 shell模块 2.3 小结 3、实验 3.1 测试ls命令 3.2 测试环境变量 3.3 测试操作符">" 1、概述 本文介绍ansible的command模块与shell模块,并通过实验比对两个模块的异同。 2、模块介绍 2.1…...

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…...

C++(十二)

前言: 本文将进一步讲解C中,条件判断语句以及它是如何运行的以及内部逻辑。 一,if-else,if-else语句。 在if语句中,只能判断两个条件的变量,若想实现判断两个以上条件的变体,就需要使用if-else,if-else语…...

【数学建模】线性规划问题及Matlab求解

问题一 题目: 求解下列线性规划问题 解答: 先将题目中求最大值转化为求最小值,则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为: 等式…...

【JavaWeb后端学习笔记】Spring全局异常处理器

在程序运行时,不可避免的会出现异常。在三层开发架构中,当Mapper层出现异常、如果不进行处理会抛给Service层,如果Service层也不处理则会抛给Controller层,通常Controller层有许多接口,如果对每个接口单独处理异常&…...

PT8M2102 触控型 8Bit MCU

1 产品概述 ● PT8M2102 是一款基于 RISC 内核的8位 MTP 单片机,内部集成了电容式触摸感应模块、TIMER,PWM、LVR、LVD、WDT等外设,其主要用作触摸按键开关,广泛适用于触控调光、电子玩具、消费电子、家用电器等领域,具…...

4. React 性能优化技巧:如何让你的应用更快

在构建大型应用时,性能优化是一个非常重要的话题。React 提供了许多优化工具,帮助我们提高应用的渲染速度和响应能力。本文将分享一些常见的 React 性能优化技巧。 4.1. 使用 React.memo 缓存组件 当组件的 props 没有变化时,React 默认不会…...

pytest中使用conftest做测试前置和参数化

pytest中比较高阶的应用是,使用conftest去做测试前置工作、测试收尾工作和参数化。conftest是pytest的一个组件,用于配置测试环境和参数。通过conftest, 可以创建一个可复用的测试配置文件,以便在多个测试模块之间共享配置信息。即&#xff0…...

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…...

MATLAB 建筑顶面面积计算(95)

MATLAB 建筑顶面面积计算(95) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 根据给出的建筑顶面点云,计算建筑面积,具体的方法实现和结果如下: 二、算法实现 1.代码 代码如下(示例): % 从 PLY 文件读取点云数据 filename = D:\shuju\屋顶2.ply; % 替换为你的…...

Linux网络编程之---组播和广播

一.组播 1.概述 单播地址标识单个IP 接口,广播地址标识某个子网的所有IP 接口, 多播地址标识一组IP 接口。单播和广播是寻址方案的两个极端(要么单个要么全部), 多播则意在两者之间提供一种折中方案。多播数据报只应该由对它感兴趣的接口接收…...

Apache Dolphinscheduler可视化 DAG 工作流任务调度系统

Apache Dolphinscheduler 关于 一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。 DolphinScheduler 的主要特性如下: 易于部署,提供四种部署方式&am…...

docker 部署共享文档ZFile

1、拉取ZFile镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/tirling-pdf/zfile:latest 2、创建文件夹和进入文件夹 mkdir zfile && cd zfile 3、创建docker-compose.yml配置文件。 vim docker-compose.yml version: 3.3 service…...

面试题之JVM

一、Java虚拟机基本概念 题目1:Java虚拟机(JVM)是什么? 选项: A. 一种编程语言 B. 一个可以执行Java字节码的虚拟机进程 C. 一个操作系统 D. 一个数据库 参考答案:B 解析:Java虚拟机是一个可…...

二叉树的深搜(不定期更新。。。。。)

二叉树的深搜 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉…...

WebLLM Chat:无服务器、私密的AI聊天体验

简介 什么是 Web-LLM ? Web-LLM 是一个高性能的浏览器内语言模型推理引擎,允许用户在没有服务器支持的情况下直接在网页浏览器中进行语言模型推理。它利用 WebGPU 进行硬件加速,从而实现强大的 LLM 操作。Web-LLM 完全兼容 OpenAI API,支持…...

C#中的模拟服务器与客户端建立连接

创建一个控制台项目,命名为Server,模拟服务器端。在同一个解决方案下,添加新项目,命名为Client,模拟客户端。在服务器端与客户端之间建立TCP连接,并在客户端发送消息,在服务器端输出。 Server项…...