硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4181|回复: 2
收起左侧

[有问必答] STM32F405程序里如何写数据到OTP

[复制链接]

13

主题

10

回帖

49

积分

初级会员

积分
49
发表于 2021-7-6 09:30:20 | 显示全部楼层 |阅读模式
我自己写代码在程序里编程OTP区域,发觉数据写不进去,下面是我的代码,我把flash unlock和lock去掉了也不行。我看HAL代码里也没有OTP编程驱动,大家如何编程OTP的?


int write_otp_data(uint32_t address,uint32_t data)
{
    int ret = -1;
    uint32_t verify_data = 0;
    uint32_t old_data = 0;
    if(address >= OTP_DATA_BASE_ADDRESS && address < (OTP_DATA_BASE_ADDRESS + OTP_DATA_SIZE))
    {
        old_data = *(volatile uint32_t*)address;
        if( (old_data & data) == data )
        {
             HAL_FLASH_Unlock();

            *(uint32_t*)address = data;
            verify_data = *(volatile uint32_t*)address;
            if(verify_data == data)
                ret = 0;
            HAL_FLASH_lock();
        }
    }
    return ret;
}


回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2021-7-6 11:43:07 | 显示全部楼层
你可以在mdk的目录下面搜索一个文件 stm32f4xx_OTP.s ,把这个包含到你的代码项目中。 它可以自由定义OTP里面的字节,然后烧录flash的时候自动写进去。
回复

使用道具 举报

6

主题

683

回帖

701

积分

金牌会员

积分
701
QQ
发表于 2021-7-7 16:47:19 | 显示全部楼层
OTP区域是一次性的,限制了使用范例
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 16:18 , Processed in 0.036462 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表