内部Flash写2个字节当标志位,用先擦除和解保护吗?
我的程序void flash_burnflag(void){
uint16_t fromapp_flag = 0x0888;
uint32_t FROMAPP_ADDRESS = 0x8007FFE;
HAL_FLASH_Unlock();//解锁Flash
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FROMAPP_ADDRESS, fromapp_flag);
HAL_FLASH_Lock(); //锁住Flash
}1,上面的程序在一个全新工程,只放这个函数,成功,可以用st的下载程序读出指定内存位置为0x0888
2,但是放在我实际程序APP(实际环境是BOOT+APP)中,
实际程序APP里面有串口DMA接收中断,这个程序里除了flash_burnflag这个函数,没有flash相关操作了,
函数flash_burnflag不论在初始化位置还是串口接收中断里面执行,都不成功,为0000
请问这是为什么呢?
请问需要处理Write protection和erase吗?
高级会员了也有这个疑问? 每次写操作之前都要先擦除 目标地址写之前可以读出来判断一下,如果是全FF就不用擦除,可以直接写 擦除原理是所有位上置“1”,
写数据是把为“0”的位清0,不能把flash中为“0”的位值“1” 同意楼上大侠们的观点,补充一点,你的程序有"BOOT+APP",推测用了写保护。所以注意写保护不要覆盖到存贮地址。
页:
[1]