也就是STM32选项字中,可以被用户使用的两个字节:
位于:0x1FFFF804,0x1FFFF806.这个理论上用STM32的库函数FLASH_ProgramOptionByteData是可以写入的.但我试了,写入后,无论是读FLASH->OBR,还是直接从地址读,都读不出我之前写入的字~
ProgramOptionByteData函数我看了内容,已经包含了FLASH的解锁了,为什么还是写不入呢?奇怪啊奇怪~
这两个选项字,我是打算用来做软加密用的,密文就放这两个选项字里了.比放FLASH里要安全,因为如果选项字中设置了读保护(也就是加密了),那么要在保存当前FLASH内容下,改变这两个用户选项字,基本是不可能的了~因为选项字是一同刷除的,而读保护被刷,FLASH也就被刷了~
咋都成水贴了~难道还真是没人用过这两个选项字?不用白不用哇~
从库函数的源码中,没有看到有解锁的操作呀?你看的是哪个版本,是不是看错了?
-
- FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)
- {
- FLASH_Status status = FLASH_COMPLETE;
- /* Check the parameters */
- assert_param(IS_OB_DATA_ADDRESS(Address));
- status = FLASH_WaitForLastOperation(ProgramTimeout);
- if(status == FLASH_COMPLETE)
- {
- /* Authorize the small information block programming */
- FLASH->OPTKEYR = FLASH_KEY1;
- FLASH->OPTKEYR = FLASH_KEY2;
- /* Enables the Option Bytes Programming operation */
- FLASH->CR |= CR_OPTPG_Set;
- *(__IO uint16_t*)Address = Data;
-
- /* Wait for last operation to be completed */
- status = FLASH_WaitForLastOperation(ProgramTimeout);
- if(status != FLASH_TIMEOUT)
- {
- /* if the program operation is completed, disable the OPTPG Bit */
- FLASH->CR &= CR_OPTPG_Reset;
- }
- }
- /* Return the Option Byte Data Program Status */
- return status;
- }
复制代码
FLASH->OPTKEYR = FLASH_KEY1;
FLASH->OPTKEYR = FLASH_KEY2;
这个还不是解锁?难道还有别的锁?
我倒是知道还有设置写保护的功能,但那是对FLASH空间的页保护,似乎没说选项字也要保护,而且默认是没写保护的~
难道还要这个?
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
晕了,我被OPTKEYR 给忽悠了哈哈~~原来是不一样的寄存器~~
看楼主的帖子,以为你知道呢:
void FLASH_Lock ( void );
void FLASH_Unlock ( void );
高速一瞄,还真以为是同一回事~~~,细细看,原来是被忽悠了