4.2.2. 通过软件代码设置 OEMxKey
以下是通过软件代码设置 OEM1/2Key 的示例,这个例子中我们在 RDP 为 Level0 的
条件下设置 OEMxKey。实际使用中代码可以根据实际需求结合 Error! Reference source
not found.的内容决定在哪种 RDP 级别下允许修改 OEMxKey。
- #define OEM1KEY_WORD_1 ((uint32_t)0x12345678)
- #define OEM1KEY_WORD_2 ((uint32_t)0xDEADBEEF)
- #define OEM2KEY_WORD_1 ((uint32_t)0xFACEB00C)
- #define OEM2KEY_WORD_2 ((uint32_t)0xDEADBABE)
- FLASH_OBProgramInitTypeDef OptionsBytesInit;
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] Function to set and lock OEM1 key
- * @param key1: OEM1 key part 1
- * @param key2: OEM1 key part 2
- */
- static void OB_Test_SetOEM1Key(uint32_t key1, uint32_t key2) {
- OptionsBytesInit.OptionType = OPTIONBYTE_RDP;
- HAL_FLASHEx_OBGetConfig(&OptionsBytesInit);
- if (OptionsBytesInit.RDPLevel == 0xAA) {
- HAL_FLASH_Unlock();
- HAL_FLASH_OB_Unlock();
- OptionsBytesInit.OptionType = OPTIONBYTE_RDPKEY;
- OptionsBytesInit.RDPKeyType = OB_RDP_KEY_OEM1;
- OptionsBytesInit.RDPKey1 = key1;
- OptionsBytesInit.RDPKey2 = key2;
- HAL_FLASHEx_OBProgram(&OptionsBytesInit);
- HAL_FLASH_OB_Launch();
- } }
- /**
- * @brief Function to set and lock OEM2 key
- * @param key1: OEM2 key part 1
- * @param key2: OEM2 key part 2
- */
- static void OB_Test_SetOEM2Key(uint32_t key1, uint32_t key2) {
- OptionsBytesInit.OptionType = OPTIONBYTE_RDP;
- HAL_FLASHEx_OBGetConfig(&OptionsBytesInit);
- if (OptionsBytesInit.RDPLevel == 0xAA) {
- HAL_FLASH_Unlock();
- HAL_FLASH_OB_Unlock();
- OptionsBytesInit.OptionType = OPTIONBYTE_RDPKEY;
- OptionsBytesInit.RDPKeyType = OB_RDP_KEY_OEM2;
- OptionsBytesInit.RDPKey1 = key1;
- OptionsBytesInit.RDPKey2 = key2;
- printf("Program OB\r\n");
- HAL_FLASHEx_OBProgram(&OptionsBytesInit);
- printf("Launch OB\r\n");
- HAL_FLASH_OB_Launch();
- } }
|