最近鱼鹰在忙着搞 NRF 无线通信,之前请人帮忙画了一块板子,用了 PB3 引脚作为模块的 IRQ 中断引脚,然后鱼鹰把一块自制 ST-LINK 烧掉了……

 

 

插上电之后,显示无法识别,枚举不通过……

 

看了电源指示灯后,发现插上那一刻,电源指示灯出现闪烁,估计是电源芯片烧了,如果只是如此还好,鱼鹰有备用的芯片,拆了换上就好,就怕主控 C8T6 芯片烧了,那就很麻烦了。

 

还好鱼鹰有一块 ST 官方开发板,内置 ST-link ,可以应应急,不然就耽误事了。

 

所以,有备用调试器和开发板是非常有必要的。

 

(左数第二个引脚为 SWO,第四为 CLK)

 

PB3 怎么就把 ST-LINK 烧了呢?这是一个悲伤的故事,请听鱼鹰慢慢道来。

 

因为需要使用 PB3 引脚作为中断,所以鱼鹰对它做了初始化,但是发现在另一块板子(这块板子不用这个引脚)能正常进入中断的,到了这个新板子就不行了,主控都是一样的,所以怀疑这是一个特殊引脚。

 

鱼鹰赶紧百度了一下,果然,PB3 作为 J-TAG 的特殊输出引脚 JTDO。

 

 

鱼鹰赶紧把以前写的禁止该引脚的代码拷过来实验一下,发现根本不管用,这个代码可是鱼鹰大二时候就测试过验证的啊,不应该的。

 

 

然后上网搜了一下,发现网上的答案也是一样的,这就奇怪了。

 

鱼鹰不信邪,直接深入这个这个重映射函数里面,发现设置根本就不对:

 

 

鱼鹰设置的是 0x02000000,而不是上面这个,如果是上面这个,直接关闭所有调试接口了,那我在和谁调试,空气吗?(后来才知道,这个值读取的时候返回未定义的值)

 

 

因为引脚的电平状态我是直接在线调试看的,按理说它显示的状态就是引脚的实际状态才对,但实际情况就是它始终是低电平。

 

 

为了快速确定该引脚的功能,鱼鹰直接在这个窗口上修改引脚配置信息(前提是该端口时钟打开),配置为输出模式,同时控制电平输出:

 

 

发现还是不管用,还是表现为低电平,难道窗口设置的没有效果?

 

鱼鹰再次用代码尝试控制电平状态,还是不行……

 

见鬼,难道说这个窗口显示的电平状态在这个引脚不管用,IDR 寄存器没有实时反映电平?

 

为了验证这个问题,鱼鹰直接用逻辑分析仪确定,然后鱼鹰就悲剧了……

 

因为鱼鹰的粗心,插错了引脚,导致短路了……

 

鱼鹰顿时心态崩了,本来就因为这个引脚的问题,导致心烦意乱,现在还把它给烧掉了,掉了,了……

 

鱼鹰就这么一个宝贵的 LINK,还特地用热缩管保护好,外面还有太上老君的“急急如律令”符纸镇压,生怕磕磕碰碰把它给烧了,谁知道还是改不了这个命运啊。

 

 

谁叫鱼鹰当初在焊接这个板子的时候,找不到自恢复保险丝,直接焊上了铁丝,所以悲剧了。

 

多少次,每次接反了引脚,都以为它要烧了,但依旧坚挺着,可这次咋没挺过来呢,默哀三分钟……

 

这个问题一直没想通,直到吃完饭再折腾的时候,意外的发现了一个地方:

 

 

当初鱼鹰在建立 uCOS II 模板时,直接把这个勾选了,而鱼鹰知道,这个功能和 ITM 有关(STM32 调试利器之 ITM),和 PB3 有关,然后鱼鹰好像突然就开悟了。

 

对,就是它搞得鬼,等我把这个勾选去掉之后,一切回到了本来的样子,引脚窗口没问题,直接修改控制也没问题,一切都正常了,世界终于清静了。

 

还好,鱼鹰没见到鬼,只是有人捣乱而已。