[技术问答] dataflash读写问题

[复制链接]
211|7
 楼主 | 2018-7-8 20:14 | 显示全部楼层 |阅读模式
程序中用到dataflash来记录几个按键值,当按键值发生变化时会写dataflash,写dataflash程序如下
void DATA_FLASH_Write(uint32_t u32addr,uint32_t u32data)
{
        DisableInterrupts();       
        SYS_UnlockReg();       
        FMC_ENABLE_ISP();

        FMC_Erase(u32addr);
        FMC_Write(u32addr,u32data);
       
        FMC_DISABLE_ISP();
       
        SYS_LockReg();               
        EnableInterrupts();               
}

问题是在程序中还有一个TImer0定时中断函数,里面有一个1ms的LED显示功能
现在出现当写dataflash时LED会闪一下,感觉像是由于dataflash写数据时间过长造成了显示的中断

不知道是不是这个原因
| 2018-7-8 22:41 | 显示全部楼层
你是在定时器中断进行的LED闪烁操作?而这个写操作优先级高,影响了那个LED。
| 2018-7-8 22:42 | 显示全部楼层
这也没啥啊,可以作为操作写的指示了。。哈哈
 楼主 | 2018-7-9 15:07 | 显示全部楼层
zhuomuniao110 发表于 2018-7-8 22:41
你是在定时器中断进行的LED闪烁操作?而这个写操作优先级高,影响了那个LED。 ...

是影响了LED的扫描,出现了显示的中断,就是解决不了这个bug
实测dataflash一页的擦除加上写一个数据需要20ms,那LED显示要中断20ms,肉眼可见的闪烁
不知道对于这个dataflash写还有没有别的妙招
| 2018-7-9 15:39 | 显示全部楼层
LED你用的扫描方式显示啊?这个如果你换成驱动芯片的就可以解决了。
| 2018-7-9 15:40 | 显示全部楼层
驱动芯片的,当年不操作它的时候,它可以保持原来的显示内容。而不会导致中断,如果用IO扫描显示,那么肯定会这样。
| 2018-7-12 14:48 | 显示全部楼层
能否设置个变量,这个变量标记什么时候LED从亮到灭,然后这个时候再执行dataflash读写。
 楼主 | 2018-7-13 09:27 | 显示全部楼层
zhuomuniao110 发表于 2018-7-12 14:48
能否设置个变量,这个变量标记什么时候LED从亮到灭,然后这个时候再执行dataflash读写。 ...

简单测了一下,擦除一页flash,写一个数据所需要的时间在20ms以上,中断被打断,LED闪是不可避免了
换了个方法,在闪的瞬间显示OK,表示数据记录成功,只能这么办了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

分享 快速回复 返回顶部 返回列表