单片机
返回首页

STM8L151系列 (OTA) Bootloader功能的开启 和 关闭

2020-04-01 来源:eefocus

IAR软件,使用官方halt库


#define OPT_BL_ADDR_L 0x480B

#define OPT_BL_ADDR_H 0x480C

void enable_ota_action(void)

{

    uint16_t optbl = 0;


    FLASH_DeInit();

    FLASH_Unlock(FLASH_MemType_Data);//解锁EEPROM区域(注意type是Data)


    // [ROP]默认为0xAA;  Read Out Protection OFF;屏蔽读保护;

    optbl = ((uint16_t)FLASH_ReadByte(OPT_BL_ADDR_L) << 8) | FLASH_ReadByte(OPT_BL_ADDR_H);

    if (optbl != 0x55AA)

    {

        printf('[OPTBL] en: 0x%Xrn', optbl);

        // OPTBL:  Option Byte 可选的字节

        FLASH_ProgramOptionByte(OPT_BL_ADDR_L, 0x55); //  [BLCHECK1]为0x55; BootLoader Check1 Enabled; 

        FLASH_ProgramOptionByte(OPT_BL_ADDR_H, 0xAA); //  [BLCHECK2]为0xAA; BootLoader Check2 Enabled;

    }

    FLASH_Lock(FLASH_MemType_Data);

}



void disable_ota_action(void)

{

    uint16_t optbl = 0;


    FLASH_DeInit();

    FLASH_Unlock(FLASH_MemType_Data);//解锁EEPROM区域(注意type是Data)


    // [ROP]默认为0xAA;  Read Out Protection OFF;屏蔽读保护;

    // FLASH_GetReadOutProtectionStatus(xx);  FLASH_ReadOptionByte();

    // https://github.com/Spider84/PLX_Extends/blob/master/main.c

    optbl = ((uint16_t)FLASH_ReadByte(OPT_BL_ADDR_L) << 8) | FLASH_ReadByte(OPT_BL_ADDR_H);

    if (optbl != 0x0000)

    {

        printf('[OPTBL] dis: 0x%Xrn', optbl);

        // OPTBL:  Option Byte 可选的字节

        FLASH_ProgramOptionByte(OPT_BL_ADDR_L, 0x00); //  [BLCHECK1]为0x00; BootLoader Check1 Disabled; 

        FLASH_ProgramOptionByte(OPT_BL_ADDR_H, 0x00); //  [BLCHECK2]为0x00; BootLoader Check2 Disabled;

    }

    FLASH_Lock(FLASH_MemType_Data);

}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

    相关电子头条文章