当前位置: 首页 > news >正文

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串口,该串口数据传输依赖晶振,没有晶振将无法传输数据。

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

相关文章:

  • 帝国cms开发一个泛知识类的小程序的历程记录
  • CNVD-2023-12632:泛微E-cology9 browserjsp SQL注入漏洞复现 [附POC]
  • 『亚马逊云科技产品测评』活动征文|通过Lightsail搭建个人笔记
  • 《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源
  • ④【Set】Redis常用数据类型: Set [使用手册]
  • 电子学会C/C++编程等级考试2022年12月(一级)真题解析
  • Linux安装Mysql详细教程(两种安装方法)
  • PyTorch中并行训练的几种方式
  • k8s安装jenkins
  • SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡
  • 如何开发干洗店用的小程序
  • ChatGPT 也并非万能,品牌如何搭上 AIGC「快班车」
  • 代码规范之-理解ESLint、Prettier、EditorConfig
  • 【Nginx】nginx 解决504超时问题
  • Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用
  • Cookie 在前端中的实践
  • ES10 特性的完整指南
  • ES6核心特性
  • ESLint简单操作
  • Koa2 之文件上传下载
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Web标准制定过程
  • 观察者模式实现非直接耦合
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 转载:[译] 内容加速黑科技趣谈
  • 《码出高效》学习笔记与书中错误记录
  • HanLP分词命名实体提取详解
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Python 3 新特性:类型注解
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)STL算法之遍历容器
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)Oracle存储过程编写经验和优化措施
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 8.0 发布到 IIS
  • .Net 8.0 新的变化
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net FrameWork总结
  • .net 提取注释生成API文档 帮助文档
  • .Net接口调试与案例
  • .NET企业级应用架构设计系列之技术选型