折中版的STC免手动免断电下载程序方案, 只需加一行代码, 不占用其他任何资源, 有图
想了想, 还是单独开个帖子吧在说这个之前要谢谢 BXAK 提供的免手动的方案方案,./emotion/em012.gif
我借鉴了他的方法, 也做了一个, 刚拿到STC15F104E的时候下载程序出了问题, 也要谢谢 BXAK 的帮助
这个是BXAK 的原帖 ./emotion/em012.gifhttp://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5279682&bbs_page_no=1&bbs_id=1006 , 他的最终程序在32楼, 我在35楼也贴出了我做出来的效果
至于原理, BXAK 的帖子已经解释过了, 我就没有必要重复了, 大家看那个帖子就行了
先看看做出来的样子吧, 原本是只用了一个STC15F104E的, 后来考虑到连线的时候可能会出现错误, 就在在TXD(P31)和控制复位的脚(P33)串了个100欧的电阻, 然后又想有个复位电路, 就又改了下, 手上只有贴片的按键, 焊起来真是麻烦死了...
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705706XNHR6T.jpg
(原文件名:1.jpg)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705707OTTUSR.jpg
(原文件名:2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705708BKUERN.jpg
(原文件名:3.jpg)
接下来是电路图
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705709L5BEVB.png
(原文件名:4.png)
使用的时候就是用你原来的下载电路, 然后目标单片机引出几个脚和这个东东连接
其实他的工作就是监听串口的信息
当检测到有下载信号的时候, 它就可以复位目标单片机了
程序一开始的说明:
//说明:
// STC单片机免手动下载的串口监视器程序,
// 只使用了一个单片机STC15F104E制作
// 为了安全第因素可以在P33(目标机复位控制脚), P31脚串联一个100欧的限流电阻
// P31(串口发送)脚如果不引出线来的话也不需要串联电阻, 引出来是为了以后更新这个串口监视程序的方便
// 还可以给串口监视器的单片机STC15F104E加一个复位电路, 因为程序里没有使用看门狗, 有复位电路方便复位
// 可以自适应波特率1200, 2400, 4800, 9600
//注意:
// 第一次下载目标机程序的时候还是需要冷启动的,
// 而且每次下载的目标机程序的代码的主函数第一句要写上一条语句:IAP_CONTR |= (0x01<<6);
// 这条语句是用来设置目标机下次复位的时候从ISP启动的, 如果使用 BXAK 大哥的继电器的方案就不需要这样了
最后是程序 ourdev_705711DL51L9.zip(文件大小:86K) (原文件名:STC15.zip)
因为有一小部分代码是直接从我的STC12C5A60S2的库代码移植过来的, 所以有些地方的注释还有代码不太恰当, 也懒得改了...将就着看吧
我说这是折中版, 因为网上有完全软件的方案, 但是至少要占用一个串口, 对于没有仿真器的我来说, 占用一个串口会给我的调试带来很大的麻烦..../emotion/em004.gif
然后BXAK的方案是使用了继电器, 也有网友提出用MOS管, 嗯, 也是不错的, 继电器我手上没有, 开发板上是有一个, 不好拆下来吧... MOS管串进去总觉得不放心, 呵呵
然后我就取了个折中, 只需要在以后的程序代码开头加上一句 IAP_CONTR |= (0x01<<6就可以了
这条语句是用来设置单片机复位以后从ISP区启动的, 所以当STC15F104E从串口检测到合法的下载命令后, 就可以发一个复位信号给目标单片机, 然后目标单片机就复位从ISP区启动了~
程序里面使用了掉电状态, 平常所有IO口全部是高阻, 所以功耗很低, 基本上不会给USB带来什么负担 使用的时候就是用你原来的下载电路, 然后目标单片机引出几个脚和这个东东连接
其实他的工作就是监听串口的信息
当检测到有下载信号的时候, 它就可以复位目标单片机了 不用冷启动,直接复位就可以下载吗? 还要延时的,收到串口发来的消息后延时一秒左右再软复位从ISP下载区启动,要不就有可能两边下载时间不匹配了,导致下载失败 回复【2楼】hefq 何访贤
-----------------------------------------------------------------------
//███████████████将这段代码嵌入到主函数的初始化中████████████████
if(PCON&0x10)PCON &= 0xEF; //如果POF位=1,将POF位清0。
else {PCON |= 0x10; IAP_CONTR=0x60;} //如果POF位=0,将POF位置1。软复位从ISP监控区启动。
//█████████████████████████████████████████████████████████████
//说明:开始烧写程序时,按一下单片机的“复位键”就可以下载程序。
PS:汗,以前一直以为提示“请给MCU上电…”才可以冷启下载程序,最近才明白点击“下载”后就可以了冷启 回复【4楼】BXAK
-----------------------------------------------------------------------
嗯, 我一开始使用的就是类似这种方法, 加一个STC15F104E来监视串口的话就免去了手动按复位键的环节了 回复【3楼】mcu_mouse
还要延时的,收到串口发来的消息后延时一秒左右再软复位从isp下载区启动,要不就有可能两边下载时间不匹配了,导致下载失败
-----------------------------------------------------------------------
不懂....
我测试了好多次了, 没什么出现什么问题呀... mark 回复【3楼】mcu_mouse
还要延时的,收到串口发来的消息后延时一秒左右再软复位从isp下载区启动,要不就有可能两边下载时间不匹配了,导致下载失败
-----------------------------------------------------------------------
你可能误解了,
我的方案应该不算是使用软件复位
是由STC15F104E控制 目标单片机复位
你说的两边下载时间不匹配的问题, 我不太理解? mark 回复【9楼】losting
mark
----------------------------------------------------------------------- 可以的,不用断电,直接按复位键,延时要久一点啊 我汗,你这板子我也有。。。。LZ怎么残忍地把彩屏卸下来了。。LZ有没有彩屏的例程可以提供的? 回复【12楼】chigonxwt
-----------------------------------------------------------------------
呵呵, 这个都被你发现了
我是觉得彩屏嵌死在板上太浪费了,
所以想卸下来单独做一个模块, 不过卸的时候因为我不懂所以有些损坏...
彩屏的资料我没有, 这位大哥的帖子里有例程代码
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5203339&bbs_page_no=1&search_mode=4&search_text=Pony279&bbs_id=9999 楼主,你的51开发板上的屏怎么被你拆掉了?那个屏怎么用啊,我也用的是这个板子 方式错误,STC有些设定必须冷启动,否则有些动作会异常!!!!!!!!!!!!!!!!!!!!! 有个和楼主一样的单片机,呵呵,但是现在闲置了 回复【15楼】j-link
-----------------------------------------------------------------------
比如呢?
欢迎指正! 回复【14楼】pkjapan
-----------------------------------------------------------------------
哈, 我是强拆的, 所以有点损坏了, 不要学我...
应该是要用到热风枪比较好 回复【18楼】Pony279 霍斯
-----------------------------------------------------------------------
热风枪好像不好...
拆焊条那里还是应该用烙铁头吧...
我没经验, 不清楚 回复【17楼】Pony279霍斯
回复【15楼】j-link
-----------------------------------------------------------------------
比如呢?
欢迎指正!
-----------------------------------------------------------------------
設定 LV 判斷腳位,如果沒重新開關電源永遠無法起用。(第一次)
還有很多問題,STC有些設定都必須重起,否則.... 回复【20楼】nono2000
-----------------------------------------------------------------------
谢谢你的指出, 我看了STC的datasheet, 你想说的是这个吧? 不过软件上也写的很清楚了, 是下次冷启动....所以就算手动冷启动下载完程序后还是要再冷启动的吧?所以我这个方案木有神马问题呀
不过我感觉用MOS管的方案还是比较好的(如果真的有datasheet上写的几个m欧的导通电阻的话...), 如果可以判断出什么时候下载完程序了就可以再次冷启动开发板, 呵呵...
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_708073VKEZ83.jpg
我已经把那小玩意儿挂在我的开发板上调过几个程序了, 挺方便的呀~ http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5203339&bbs_page_no=1&search_mode=4&search_text=Pony279&bbs_id=9999
这位网友的开发板上用的就是MOS管的方案
不过我有点怀疑原理图上的那个PMOS管画反了(见45楼), 不知各位能否给我解释一下(不要用一句看模电书打发我, 我就是看了模电书才怀疑的...) 看多了觉得糊涂了。俺希望是前者,因为15f100系列没有硬件串口,自动isp不了,
a 到底是给stc15F104E,可以自己(就一片)做到不断电下载呐?
还是
b 用一片stc15f给其它stc芯片做不断电下载??
貌似是后者。。。。 回复【23楼】zaixian 来来
-----------------------------------------------------------------------
呵呵, 是后者...
不好意思, 我没解释清楚... 回复【24楼】Pony279 霍斯
-----------------------------------------------------------------------
明白了。
,后者的话,对偶来说就没多大意义,呵呵,
习惯了初期占用串口,auto-isp调试stc,最后收工的时候,改一下串口即可。 回复【21楼】Pony279霍斯
回复【20楼】nono2000
-----------------------------------------------------------------------
谢谢你的指出, 我看了stc的datasheet, 你想说的是这个吧? 不过软件上也写的很清楚了, 是下次冷启动....所以就算手动冷启动下载完程序后还是要再冷启动的吧?所以我这个方案木有神马问题呀
不过我感觉用mos管的方案还是比较好的(如果真的有datasheet上写的几个m欧的导通电阻的话...), 如果可以判断出什么时候下载完程序了就可以再次冷启动开发板, 呵呵...
我已经把那小玩意儿挂在我的开发板上调过几个程序了, 挺方便的呀~
-----------------------------------------------------------------------
STC内部有一个严重bug,必须使用lv功能,否则程序power down时会乱跑,STC官方工程师千交代万交代,不对外公开^.^
如果你的程序有修改开机init...建议最好冷启动.包括uart...等等设定,所以干脆通通冷启动比较好 回复【26楼】j-link
-----------------------------------------------------------------------
晕...
我以后还是做个MOS管的好了... 回复【26楼】j-link
-----------------------------------------------------------------------
其实我不太明白你说的那个BUG
有没有实际测试的内容? 发条链接给我看看吧 回复【28楼】Pony279霍斯
回复【26楼】j-link
-----------------------------------------------------------------------
其实我不太明白你说的那个bug
有没有实际测试的内容? 发条链接给我看看吧
-----------------------------------------------------------------------
你有没有发现很多人反应:STCflash被乱写或是外部RAM遭乱写或是掉电时突然乱动作...其实都是没有起动外部低电压RESET判断导致!!!
这个问题,别的厂牌8051不会发生,为独 STC 必须要加入""官员不说""(因为会影响 44PIN以下包装产品)
因为 STC 的RESET脚并不是真正的CPU RESET脚,真正RESET脚是LV.
所以喔,你如果使用 STC 产品,如果没设定LV起用...你的产品保证被退货^.^(不要跟别人说是STC官方讲的喔) 回复【29楼】j-link
-----------------------------------------------------------------------
或许吧,
我玩过STC90的, 玩过STC12C5A60S2的, 也玩过STC15的, 也算是调过挺多程序的了, 不过还没受到这些BUG的影响
这种东西, 最好有个人发个专帖, 有完整的测试过程和测试数据才能让人相信的,
在坛子里也看了挺多人骂STC的, 可是我就没看到有发完整的测试过程和测试数据的, 光骂是不管用的, 要是真有人发了, 那才是给STC的致命一击
都在骂, 都在用...现在市场上的51开发板, 也基本上是STC的 回复【30楼】Pony279霍斯
回复【29楼】j-link
-----------------------------------------------------------------------
或许吧,
我玩过stc90的, 玩过stc12c5a60s2的, 也玩过stc15的, 也算是调过挺多程序的了, 不过还没受到这些bug的影响
这种东西, 最好有个人发个专帖, 有完整的测试过程和测试数据才能让人相信的,
在坛子里也看了挺多人骂stc的, 可是我就没看到有发完整的测试过程和测试数据的, 光骂是不管用的, 要是真有人发了, 那才是给stc的致命一击
都在骂, 都在用...现在市场上的51开发板, 也基本上是stc的
-----------------------------------------------------------------------
实验很早就做过了也发表过了,你可以在STC起用flash或是外挂其他的RAM,然后每天开开关关上千次(设计一个简单定时开关)
你就知道了^.^....... 回复【31楼】j-link
-----------------------------------------------------------------------
这个寒假我是有可能做个外挂RAM的...
到时候可能就知道了 再Mark 顶一下!!! 好方法借鉴下{:biggrin:} 留个痕迹走人 这个方法就不用开关再启动就能下载程序了?
页:
[1]