使用STM32单片机进行项目开发,在新焊接的电路板上出现下载程序正常,但是上电后却无法正常工作的情况。进行问题排查,进入在线调试,发现程序停在HardFault_Handler()函数里的死循环while(1)中,这说明STM32出现了硬件错误。
可是一时找不到出错原因,程序和电路都没有改动过,老的电路板上工作一切正常,而新焊接的电路板就有问题。后来发现是单片机型号弄错了,程序无法正常工作时所使用的单片机型号是STM32L151C8T6,该型号单片机flash为64kbytes,程序所需要的空间不够,从而导致无法正常工作。
正常使用的型号应该是STM32L151C8T6A,尾缀多了一个字母A,该型号单片机flash为128kbytes,可以满足程序所需空间。
这两种型号的单片机外观和丝印几乎一样,只是一个字母的差别,不注意看还真不容易发现。其实主要还是在采购单片机时没有注意,一眼看过去没有注意到型号有区别,结果导致查找问题花了很多时间。
新的电路板更换单片机后,工作一切正常。