因项目需要,ST那边给了一块NUCLEO-G031K8开发板,板子上一颗STM32G031K8T6U的CM0+芯片,看原理图芯片的NRST脚是连了外部按键复位电路(如图1)。按理来说开发板的RST功能是默认起作用的,但实际使用时,按RST键一直无法重启,新烧录固件也不能自动reset and run,必须手动下电再上电新固件才能跑起来。

由于之前对ST的Cortex-M4系列芯片较熟悉,M4系列芯片NRST脚没有其他模式,所以压根没想到CM0+的NRST脚可以设置为不同的模式。所以先是检查使用STM32CubeMX配置上是不是有问题,配置上压根没有关于NRST的配置项,然后就怀疑开发板的硬件有问题,量了NRST的电平,没有高电平输出。但是其他一切功能正常,硬件没这么容易坏,最好还是老老实实看Reference manual,终于找到关于NSRT模式设置的说明(如图2)。

下一个问题是:NRST脚的默认模式就是Reset模式啊,为什么拿到的开发板默认模式不是这个?从哪里查看开发板的当前模式是什么?从哪里更改NRST脚的模式?
于是继续搜索相关资料,了解到通过烧录器的Option bytes可以设置MCU的一些默认参数,图3就是通过CubeProgrammer查到的我手上开发板对NRST_MODE的默认设置,竟然给设置成了GPIO口😂。更改为mode 3,问题外部按键复位功能恢复正常,问题解决。