XSPI2_HSLV = 1 (enable I/O XSPIM Port 2 high-speed option)
static int32_t OTP_Config(void)
{
define BSEC_HW_CONFIG_ID 124U
define BSEC_HWS_HSLV_VDDIO3 (1U<<15)
define BSEC_HWS_HSLV_VDDIO2 (1U<<16)
uint32_t fuse_id, bit_mask, data;
BSEC_HandleTypeDef sBsecHandler;
int32_t retr = 0;
/ Enable BSEC & SYSCFG clocks to ensure BSEC data accesses /
__HAL_RCC_BSEC_CLK_ENABLE();
__HAL_RCC_SYSCFG_CLK_ENABLE();
sBsecHandler.Instance = BSEC;
/ Read current value of fuse /
fuse_id = BSEC_HW_CONFIG_ID;
if (HAL_BSEC_OTP_Read(&sBsecHandler, fuse_id, &data) == HAL_OK)
{
/ Check if bit has already been set /
bit_mask = BSEC_HWS_HSLV_VDDIO3 | BSEC_HWS_HSLV_VDDIO2;
if ((data & bit_mask) != bit_mask)
{
data |= bit_mask;
/ Bitwise programming of lower bits /
if (HAL_BSEC_OTP_Program(&sBsecHandler, fuse_id, data, HAL_BSEC_NORMAL_PROG) == HAL_OK)
{
/* Read lower bits to verify the correct programming */
if (HAL_BSEC_OTP_Read(&sBsecHandler, fuse_id, &data) == HAL_OK)
{
if ((data & bit_mask) != bit_mask)
{
/* Error : Fuse programming not taken in account */
retr = -1;
}
}
else
{
/* Error : Fuse read unsuccessful */
retr = -2;
}
}
else
{
/* Error : Fuse programming unsuccessful */
retr = -3;
}
}
}
else
{
/ Error : Fuse read unsuccessful /
retr = -4;
}
return retr;
}
endif / NO_OTP_FUSE /
还可以使用CubeProgrammer来配置(注意更新CubeProgrammer最新版本)。
