
如题,用HAL代码和STM32CubeProgrammer都写入不成功,一直是fffffff |
关于STM32H563的STlink-V3无法识别的问题咨询
stn32h725vgh3芯片,配置使用外部时钟必须先下载内部时钟的代码,然后再下载外部时钟的代码才可以正常使用,断电后需要重新这个流程,直接下载HSE外部时钟,功能不能使用。
stm32h563 无法完全整片擦除
STM32H745IGT6 温湿度等级
STM32H745IGT6芯片丝印
STM32H7R7 CubeMX无配置问题
用电器识别项目中nanoedgeAI频域训练及相位影响
有提供 stm32h747 系列的 驱动 ek79007 mipi 的例程吗 ?
型号替代-STM32H5
正点原子阿波罗H743使用DMA2D后普通刷出现问题
另外,你做OTP写操作是否按照手册上的 写序列 进行的。
1. Unlock FLASH_OPTCR and set PG_OTP bit in the FLASH_OPTCR register.
其中,解锁FLASH_OPTCR可以通过调用库函数AL_FLASH_OB_Unlock(void)来完成。
2. Check the protection status of the target OTP word (see Table 17). The corresponding LOCKBi bit must be cleared to 0.
3. Write two OTP words (32 bits) corresponding to the 4-byte aligned address . Alternatively, the application software
can program separately the 16-bit MSB or 16-bit LSB. In this case the first 16-bit write operation starts immediately
without waiting for the second one.
4. Check that QW1 bit in FLASH_SR1 has been raised and wait until it is reset to 0.
用STM32CubeProgrammer不能直接写成功吗?我试了F429就可以了
It cannot be erased and can be written only once.
现在一次也没写进去,是按这个步骤来写的
你用的是HAL库是吗?
FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
HAL_FLASHEx_OBGetConfig( &OBInit );
OBInit.OptionType = OPTIONBYTE_OTP_LOCK;
OBInit.OTPBlockLock = FLASH_OTP_BLOCK_0;
HAL_FLASHEx_OBProgram( &OBInit );
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_OTPWORD, FLASH_OTP_BASE, 0x12345678)== HAL_OK)
{
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}
是的,麻烦看一下使用是否有问题
麻烦看一下是这么用的吧?
FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
HAL_FLASHEx_OBGetConfig( &OBInit );
OBInit.OptionType = OPTIONBYTE_OTP_LOCK;
OBInit.OTPBlockLock = FLASH_OTP_BLOCK_0;
HAL_FLASHEx_OBProgram( &OBInit );
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_OTPWORD, FLASH_OTP_BASE, 0x12345678)== HAL_OK)
{
HAL_FLASH_OB_Launch();
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock();
}
debug模式是这里会进硬中断HardFault_Handler。
#if defined (FLASH_OPTCR_PG_OTP)
if (TypeProgram == FLASH_TYPEPROGRAM_OTPWORD)
{
/* Program an OTP word (16 bits) */
*(__IO uint16_t *)FlashAddress = *(__IO uint16_t*)DataAddress;
}
是不是因为之前写过了报错,你换个地址是不是就正常了。
换了地址和其他板子还是没成功