首先,需要在代码中引入HAL库和flash.h头文件。然后在main函数中初始化串口和flash,如下所示:

#include "stm32f1xx_hal.h"
#include "flash.h"

UART_HandleTypeDef huart1;

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();
  
  SystemClock_Config();

  // 初始化串口
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 9600;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
  
  // 初始化flash
  HAL_FLASH_Unlock();
  FLASH_Erase_Sector(FLASH_SECTOR_11, FLASH_VOLTAGE_RANGE_3);
  HAL_FLASH_Lock();
  
  while (1)
  {
    // 读取串口数据
    uint8_t data[10] = {0};
    HAL_UART_Receive(&huart1, data, 10, 1000);
    
    // 将变量写入flash
    uint32_t address = 0x080E0000;
    uint32_t data_to_write = 0;
    if (data[0] == 's' && data[1] == 'e' && data[2] == 't')
    {
      // 命令格式:set x
      data_to_write = data[4] - '0';
      HAL_FLASH_Unlock();
      HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data_to_write);
      HAL_FLASH_Lock();
    }
  }
}

在上述代码中,我们使用了HAL_UART_Receive函数从串口读取数据,读取的数据存储在data数组中。然后,我们根据输入的命令格式“set x”,将x的值写入flash中。

需要注意的是,STM32F103的flash是有写入次数限制的,因此需要谨慎使用。在实际应用中,建议使用EEPROM或者外部存储器来存储数据


原文地址: https://www.cveoy.top/t/topic/feLM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录