[STM32F4] 调用标准库读写片内flash时,死机,求解

[复制链接]
6473|35
 楼主| 地瓜patch 发表于 2018-7-3 16:18 | 显示全部楼层
yyy71cj 发表于 2018-7-3 15:53
贫电工掐指一算,觉得你可以关闭一切中断,然后调试,发结果来看…… ...

在我自定义的writeflash()函数中已经关闭总中断_disable irq();
yediezeus 发表于 2018-7-3 16:22 | 显示全部楼层
 楼主| 地瓜patch 发表于 2018-7-3 18:01 来自手机 | 显示全部楼层
擦除的地址是flash的最后一个sector
 楼主| 地瓜patch 发表于 2018-7-3 18:02 来自手机 | 显示全部楼层
已经把flash的相关函数都放到RAM里跑了
airwill 发表于 2018-7-3 18:57 | 显示全部楼层
注意,  要把相关的函数都转到 SRAM 里.
我之前做的 bootload 程序, 就是这样处理的
 楼主| 地瓜patch 发表于 2018-7-3 22:12 | 显示全部楼层
airwill 发表于 2018-7-3 18:57
注意,  要把相关的函数都转到 SRAM 里.
我之前做的 bootload 程序, 就是这样处理的 ...

我也是全放进去的,包括标准库里的flash相关函数
airwill 发表于 2018-7-4 07:12 | 显示全部楼层
那就借助仿真器,  用汇编指令跟踪方式, 看看停在哪一条指令上了
捉虫天师 发表于 2018-7-4 23:30 | 显示全部楼层
换个芯片试试,会不会这个芯片锁死了。
 楼主| 地瓜patch 发表于 2018-7-5 13:46 | 显示全部楼层
捉虫天师 发表于 2018-7-4 23:30
换个芯片试试,会不会这个芯片锁死了。

现在将库函数FLASH_Status FLASH_EraseSector()中的 FLASH->CR |= FLASH_CR_STRT;注释掉了。写flash能够成功。
 楼主| 地瓜patch 发表于 2018-7-5 13:46 | 显示全部楼层
捉虫天师 发表于 2018-7-4 23:30
换个芯片试试,会不会这个芯片锁死了。

现在将库函数FLASH_Status FLASH_EraseSector()中的 FLASH->CR |= FLASH_CR_STRT;注释掉了。写flash能够成功。
zhuotuzi 发表于 2018-7-5 23:30 | 显示全部楼层
666,不知道那句是为何干扰了程序啊?
zhuotuzi 发表于 2018-7-5 23:30 | 显示全部楼层
666,不知道那句是为何干扰了程序啊?
香水城 发表于 2018-7-10 10:55 | 显示全部楼层
本帖最后由 香水城 于 2018-7-10 10:58 编辑

执行flash扇区擦除操作时不再执行flash指令,只是貌似死机了吧。
你可以多等一会看看【当然你擦除的扇区不要对其它代码造成影响】,
或者把那些不能受耽搁的代码放到RAM.

另外,擦除时供电要符合擦除参数且稳定。
 楼主| 地瓜patch 发表于 2018-7-13 09:18 | 显示全部楼层
香水城 发表于 2018-7-10 10:55
执行flash扇区擦除操作时不再执行flash指令,只是貌似死机了吧。
你可以多等一会看看【当然你擦除的扇区不 ...

把写flash的部分函数放到ram里,断电后再次上电,ram里的函数会怎样?还会存在么?
 楼主| 地瓜patch 发表于 2018-7-17 09:24 | 显示全部楼层
经测试,在程序中同时使用U2和U3的DMA功能。同时使能两者的RENX和IDLE中断。在U3的中断程序中未编写针对RENX的中断处理。仿真时发现程序多数停在U3的中断中。编写对应中断的代码或者禁用该中断,问题解决。
只从现象来看解决我所遇到的问题。因为是stm32的新手,期待高手能进行进一步解释。
另外,对flash的操作可以不在ram中进行,目前未发现问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部