先说说为什么会出现这种情况,首先与大多数MCU一样Kinetis的Reset脚也是低电平有效,且正常运行时是上拉输入状态(对外显性即高电平),但是有一点不同的是Kinetis的复位管脚在MCU复位状态时会对外输出一个低电平(有一个输出状态窗口),待MCU退出复位状态后Reset恢复成上拉输入状态,这个低电平输出的设计初衷主要是为了用这个低脉冲去同步外部其他的芯片或者系统(即把Kinetis的Reset与其他系统的Reset连在一块,可以保证Kinetis复位时把其他系统也一块复位了,保证整个系统同步),可以说这个设计初衷是好的,但是实际市场反馈来说,很少有客户需要这么做,咳咳,典型的出力不讨好。
综上所述,对一块已下载好可用可执行的代码的Kinetis MCU来说,其Reset管脚的电平输出在芯片上电之后应该是短暂的一个低电平脉冲(上电复位造成的)然后一直拉高表示代码执行正常。但是对于一块刚出厂的空片子或者我们通过调试工具对芯片进行了全擦除操作的话,其里面是没有任何程序的,这样芯片就会一直死在某个位置(上电其PC指针为0xFFFF_FFFF,由ARM Cortex-M启动机制可知),但有较真的博友会质疑这样应该也不会出现Reset脚方波现象,的确是这样,但是我还要考虑另一个因素,那就是芯片上电默认其内部看门狗是使能的,哈哈,这样大家就都明白了,当芯片死在某个位置一定时间后(没有程序把看门狗禁掉,也没有喂狗),看门狗就会自动把芯片复位,然后循环往复的一直介样子,即芯片复位后死在某个位置一段时间后再复位然后再死(咳咳,MCU真悲哀啊,想死都死不成,呵呵),这样就会形成Reset管脚方波的情况了。
知道原因了,其解决办法就迎刃而解了(实际上也算不上解决办法,因为本就不是问题,是一个正常现象,如果我们接上Jlink会发现Jlink的灯一直是橙色闪烁,实际上就是这个原因),我们只需要往芯片中写入一个正常的程序即可,所以出现这个问题不必惊慌而会问到“元芳你怎么看”了,我们自己看看就搞定了,呵呵。当然Reset在复位期间有这样一个输出状态的确也会造成一个隐患,就是如果我们外部加一个推挽输出的复位芯片的话需要串一个电阻,至于为何,我这里就卖个关子了,见我之前的博客自然明了(Kinetis Reset管脚与外部看门狗/复位芯片接法:http://www.ippipp.com/article/id/36964)。
哦了,啰嗦了这么多文字希望能把这个比较common的问题解释清楚,到这儿了,未完待续~
jicheng0622的博客~