来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
插上电之后,显示无法识别,枚举不通过……看了电源指示灯后,发现插上那一刻,电源指示灯出现闪烁,估计是电源芯片烧了,如果只是如此还好,鱼鹰有备用的芯片,拆了换上就好,就怕主控C8T6芯片烧了,那就很麻烦了。还好鱼鹰有一块 ST 官方开发板,内置 ST-link ,可以应应急,不然就耽误事了。所以,有备用调试器和开发板是非常有必要的。
(左数第二个引脚为 SWO,第四为 CLK)PB3 怎么就把 ST-LINK 烧了呢?这是一个悲伤的故事,请听鱼鹰慢慢道来。因为需要使用 PB3 引脚作为中断,所以鱼鹰对它做了初始化,但是发现在另一块板子(这块板子不用这个引脚)能正常进入中断的,到了这个新板子就不行了,主控都是一样的,所以怀疑这是一个特殊引脚。鱼鹰赶紧百度了一下,果然,PB3 作为J-TAG的特殊输出引脚 JTDO。
鱼鹰赶紧把以前写的禁止该引脚的代码拷过来实验一下,发现根本不管用,这个代码可是鱼鹰大二时候就测试过验证的啊,不应该的。
然后上网搜了一下,发现网上的答案也是一样的,这就奇怪了。鱼鹰不信邪,直接深入这个这个重映射函数里面,发现设置根本就不对:
鱼鹰设置的是0x02000000,而不是上面这个,如果是上面这个,直接关闭所有调试接口了,那我在和谁调试,空气吗?(后来才知道,这个值读取的时候返回未定义的值)
因为引脚的电平状态我是直接在线调试看的,按理说它显示的状态就是引脚的实际状态才对,但实际情况就是它始终是低电平。
为了快速确定该引脚的功能,鱼鹰直接在这个窗口上修改引脚配置信息(前提是该端口时钟打开),配置为输出模式,同时控制电平输出:
发现还是不管用,还是表现为低电平,难道窗口设置的没有效果?鱼鹰再次用代码尝试控制电平状态,还是不行……见鬼,难道说这个窗口显示的电平状态在这个引脚不管用,IDR 寄存器没有实时反映电平?为了验证这个问题,鱼鹰直接用逻辑分析仪确定,然后鱼鹰就悲剧了……因为鱼鹰的粗心,插错了引脚,导致短路了……鱼鹰顿时心态崩了,本来就因为这个引脚的问题,导致心烦意乱,现在还把它给烧掉了,掉了,了……鱼鹰就这么一个宝贵的LINK,还特地用热缩管保护好,外面还有太上老君的“急急如律令”符纸镇压,生怕磕磕碰碰把它给烧了,谁知道还是改不了这个命运啊。
谁叫鱼鹰当初在焊接这个板子的时候,找不到 自恢复保险丝,直接焊上了铁丝,所以悲剧了。
多少次,每次接反了引脚,都以为它要烧了,但依旧坚挺着,可这次咋没挺过来呢,默哀三分钟……这个问题一直没想通,直到吃完饭再折腾的时候,意外的发现了一个地方:
当初鱼鹰在建立 uCOS II 模板时,直接把这个勾选了,而鱼鹰知道,这个功能和 ITM 有关(STM32调试利器之ITM),和 PB3 有关,然后鱼鹰好像突然就开悟了。 对,就是它搞得鬼,等我 把这个勾选去掉之后,一切回到了本来的样子,引脚窗口没问题,直接修改控制也没问题,一切 都正常了,世界终于清静了。 还好,鱼鹰没见到鬼,只是有人捣乱而已。
-THE END-