普冉 PY32F002A 系列:如何将 NRST 复位引脚配置为普通 GPIO?【避坑指南】
摘要:PY32F002A单片机SOP8封装IO资源有限,复用NRST引脚时发现直接配置GPIO无效。需通过Flash编程修改底层硬件配置,调用特定函数将NRST模式改为GPIO。示例代码展示了如何解锁Flash、配置OptionBytes并执行编程,完成后系统会自动复位生效。注意需添加Flash驱动文件,否则无法调用相关函数。该方法解决了复用NRST引脚的关键技术问题。
·
一、前景
由于作者在用PY32F002A单片机选用的是SOP8型号封装的,IO资源非常有限,因此利用了复用引脚NRST上的IO,想把它设置为推挽模式,但是发现直接初始化并且设置低电平无法直接操作该IO口,咨询FAE后得知需要提前调用一些函数
很多开发者习惯性去配置 GPIO_Init,结果发现引脚电平毫无反应。这是因为 NRST 的功能配置存储在 Flash 的特殊区域,必须通过 Flash 编程的方式来修改底层硬件配置。
二、硬件图

硬件图
三、示例代码
定义以下函数。并且将它加入进main函数上面。
void Set_RST_Pin_To_GPIO(void)
{
FLASH_OBProgramInitTypeDef OBInitCfg = {0};
// 1. 检查当前引脚状态,如果已经是 GPIO 模式则不重复烧写,保护 Flash 寿命
if (READ_BIT(FLASH->OPTR, FLASH_OPTR_NRST_MODE) == OB_RESET_MODE_GPIO)
{
return;
}
// 2. 解锁 Flash 和 Option Bytes 访问权限
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
// 3. 配置配置项:重点是 OB_USER_NRST_MODE
OBInitCfg.OptionType = OPTIONBYTE_USER;
OBInitCfg.USERType = OB_USER_NRST_MODE;
// 设置为 GPIO 模式 (如果想改回复位模式,改为 OB_RESET_MODE_RESET)
OBInitCfg.USERConfig = OB_RESET_MODE_GPIO;
// 4. 执行编程
if (HAL_FLASH_OBProgram(&OBInitCfg) == HAL_OK)
{
// 5. 锁定并启动(Launch 会强制系统复位,使配置生效)
HAL_FLASH_Lock();
HAL_FLASH_OB_Lock();
// 注意:执行此句后芯片会立即复位
HAL_FLASH_OB_Launch();
}
// 如果失败,锁定退出
HAL_FLASH_Lock();
HAL_FLASH_OB_Lock();
}
注意:

要提前将驱动文件的flash文件加入到工程里去否则无法调用相关flash函数。
需要完整版工程可以在下方留言,或者私信作者。
更多推荐



所有评论(0)