打印
[STM32F1]

STM32F103VE

[复制链接]
792|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icefox225|  楼主 | 2015-4-20 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 icefox225 于 2015-4-20 16:20 编辑

最近在测试STM32F103的FLASH读写,发现一个问题
for(i = 0; i < i_Page; i++)
{
       FLASH_ErasePage(m_u32FlashCheckAddr + 0x400 * i);
       General_Wait_ms(10);
}m_u32FlashCheckAddr  = 0x08040000
就是执行前面这个for循环的时候仿真器老会自己停在status = FLASH_WaitForLastOperation(EraseTimeout);这句话,我这里没设置断点啊,我继续点F5可以继续跑,功能也是能实现的。
这里的i_Page的值是45。
FLASH_Status FLASH_WaitForLastOperation(uint32_t Timeout)
{
    FLASH_Status status = FLASH_COMPLETE;

    /* Check for the Flash Status */
    status = FLASH_GetStatus();
    /* Wait for a Flash operation to complete or a TIMEOUT to occur */
    do
    {
        delay();
        IWDG_ReloadCounter();
        status = FLASH_GetStatus();
        Timeout--;
    }while((status == FLASH_BUSY) && (Timeout != 0x00));
    if(Timeout == 0x00 )
    {
        status = FLASH_TIMEOUT;
    }
    /* Return the operation status */
    return status;
}
以上是这段代码,偶尔有几次就直接进入HardFault_Handler(),然后看门狗溢出重启了。
FLASH_ErasePage这个函数的内容没有改过。
群里有高手碰到过类似的问题吗?不知道跟STM32的FLASH是否有关。
沙发
icefox225|  楼主 | 2015-4-20 16:26 | 只看该作者
没人碰到过这个问题吗

使用特权

评论回复
板凳
hbyu| | 2015-4-20 16:35 | 只看该作者

使用特权

评论回复
地板
mmuuss586| | 2015-4-20 18:53 | 只看该作者
读写FLASH的时候,最好把串口关掉;

使用特权

评论回复
5
firstblood| | 2015-4-20 20:16 | 只看该作者
flash的读写还是很不错的应用。

使用特权

评论回复
6
zh113214| | 2015-4-20 22:47 | 只看该作者
测试STM32F103的FLASH读写,没啥印象额。。

使用特权

评论回复
7
ZYYlz| | 2015-4-21 09:56 | 只看该作者
SectorErase扇区擦除问题

使用特权

评论回复
8
wowow| | 2015-4-21 10:18 | 只看该作者
写Flash前关掉所有中断试试。另外看看你读写缓冲区是在哪开的,小心STACK溢出。

使用特权

评论回复
9
icefox225|  楼主 | 2015-4-21 10:47 | 只看该作者
**作FLASH时把中断都关了,堆栈我设置很大了,
Stack_Size      EQU     0x00001400
AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp
                                          
__initial_spTop EQU    0x20001400                 ; stack used for SystemInit_ExtMemCtl
                                                  ; always internal RAM used
                                                  
; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000C00
读写缓冲区我就是直接地址操作的
m_u32FlashAddr = 0x08040000
status = FLASH_ProgramWord(m_u32FlashAddr, *(uint32*)((uint32)(m_TempBuf + i)));
写完后再把数据读出来跟m_TempBuf比较。

使用特权

评论回复
10
icefox225|  楼主 | 2015-4-21 11:10 | 只看该作者
曾经碰到更奇怪的是ProgramWord这个函数有时候写不进数据,但是status却是完成的。因为我用memory看的时候某个地址段出现了连续好多个FF。说明数据没有写进去。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

351

帖子

1

粉丝