stm32f103HAL库实现串口接收到命令将变量x写入flash
首先,需要在代码中引入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 著作权归作者所有。请勿转载和采集!