[STM32F4] 操作FLASH的CR寄存器时影响其它部分的工作。

[复制链接]
1122|2
 楼主| yzzly 发表于 2016-11-12 12:49 | 显示全部楼层 |阅读模式
本帖最后由 yzzly 于 2016-11-12 17:13 编辑

本人F407系统,TIM4触发ADC转换,DMA2读取AD结果,一切正常;在解锁FLASH后,执行启动FLASH擦除指令
    FLASH->CR |= FLASH_CR_STRT;
后,DMA就不能中断了,百思不得其解!!!

void FlashSectorErase(Uint32 SectorNum)
{
        FLASH_EraseSector(SectorNum,VoltageRange_3);
}

void FlashPageWrite(Uint32 SectorNum,Uint32 *SourceBuf)
{
        Uint16 Cnt;
        FLASH_Unlock();
        FlashSectorErase((SectorNum-1)<<3);
        for(Cnt=0;Cnt<10;Cnt++)*(SourceBuf+Cnt)=0x55AA55AA;
        for(Cnt=0;Cnt<10;Cnt++)
        {
                FLASH_ProgramWord(FlashAddressTab[SectorNum-1]+Cnt*4,*(SourceBuf+Cnt));                                                                //×Ö±à³Ì
                if(*(Uint32 *)(FlashAddressTab[SectorNum-1]+Cnt*4) != *(SourceBuf+Cnt))                                                                //¶Á³ö±È½Ï
                {
                        break;
                }
        }
        FLASH_Lock();
}

void FlashPageRead(Uint32 SectorNum,Uint32 *DestBuf)
{
        Uint16 Cnt;
        Uint32 *SourceAddr=(Uint32 *)FlashAddressTab[SectorNum-1];                                                                                                                        //²éÉÈÇøµØÖ·±í
        for(Cnt=0;Cnt<10;Cnt++)
        {
                *(DestBuf+Cnt)=*(SourceAddr+Cnt);
        }
}


598330983 发表于 2016-11-12 21:28 | 显示全部楼层
擦除是不是影响了相关的寄存器?是不算你的DMA是操作的Flash
 楼主| yzzly 发表于 2016-11-14 14:05 | 显示全部楼层
原因找到了:由于在FLASH擦除期间不能读取FLASH,使DMA不能及时读取ADC数据而导致ADC发生溢出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1192

帖子

3

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