[六月摸鱼计划〕 flash与18b20
  QtpjMRSUUfXb 2023年11月02日 69 0

[六月摸鱼计划〕 flash与18b20

[六月摸鱼计划〕 flash与18b20_数据

上位机传输的数据,储存到指定的flash地址里面去,数据用数组的形式保存


需要的信息是关于如何将上位机传输的数据存储到指定的flash地址中并且使用数组来保存。以下是一些参考:1. 确定您使用的flash芯片的规格和地址范围。一些普遍使用的flash芯片包括SPI flash、QSPI flash、NOR flash等。


2. 选取一种适合您的芯片的编程方式。芯片供应商通常会提供特定的编程方式,比如SPI接口或者JTAG接口。


3. 确定您希望存储的数据的格式和存储方式。您可以选择将数据存储为二进制格式或者字符串格式。数组是一种很好的数据结构来保存数据,因为它可以让你根据下标来快速访问数据,这可以帮助您更快的读写数据。


4. 编写代码来进行flash编程。您可以使用C或C++等编程语言,不同的芯片有不同的编程API和库函数可以使用。一般来说,您需要使用编程API将您的数据写入到flash中的指定地址。之后,您就可以使用读取API来读取保存在flash中的数据。


综上所述,你可以通过芯片厂商提供的API或库函数来编写代码进行flash编程。具体步骤包括确定您使用的flash芯片的规格和地址范围,选取适合的编程方式,确定数据格式和存储方式,最后使用编程API将数据写入到flash的指定地址中。


上位机传输的数据,储存到指定的flash地址里面去,数据用数组的形式保存,可以写一段简单的代码实例吗?


当涉及到要将数据储存在Flash中时,我们需要考虑到编程器支持的启动函数和其他函数,因为不同的编程器可能有不同的函数提供方式。在此,我提供一份基于STM32 HAL库和CubeMX配置开发环境的示例代码,您需要将其用于您的具体硬件平台上。首先,需要确保芯片的Flash区域已经设置成了可写入状态。在这个例子中,我们假设已经设置Flash页 8 (地址为0x08080000)。


```c

#include "stm32f4xx_hal.h"


#define FLASH_USER_START_ADDR   (uint32_t)0x08080000

#define FLASH_USER_END_ADDR     (uint32_t)0x08080FFF


uint32_t FlashWriteData(uint32_t *pData, uint32_t LenInWords)

{

  uint32_t i;

  FLASH_EraseInitTypeDef EraseInitStruct;

  uint32_t PageError = 0;

  HAL_FLASH_Unlock();

  EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;

  EraseInitStruct.PageAddress = FLASH_USER_START_ADDR;

  EraseInitStruct.NbPages     = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR) / FLASH_PAGE_SIZE;

  if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)

  {

    HAL_FLASH_Lock();

    return HAL_ERROR;

  }

  for (i = 0; i < LenInWords; i++)

  {

    if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, FLASH_USER_START_ADDR + i * 4, *(pData + i)) != HAL_OK)

    {

      HAL_FLASH_Lock();

      return HAL_ERROR;

    }

  }

  HAL_FLASH_Lock();

  return HAL_OK;

}

```


这段代码定义了一个函数`FlashWriteData`,它需要传入数据指针和数据长度。函数首先锁定Flash并擦除页,然后按字编程所提供的数组数据,最后再次锁定Flash。


为了使用该功能,你需要将数据传输到MCU并调用该函数:


```c

uint8_t data[64] = { 0x01, 0x02, 0x03, 0x04, ... }; // 数据数组

uint32_t len_words = sizeof(data) / sizeof(uint32_t); // 以整字作为单位的数据长度

FlashWriteData((uint32_t*)data, len_words); // 数据写入

```


请注意,这个示例假设数据已经被正确转换为一个32位无符号整数数组,并且传输到MCU的数组长度必须是4字节的倍数,由于Flash编程和擦除需要在特定的页中进行,所以需要确定写入数据的Flash地址。


此代码仅供参考。请按照您的特定需求进行修改,并根据您的硬件平台上具体实现。


  

DS18B20是一种数字温度传感器芯片,由Maxim Integrated公司生产。它使用1线数字接口进行通信,能够在-55℃至+125℃的范围内测量温度,并提供±0.5℃的精度。DS18B20还能通过ROM存储器进行编号,并可通过多项软件可编程功能实现不同的温度报警阈值和温度转换分辨率。这使得DS18B20成为许多电子设备和计算机系统中常用的温度监测器和控制器。





【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
QtpjMRSUUfXb