今天在使用stm32单片机的时候,发现了一个奇怪的现象,调试器经常识别不到单片机,给单片机重新上电后有时就正常,但重新下载又无法识别。刚开始以为是调试器坏了,于是更换了调试器,但没有换调试器的杜邦线,还是相同的问题,因此把调试器故障排除了。然后又尝试了降低SW频率、更换调试线,问题还是依旧。
最后把怀疑对象转移到了单片机上。我把调试器接到另外一个单片机核心板上,多次调试都能正常识别。于是便认为是单片机的问题。然后更换了一个核心板,把原来的线路都连接到了新的核心板上。又进行了几次调试之后,发现原来的问题又出现了。这时,我便无法理解这奇怪的现象了。
我又想到,单片机除了无法被调试器识别还有另一个奇怪的现象,就是有一个定时器会自己停止,在调试时查看定时器使能寄存器是使能的,但时定时器并没有计数。根据这些现象,我感觉单片机似乎是被什么东西给干扰了。这时,我想到了我给单片机定时器输入的一个输入捕获是5V的电平,这个信号是过零比较器的输出信号,一个频率1K的信号。虽然这个引脚是不支持5V电平输入的,但是因为之前了在单片非5V忍受的引脚输入过5V的信号,当时并没有遇到问题,所以我也就没有对这个信号处理就直接输入给单片机了,然后我把这个IO上串连了一个5.1K电阻再接入原来的信号,所有的故障都消失了。
这次经历让我意识到,一些看似没多大问题的不规范做法可能会给我们带来一些隐患。在这里我使用通过电阻给IO输入5V信号,虽然解决了问题,但这样的操作也是不可取的,是我为了偷懒的做法。还有,意外停止的定时器并不是输入捕获5V信号的那一个定时器,这种找不到规律的现象也说明可能是遇到了干扰。
对这个问题简单的记录一下,希望可以对大家提供一些帮助。