找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3659|回复: 16
打印 上一主题 下一主题
收起左侧

STC单片机下载几次后就无法下载, 静置一会儿后又可以下载

[复制链接]
跳转到指定楼层
楼主
单片机型号位STC8A8K64S4A12, 手上有两块自己做的开发板, 都是这个问题, 下载一次或几次后就无法下载, 开发板静置10分钟左右又可以下载程序了USB转串口芯片为CH340C, 无外部晶振

ISP软件为STC-ISP v6.86u 确定没有任何设置错误:



我的猜想:
1. 可能是我电源退耦没有做好, 上电时可能有电涌, 干扰串口信号或直接让CH340C停止工作\

    我的退耦方案: 一个47uF和0.1uF的电容放置在USB口旁边退耦, CH340C按Datasheet给的方案来放置电容, VCC和V3.3接0.1uF退耦
    USB口到CH340C大约有1.5-2cm左右的距离, UD+和UD-两条数据线近似等长, 长度相差167mil
2. 在板子的某个地方有电容效应, 下载后电荷量积攒到一定程度就影响信号无法下载, 静置后让电容放电, 于是又可以下载

求教这是什么问题?应该如何解决?
跪谢大佬相助!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:884307 发表于 2021-11-20 22:02 | 只看该作者
补充: "无法下载"指的是软件一直显示"正在检测单片机"
回复

使用道具 举报

板凳
ID:884147 发表于 2021-11-20 22:14 | 只看该作者
应该是电源两端有大电容,下载时的断电动作无法使单片机复位
回复

使用道具 举报

地板
ID:624769 发表于 2021-11-20 22:33 | 只看该作者
1)  按规范,8A8K 的 AVCC, AGND 都需要连接。最差也要并到 VCC 和 GND
2) 8A和8F系列, P3.1需要接300R电阻,(太高太低都会间歇性下载失败)。P3.0的二极管就不说了,没啥变化。
3) 由于设计上的不足,下载8A8K时,条件允许的话,断电时断GND。
回复

使用道具 举报

5#
ID:57657 发表于 2021-11-20 23:07 | 只看该作者
如果单片机进入掉电模式,1uF就能维持很长时间,下载前请将电容放电。
回复

使用道具 举报

6#
ID:28752 发表于 2021-11-21 07:09 | 只看该作者
每次下载,接通电源前,短路下板上电源,再接入电源下载
回复

使用道具 举报

7#
ID:884307 发表于 2021-11-21 10:56 | 只看该作者
mtdzok 发表于 2021-11-20 22:14
应该是电源两端有大电容,下载时的断电动作无法使单片机复位

一语中的! 感谢指导!!
回复

使用道具 举报

8#
ID:884307 发表于 2021-11-21 10:57 | 只看该作者
npn 发表于 2021-11-20 23:07
如果单片机进入掉电模式,1uF就能维持很长时间,下载前请将电容放电。

是这样的! 短路电容两端后就可以下载了! 感谢大佬指导!
那板子设计的时候有没有什么方法规避这种问题呢?不然每次下载都要给电容放电很麻烦
没有大电容就不能有效退耦, 有大电容放电又很慢, 应该怎么解决?
回复

使用道具 举报

9#
ID:884307 发表于 2021-11-21 10:58 | 只看该作者
grb7906 发表于 2021-11-21 07:09
每次下载,接通电源前,短路下板上电源,再接入电源下载

这个方法很有效! 感谢!!
回复

使用道具 举报

10#
ID:57657 发表于 2021-11-21 12:23 | 只看该作者
本帖最后由 npn 于 2021-11-21 12:27 编辑
Kituro 发表于 2021-11-21 10:57
是这样的! 短路电容两端后就可以下载了! 感谢大佬指导!
那板子设计的时候有没有什么方法规避这种问题呢? ...

你可以看一下STC自带的这个功能,板子不需要改动,执行一条指令 IAP_CONTR |= 0x60; 复位到ISP程序区就可以下载。
回复

使用道具 举报

11#
ID:884307 发表于 2021-11-21 13:31 | 只看该作者
本帖最后由 Kituro 于 2021-11-21 13:36 编辑
npn 发表于 2021-11-21 12:23
你可以看一下STC自带的这个功能,板子不需要改动,执行一条指令 IAP_CONTR |= 0x60; 复位到ISP程序区就可 ...

我复制IAP_CONTR |= 0x60;到我的程序中, 提示error C129: missing ';' before '|='

回复

使用道具 举报

12#
ID:57657 发表于 2021-11-21 19:06 | 只看该作者
Kituro 发表于 2021-11-21 13:31
我复制IAP_CONTR |= 0x60;到我的程序中, 提示error C129: missing ';' before '|='

C语言哪有这么写的? 指令要放到函数里。
回复

使用道具 举报

13#
ID:57657 发表于 2021-11-21 21:08 | 只看该作者
npn 发表于 2021-11-21 19:06
C语言哪有这么写的? 指令要放到函数里。

请将该指令放置到需要的地方,比如串口、外部中断、按键长按等事件,一但执行就会 立即复位。
回复

使用道具 举报

14#
ID:123289 发表于 2021-11-23 10:37 | 只看该作者
保证下载命令发出后,单片机处理于掉电状态,这时再上电,就成功了。
回复

使用道具 举报

15#
ID:123289 发表于 2021-11-23 10:39 | 只看该作者
道理很简单:
烧写或仿真程序是由内置的一段固有监控程序完成的,固有监控程序只在冷起动时运行一下,当它发现没有烧写或仿真命令时,就跳转0000H,执行用户程序。
而发现有烧写或仿真命令时,才执行烧写或仿真命令。
回复

使用道具 举报

16#
ID:491577 发表于 2021-11-23 11:11 | 只看该作者
这个问题我遇到过,主要是电磁干扰问题,开发板的连接线随意接会有干扰影响下载,解决方法是将最高下载波特率从115200改为9600就可以了。减速就好
回复

使用道具 举报

17#
ID:57657 发表于 2021-11-23 11:20 | 只看该作者
hhh402 发表于 2021-11-23 11:11
这个问题我遇到过,主要是电磁干扰问题,开发板的连接线随意接会有干扰影响下载,解决方法是将最高下载波特 ...

串口没有时钟线,如果波特率过高,晶振误差导致误码,这就是握手失败或下载到一半出错的问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表