STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用

本文主要是介绍STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用

1.概述

在学习51单片机过程中,选择了STC的12C2052AD型号单片机作为入门芯片。前几个课题实验使用默认的内部晶振烧录程序,运行都没有问题。
选择一个LED亮度渐变的课题做实验,设置了外部晶振烧录程序。第一次烧录成功之后就再也不能烧录了,难道是单片机烧了?损坏了? 然后开始了各种折腾尝试过使用内部晶振烧录程序,外部晶振烧录都没有反应,被这个问题困扰住了。接下来的几天阅读STC12C2052AD单片机用户手册寻找答案。。。

2.场景复现

2.1.LED灯渐变实验步骤

  • 1.按照下图给出的接线图在面包板上接好元器件。如果没有多个LED灯,只接其中一个也可以。
  • 2.使用STC-ISP程序烧录程序,选择外部晶振。点击下载程序,成功。
  • 3.LED按照编写好的程序运行,亮度由暗到亮逐渐变化,这个实验完成了。
  • 4.断掉单片机的电源,拆下与单片机连接的元器件。
  • 5.给单片机通电,然后给单片机烧录程序,选择内部晶振。没有反应,不能烧录了。
  • 6.选择外部晶振,给单片机烧录程序,还是没有反应,不能烧录。

file

3.单片机起死回生

3.1.定位问题过程

第一次做出假设并验证

难道这个单片机坏了吗,还是STC-ISP烧录软件设置不正确,或者电压不稳定导致不能烧录程序,下面开始验证这几个假设。

  • 首先换了一个新的单片机按照上面的操作步骤烧录程序,第一次成功了,第二次同样不能烧录了。
  • 问题就出现在使用了外部晶振,难道是硬件导致的吗。

由于对单片机了解匮乏,暂时没有思路了,这个时候需要对单片机更加深入的了解,掌握更多的信息在来解决这个问题。
通过阅读STC12C2052AD单片机用户手册找到了如下两个关键信息

  • 单片机通过UART串口接收数据,需要晶振才能启动
  • STC-ISP设置外部晶振在下次冷启动后生效
第二次做出假设并验证
  • 1.第一次烧录程序选择外部晶振并不是通过外部晶振烧录程序,依旧使用内部晶振完成的烧录程序,需要在下次断电后才会切换为外部晶振。
  • 2.当第二次烧录程序时,LED灯渐变实验步骤4给单片机断电,并且拆除了外部晶振。导致第二次烧录程序使用外部晶振模式,但是硬件中没有外接晶振,UART串口无法传输数据导致烧录失败。即使后面尝试在STC-ISP烧录软件上设置为内部晶振也无法烧录,因为此时默认的模式是外部晶振。必须通过外部晶振烧录成功后,才可切换为内部晶振模式烧录程序。

3.2.解决方法

1.外部晶振烧录程序
  1. 首先按照上图将晶振与单片机连接好,使单片机可以通过外接的晶振起振。
  2. STC-ISP烧录软件设置内部晶振或者外部晶振都可以,因为当前单片机使用的是外部晶振。假设我们在STC-ISP设置为外部晶振模式,点击下载程序,程序烧录成功!
2.自由切换内外晶振烧录程序

上面的尝试验证了第二次的推理是正确的,那么掌握了这个原理后就可以随心所欲的切换内外晶振烧录程序了。

  • 内部晶振切换为外部晶振
1.单片机硬件上是否外接晶振不重要,只有一个单片机即可。
2.在STC-ISP上设置外部晶振,然后点击下载程序。此次烧录程序使用的是内部晶振,他会成功。
3.断掉单片机5V正极电源,在接通5V电源。此时单片机才切换到了外部晶振。
4.再次烧录程序就不会成功了,因为它切换为了外部晶振,只有硬件外接晶振才可烧录程序。
  • 外部晶振切换为内部晶振
1.当前单片机是外部晶振模式,第一次烧录程序必须为单片机硬件外接晶振,这样他才能通过外部晶振起振。
2.在STC-ISP上设置内部晶振,然后点击下载程序。此次烧录程序使用的是外部晶振。
3.断掉单片机5V正极电源,在接通5V电源。此时单片机才切换到了内部晶振。

4.总结

文章概述中描述的问题,原因有两点。

  1. 在STC-ISP设置内外部晶振模式,第一次烧录程序后并不生效,需要在烧录完成后,再手动冷启动后生效。
  2. 单片机烧录程序是通过UART串口,该串口数据传输依赖晶振,没有晶振将无法传输数据。

因此解决这个问题的关键点就是判断当前单片机使用的是内部还是外部晶振,如果无法判断当前使用是哪个晶振,那就把外部晶振接好,为单片机同时提供内外晶振,在烧录程序时有单片机自己选择。只要它找到了晶振就解决了不能烧录程序的问题。

这篇关于STC单片机选择外部晶振烧录程序无法切换回内部晶振导致单片机不能使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/411564

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景