因为 PB3 引脚,烧了一个 ST-LINK……

来源:公众号【鱼鹰谈单片机】

作者:鱼鹰Osprey

ID   :emOsprey

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

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

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

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

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

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

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

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

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

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

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

因为 PB3 引脚,烧了一个 ST-LINK……

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

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

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

推荐阅读:

嵌入式系统优先级详解

KEIL 调试经验总结

线程CPU使用率到底该如何计算?

许久以后,你会感谢自己写的异常处理代码

终极串口接收方式,极致效率

延时功能进化论(合集)

如何写一个健壮且高效的串口接收程序?

打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知

-THE END-


如果对你有帮助,记得转发分享哦

微信公众号「鱼鹰谈单片机」

每周一更单片机知识

因为 PB3 引脚,烧了一个 ST-LINK……

长按后前往图中包含的公众号关注

鱼鹰,一个被嵌入式耽误的畅销书作家

个人微信「EmbeddedOsprey」

因为 PB3 引脚,烧了一个 ST-LINK……

长按后打开对方的名片关注