STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用
1.概述
在学习51单片机过程中,选择了STC的12C2052AD型号单片机作为入门芯片。前几个课题实验使用默认的内部晶振烧录程序,运行都没有问题。
选择一个LED亮度渐变的课题做实验,设置了外部晶振烧录程序。第一次烧录成功之后就再也不能烧录了,难道是单片机烧了?损坏了? 然后开始了各种折腾尝试过使用内部晶振烧录程序,外部晶振烧录都没有反应,被这个问题困扰住了。接下来的几天阅读STC12C2052AD单片机用户手册寻找答案。。。
2.场景复现
2.1.LED灯渐变实验步骤
- 1.按照下图给出的接线图在面包板上接好元器件。如果没有多个LED灯,只接其中一个也可以。
- 2.使用STC-ISP程序烧录程序,选择外部晶振。点击下载程序,成功。
- 3.LED按照编写好的程序运行,亮度由暗到亮逐渐变化,这个实验完成了。
- 4.断掉单片机的电源,拆下与单片机连接的元器件。
- 5.给单片机通电,然后给单片机烧录程序,选择内部晶振。没有反应,不能烧录了。
- 6.选择外部晶振,给单片机烧录程序,还是没有反应,不能烧录。
3.单片机起死回生
3.1.定位问题过程
第一次做出假设并验证
难道这个单片机坏了吗,还是STC-ISP烧录软件设置不正确,或者电压不稳定导致不能烧录程序,下面开始验证这几个假设。
- 首先换了一个新的单片机按照上面的操作步骤烧录程序,第一次成功了,第二次同样不能烧录了。
- 问题就出现在使用了外部晶振,难道是硬件导致的吗。
由于对单片机了解匮乏,暂时没有思路了,这个时候需要对单片机更加深入的了解,掌握更多的信息在来解决这个问题。
通过阅读STC12C2052AD单片机用户手册找到了如下两个关键信息
- 单片机通过UART串口接收数据,需要晶振才能启动
- STC-ISP设置外部晶振在下次冷启动后生效
第二次做出假设并验证
- 1.第一次烧录程序选择外部晶振并不是通过外部晶振烧录程序,依旧使用内部晶振完成的烧录程序,需要在下次断电后才会切换为外部晶振。
- 2.当第二次烧录程序时,LED灯渐变实验步骤4给单片机断电,并且拆除了外部晶振。导致第二次烧录程序使用外部晶振模式,但是硬件中没有外接晶振,UART串口无法传输数据导致烧录失败。即使后面尝试在STC-ISP烧录软件上设置为内部晶振也无法烧录,因为此时默认的模式是外部晶振。必须通过外部晶振烧录成功后,才可切换为内部晶振模式烧录程序。
3.2.解决方法
1.外部晶振烧录程序
- 首先按照上图将晶振与单片机连接好,使单片机可以通过外接的晶振起振。
- STC-ISP烧录软件设置内部晶振或者外部晶振都可以,因为当前单片机使用的是外部晶振。假设我们在STC-ISP设置为外部晶振模式,点击下载程序,程序烧录成功!
2.自由切换内外晶振烧录程序
上面的尝试验证了第二次的推理是正确的,那么掌握了这个原理后就可以随心所欲的切换内外晶振烧录程序了。
- 内部晶振切换为外部晶振
shell
1.单片机硬件上是否外接晶振不重要,只有一个单片机即可。
2.在STC-ISP上设置外部晶振,然后点击下载程序。此次烧录程序使用的是内部晶振,他会成功。
3.断掉单片机5V正极电源,在接通5V电源。此时单片机才切换到了外部晶振。
4.再次烧录程序就不会成功了,因为它切换为了外部晶振,只有硬件外接晶振才可烧录程序。
- 外部晶振切换为内部晶振
shell
1.当前单片机是外部晶振模式,第一次烧录程序必须为单片机硬件外接晶振,这样他才能通过外部晶振起振。
2.在STC-ISP上设置内部晶振,然后点击下载程序。此次烧录程序使用的是外部晶振。
3.断掉单片机5V正极电源,在接通5V电源。此时单片机才切换到了内部晶振。
4.总结
文章概述中描述的问题,原因有两点。
- 在STC-ISP设置内外部晶振模式,第一次烧录程序后并不生效,需要在烧录完成后,再手动冷启动后生效。
- 单片机烧录程序是通过UART串口,该串口数据传输依赖晶振,没有晶振将无法传输数据。
因此解决这个问题的关键点就是判断当前单片机使用的是内部还是外部晶振,如果无法判断当前使用是哪个晶振,那就把外部晶振接好,为单片机同时提供内外晶振,在烧录程序时有单片机自己选择。只要它找到了晶振就解决了不能烧录程序的问题。