本文禁止转载。
正常情况下,任何一块电路板,在复位的时候,都是要求板子能重新起来的。
我们的复位电路如上图所示,默认采用了nrf52840 P0.18管脚进行复位。
上图是我们的电源电路,我们的电源电路 POWER_EN 管脚与nrf52840连接。启动时,需要把POWER_EN管脚拉高,这样电源电路才会导通,电路才可以正常工作。
reset之后,一般单片机的情况,管脚都是进入到高阻态。
但是,NRF52840的在reset之后,管脚的状态是未知的!!!!
具体的可以查看下面的官网的网址描述:
nRF52833 GPIO behavior during pin reset - Nordic Q&A - Nordic DevZone - Nordic DevZone
reset复位后,reset的复位信号达到芯片的内部各个模块的时序有差异,并不能保持一致性,所以导致管脚的状态未知。
it's not possible to guarantee the exact behavior.
没办法,只能改成软复位,软复位之后,会解决到复位时端口状态不一致的问题。
首先,去除掉 CONFIG_GPIO_AS_PINRESET 宏,让P0.18作为一个普通的GPIO口,而不是默认的reset口
不过,这种软中断的复位方式有缺陷,具体的缺陷表现为,只有当程序正常运行的时候,才可以进入到中断函数里面进行复位。如果程序跑飞了,软中断复位的方式就不会生效。
而复位存在的意义,恰恰是程序跑飞的时候,可以通过外部硬件的方式进行强制复位,让程序正常运行!!!
好吧,巨大的矛盾。