汉阳做网站,万网账号跟网站有关系吗,wordpress 快速回复,椒江网站建设578做网站Stm32 HAL库 访问内部flash空间 代码的部分串口配置申明文件main函数 在一些时候#xff0c;需要存储一些数据#xff0c;但是又不想接外部的flash#xff0c;那我们可以知道#xff0c;其实还有内部的flash可以使用#xff0c; 需要注意的是内部flash#xff0c;读写次数… Stm32 HAL库 访问内部flash空间 代码的部分串口配置申明文件main函数 在一些时候需要存储一些数据但是又不想接外部的flash那我们可以知道其实还有内部的flash可以使用 需要注意的是内部flash读写次数有限所以需要控制擦写次数 首先使用cubmx生成代码 就是配置时钟和debug口还有串口信息 代码的部分
串口
/* USER CODE BEGIN PV */
#include stdio.h
int fputc(int ch,FILE *f)
{HAL_UART_Transmit (huart1 ,(uint8_t *)ch,1,HAL_MAX_DELAY );return ch;
}
/* USER CODE END PV */配置申明文件
这里配置了地址的申明文件和flash操作的结构体
需要注意的是每个芯片都有最大的flash空间以及代码空间所以建议在配置地址的时候尽量到地址空间的后面这样可以防止擦写到代码的空间。
/* USER CODE BEGIN 0 *///debug 查看对应地址是否正确如果显示的是问号则无此位置
//C6T6 32k 最大地址 0x08007FF0
//C8T6 64k 最大地址 0x0800FFE0
#define FLASH_SAVE_ADDR 0x08007000static FLASH_EraseInitTypeDef EraseInitStruct {.TypeErase FLASH_TYPEERASE_PAGES, //页擦除.PageAddress FLASH_SAVE_ADDR, //擦除地址.NbPages 1 //擦除页数
};
/* USER CODE END 0 */main函数
下面就是main函数的配置 流程就是 擦除-写入数据-读出数据
int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();while (1){HAL_FLASH_Unlock();uint32_t PageError 0;__disable_irq(); //擦除前关闭中断if (HAL_FLASHEx_Erase(EraseInitStruct,PageError) HAL_OK){printf(擦除 成功\r\n);}__enable_irq(); //擦除后打开中断uint32_t writeFlashData 0x55555555; //待写入的值uint32_t addr FLASH_SAVE_ADDR; //写入的地址HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,addr, writeFlashData);printf(at address:0x%x, read value:0x%x\r\n, addr, *(__IO uint32_t*)addr);HAL_FLASH_Lock();while(1);}/* USER CODE END 3 */
}