把Air001复位脚配置成普通IO

把Air001复位脚配置成普通IO,官方有例程,路径在air001\ModuleDemo\Flash\Example_HAL\FLASH_OptionByteWrite_RST,配置函数代码如下:
static void APP_FlashOBProgram(void)
{
FLASH_OBProgramInitTypeDef OBInitCfg;

HAL_FLASH_Unlock(); /* 解锁FLASH /
HAL_FLASH_OB_Unlock(); /
解锁OPTION */

/* 配置OPTION选项 */
OBInitCfg.OptionType = OPTIONBYTE_USER;
OBInitCfg.USERType = OB_USER_BOR_EN | OB_USER_BOR_LEV | OB_USER_IWDG_SW | OB_USER_WWDG_SW | OB_USER_NRST_MODE | OB_USER_nBOOT1;

if defined(RSTPIN_MODE_GPIO)

/* BOR不使能/BOR上升3.2,下降3.1/软件模式看门狗/GPIO功能/System memory作为启动区 */
OBInitCfg.USERConfig = OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_WWDG_SW | OB_RESET_MODE_GPIO | OB_BOOT1_SYSTEM;

else

/* BOR不使能/BOR上升3.2,下降3.1/软件模式看门狗/RST功能/System memory作为启动区 */
OBInitCfg.USERConfig = OB_BOR_DISABLE | OB_BOR_LEVEL_3p1_3p2 | OB_IWDG_SW | OB_WWDG_SW | OB_RESET_MODE_RESET | OB_BOOT1_SYSTEM;

endif

/* 启动option byte编程 */
HAL_FLASH_OBProgram(&OBInitCfg);

HAL_FLASH_Lock(); /* 锁定FLASH /
HAL_FLASH_OB_Lock(); /
锁定OPTION */

/* 产生一个复位,option byte装载 */
HAL_FLASH_OB_Launch();
}

使用的时候需要先定义:#define RSTPIN_MODE_GPIO

要注意的问题是,如果不定义#define RSTPIN_MODE_GPIO,而是每次强制执行配置的话,将会把芯片“锁死”,导致无法在Keil中直接下载程序,包括全擦除也无法进行的结果!

实际应用时,需要检测一下当前的复位脚是否为普通GPIO,如果是,则不执行配置;不是才执行配置。
即:
if( READ_BIT(FLASH->OPTR, FLASH_OPTR_NRST_MODE) == OB_RESET_MODE_RESET)
APP_FlashOBProgram();

2026.8.8

image

欢迎关注本人公众号,了解更多。

posted @ 2026-08-08 16:41  lmn2005  阅读(5)  评论(0)    收藏  举报