打印
[STM32F4]

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

[复制链接]
967|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发生溢出。

使用特权

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

本版积分规则

427

主题

1178

帖子

3

粉丝