stm32的HAL库函数flash无法写入的问题

慈云数据 2024-03-18 技术支持 109 0

记录一下对flash编程操作时出现的问题以及解决办法

问题:在使用HAL库中的HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)函数时发现总是没办法写入(明明写之前使用void FLASH_PageErase(uint32_t PageAddress)函数擦除了flash),查阅资料说是可能是因为固件库HAL_FLASH_Program函数有问题,建议换成寄存器直接操作,但是换成后发现仍有问题,读写入地址的数据任然是0xffffffff。

多次尝试发现,在第一次使用FLASH_PageErase擦除flash以及HAL_FLASH_Program写flash,烧录后,读取写入地址数据是0xffffffff,但是紧接着在代码中注释掉FLASH_PageErase这行,再次烧录,就会发现写入地址处的数据是程序中要写的数据,但是reset后就会发现,HAL_FLASH_Program函数的写入状态有问题,如下图所示:

 

以上可以猜测一下,可能是固件库 FLASH_PageErase函数有问题,选择用寄存器直接操作,直接照搬正点原子的寄存器函数,如下所示:

static uint8_t stmflash_get_error_status(void)
{
    uint32_t res;
    res = FLASH->SR;
    if (res & (1 CR |= 1 20ms */
        if (res != 1)   /* 非忙 */
        {
            FLASH->CR &= ~(1 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon