news 2026/5/14 15:29:17

写flash一运行至fmc_word_program就进HardFault_Handler

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
写flash一运行至fmc_word_program就进HardFault_Handler

我使用的是GD32E230芯片,在进行写flash时一致无法成功写入,先贴代码

uint8_t WriteToFlash(uint16_t SIZE_VAR, uint32_t *Data, uint32_t start_addr, uint32_t end_addr) { fmc_state_enum EarseStatus = FMC_READY; /* 擦除或写入的页数页数 */ uint32_t PageNum = (end_addr - start_addr) / FLASH_PAGE_SIZE; uint32_t EEAddress = start_addr; __disable_irq(); fmc_unlock(); /* 擦除FLASH */ GD_FlashErase(start_addr, PageNum); /* program flash */ while(EEAddress < (start_addr + SIZE_VAR)){ fmc_word_program(EEAddress, *Data); switch(EarseStatus) { case FMC_READY: { EEAddress = EEAddress + 4; Data ++; break; } case FMC_BUSY: { /* 重新写入 */ break; } case FMC_PGERR: case FMC_WPERR: case FMC_TOERR: default: break; } fmc_flag_clear(FMC_FLAG_END | FMC_FLAG_WPERR | FMC_FLAG_PGERR ); } /* lock the main FMC after the program operation */ fmc_lock(); __enable_irq(); return 1; }

调用是这样调用的

WriteToFlash(sizeof(UserData),(uint32_t *)&userData,FLASH_CONFIG_START_ADDR,FLASH_CONFIG_END_ADDR);

在调试时一运行至fmc_word_program(EEAddress, *Data);就进入了HardFault_Handler();

经过排查,

1,FLASH_CONFIG_START_ADDR的地址和FLASH_CONFIG_END_ADDR都在合法范围内;

2,在进行写flash操作时关闭了中断__disable_irq();

结果依然会进HardFault_Handler();又查到要写入的结构体必须四字节对齐,本来结构体是这样写的:

typedef struct { uint16_t default_flag; uint16_t random_data; }SFlashData; typedef struct { SFlashData flashdata; uint16_t Crc; }UserData;

然后改为:

typedef struct { uint16_t default_flag; uint16_t random_data; }SFlashData; typedef struct { SFlashData flashdata; uint16_t Crc; uint16_t reserve; }UserData;

以为这样就4字节对齐了,但是问题依然没有解决,后来查到这样只是2字节对齐不是4字节对齐,于是改为:

typedef struct { uint16_t default_flag; uint16_t random_data; }SFlashData; typedef struct { SFlashData flashdata; uint16_t Crc; uint16_t reserve; }__attribute__((aligned(4)))UserData;

这样就确保结构体是4字节对齐了,问题也终于解决了!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 15:27:37

全渠道批发订货商城小程序管理系统

新麦批发订货系统核心功能解析商城基础购物体系 完整小程序商城架构包含首页、商品分类、搜索、购物车、个人中心四大标准栏目。支持海量商品上架、多规格属性设置、猜你喜欢、新品推荐、销量排序、限时秒杀、满减优惠等电商常规功能。自带7天无理由退货、闪电退款、在线支付免…

作者头像 李华
网站建设 2026/5/14 15:26:25

深入解析STM32CubeMX FSMC配置:从8080并口LCD时序调试到实战避坑

1. FSMC与8080并口LCD的基础原理 FSMC&#xff08;Flexible Static Memory Controller&#xff09;是STM32系列芯片中用于扩展外部存储器的专用外设&#xff0c;它最大的特点就是灵活性高。我第一次用FSMC驱动LCD屏幕时&#xff0c;发现它不仅能接SRAM和NOR Flash&#xff0c;…

作者头像 李华
网站建设 2026/5/14 15:24:20

ChromaControl实战指南:实现多品牌RGB灯光统一控制的高效技巧

ChromaControl实战指南&#xff1a;实现多品牌RGB灯光统一控制的高效技巧 【免费下载链接】ChromaControl 3rd party device lighting support for Razer Synapse. 项目地址: https://gitcode.com/gh_mirrors/ch/ChromaControl ChromaControl是一款革命性的RGB设备控制软…

作者头像 李华
网站建设 2026/5/14 15:16:35

基于MCP协议的航天产业情报自动化服务器:架构、工具与应用

1. 项目概述&#xff1a;一个为AI助手赋能的航天产业情报MCP服务器如果你在航天、卫星通信或太空投资领域工作&#xff0c;那么对“信息过载”这个词一定深有体会。每天&#xff0c;你需要同时盯着NASA的近地天体预警、联邦公报上最新的FAA发射许可规则、国会山正在审议的航天法…

作者头像 李华