本帖最后由 zkf159 于 2014-7-29 14:06 编辑
我的芯片型号是stm32f429zgt6 是1m flash。英文版stm32f4参考手册上讲只要把OPTCR寄存器中的DB1M置1就可以实现双bank flash,OPTCR寄存器的解释是The FLASH_OPTCR register is used to modify the user option bytes.
中文手册上的具体操作步骤是:
修改 STM32F405xx/07xx 和 STM32F415xx/17xx 上的用户选项字节
要修改用户选项值,请顺序执行以下步骤: - 检查 FLASH_SR 寄存器中的 BSY 位,以确认当前未执行任何 Flash 操作
- 在 FLASH_OPTCR 寄存器中写入所需的选项值
- 将 FLASH_OPTCR 寄存器中的选项启动位 (OPTSTRT) 置 1。
- 等待 BSY 位清零。
我写的函数
void FLASH_OB_DBFConfig()
{
FLASH_Status status = FLASH_COMPLETE;
u32 optcr_t = FLASH->OPTCR;
u32 optcr1_t = FLASH->OPTCR1;
optcr_t |= 0x40000000;
//optcr_t &= ~0x08000000;
FLASH_OB_Unlock();
status = FLASH_WaitForLastOperation();
if(status == FLASH_COMPLETE)
{
FLASH->OPTCR = optcr_t;
FLASH->OPTCR1 = optcr1_t;
FLASH_OB_Launch();
}
FLASH_OB_Lock();
}
貌似没效果,而且复位后这一位又变0了。
我想问的是
1.修改OPTCR是不是就相当于修改了option byte区的对应位?我用了上面这个函数后OPTCR是修改了,但是option byte区的对应位没变,而且OPTCR复位后又会变为原来的样子
2.英文版stm32f4参考手册上的OPTCR寄存器中是有DB1M位的,而且也有介绍怎么使用双bank flash,但是在keil4.72a中查看对应寄存器中却没DB1M位,而且最新出的中文版参考手册上对于双bank flash只字未提,是不是目前还不支持?
3.如果使用双bank flash的话,是不是程序下载到bank1,那么就算擦除bank2正在进行中,用户程序照样能进中断? |