打印

自己做STC在线下载,可以实现485接口

[复制链接]
11978|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
winds|  楼主 | 2007-9-21 19:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用过STC下载程序的人都知道,STC89系列芯片无法实现在485下面下载程序,问他们技术说,是无法知道485切换脚在哪一个脚。
最近因为必须在485上面做在线下载程序,所以做了一个简易的引导程序。发现其实实现起来是非常简单的,只是宏晶不去做而已。我做的引导程序只有一个条件,就是485总线在复位后处于接收状态
我的实现方法是:
一。下载通讯一般分2部分,1部分是握手部分,另外一部分是数据下载部分
二。握手时候,采用一个简单的通讯包格式来握手
大家知道,宏晶的握手是采用PC机不断的用一个波特率发送数据“0x7F”来实现的,这种方式的优点是快,编程简单。但是对于我介绍的这种方法来说是不适合的。我采用的是PC端不断的发送" STX + 端口号 + ETX" 共3个字节的数据包进行握手
其中端口编号采用 1代表 P0.0 ,2代表 P0.1, 3代表P0.2......... 0 或者33以上的数据代表不用切换,至于STX,和ETX用什么,看大家的需要了。一般是和大家正常通讯的适合的包开始和包结束一样的
三。单片机引导程序接收到 STX+端口+ETX包后,发送一个应答包,这个包一般也是 STX + 状态 + ETX ,这里状态代表什么,我是直接固定 03了。。因为,我的波特率是固定的,一般不用回答什么状态之类的
当然,发送的时候,就必须做一个switch(端口号) case 1 : P0.1=0; break;.......
简单就说这些。希望对大家编程有帮助

相关帖子

沙发
z_no1| | 2007-9-21 22:47 | 只看该作者

我这几天的一个想法

我也在用STC12C5412写一个485的程序,我的问题是如何把程序直接烧到板上,为可靠,我的器件都是直接焊上的,除了485,没法,焊上了我就没法用232调试了。其实可以这样,确保上电后485是接收。这不难,IO接个下拉就好。把485的A,B接到一个小板上,用一个485转换成CMOS,把半双工的485当了单向的RXD,另从板上接出TXD,转232接PC。做一个5芯的插座,VCC5V,485A、485B、TXD、GND。就可以下程序了。拔掉插头,不象用跳线。没有后遗症。仅是想法,还没做试验。

使用特权

评论回复
板凳
姑苏孙利| | 2007-9-22 12:51 | 只看该作者

赶紧试一下后分享一下拉!

使用特权

评论回复
地板
古道热肠| | 2007-9-23 11:57 | 只看该作者

应该只有用自己的固件更新程序才能实现

  因为2楼的想法虽然能接收,但转换到发送时,RS485要切换才能实现的。
楼主的方法是可行了,不妨贴出与大家共享。

使用特权

评论回复
5
lixun00| | 2007-9-23 13:21 | 只看该作者

不太可能

使用特权

评论回复
6
21Embedded| | 2007-9-23 14:51 | 只看该作者

晕菜

一只485,加两只与非门就搞定问题了

使用特权

评论回复
7
z_no1| | 2007-9-23 17:31 | 只看该作者

re:古道热肠

我的设计思想是把半双工的485在接上ISP插座时只做接收用,在程序中肯定有状态会把485改成发送状态,这样就会在两个485之间总线冲突,但不要紧,我的上位机又不从485里接收,这个设计用途和楼主的不一样,LZ是用于已有代码的MCU更新代码,我的用于还没有代码的MCU下载代码。

使用特权

评论回复
8
winds|  楼主 | 2007-9-24 02:14 | 只看该作者

经过几天不断的修改程序,又有了一些新的体会

1。STC芯片之所以采用 0x7F握手,是有其非常高明的地方的。用过宏晶下载程序的都知道,不管你用什么晶振,PC端软件总是能够准确的提示出单片机的晶振的频率是多少,这开始让我百思不得其解,因为如果单片机自己本身去判断晶振频率,我想不出有什么好的方法。但是有1天联想到STC的握手信号的时候,豁然开朗。。我们知道 0x7F在串口信号上表现出来的就是一个占空比很短的脉冲,通过对脉冲计数,就可以得出晶振的频率,进而可以从容的设定通讯的合适的波特率。 我猜想宏晶是这么做的。。开机的时候,把 RX脚作为普通IO脚,对其进行计数,测算出晶振频率后,再把RX和TX脚作为普通的串口脚作为通讯
因此,我们可以这么对原来的程序进行修改
开始的时候,PC发送 0x7F作为握手信号,单片机启动后,判断晶振,设定波特率后,马上用0x1作为应答.然后PC端再按我开始说的用 “STX + 切换脚 + ETX”数据包进行2次握手,握手成功后再进行程序下载
2。对于我们普通的用户来说,我们不是做通用的下载程序,我们只是做自己专用的下载程序,上面说的用0x7F作为判断波特率的方式,不一定好用。因为我们的波特率一般相对比较固定,不是9600,就是19200。。自成标准。用7F作为波特率的判断方式,对经过一些以太网转485转换器的电路来说,不大好用,因为这些转换器,大都需要一个包头和包尾,并且包与包之间必须有一定时间间隔作为识别。快速发送单字节包在一些转换器上不容易通过。基于这个考虑,我个人意见还是按照 “STX + 切换脚 + ETX”数据包进行1次握手
3。在实际过程中,我发现我做的各个系统合起来有3种波特率,分别是4800,9600和19200。怎样才能做成1个引导程序适应这几种设备的是我考虑很多的问题。后来我对握手信号做了些更改,增加入波特率,这样我让PC端可以指定下载数据时候的波特率,让系统做到下载最块
所以现在最终的版本改成握手信号是 STX + 切换脚 + 定时器参数(比如0xFA)等 + EXT 。
我自己的引导程序没有做 自动判断波特率,因为我觉的我不是一个通用的芯片提供商,我的程序是为自己服务的,做这个没有必要,更多的精力是放在主程序如何通过串口命令,自动跳转到引导程序上,实现远程下载应用程序
如果那位朋友有时间,倒是可以做做这方面的工作。。
上面所说的方法,其实不单单针对STC单片机,SST和飞利浦的单片机的IAP功能实现的方法也是一样的,更改的只是写FLASH部分的程序而已
4。现在遇到的问题是,如果更改STC单片机的配置(如6倍速,外部内存等),这个问题好像说明书上没有提供,哪位知道的能不能告诉在下。。万分感谢

使用特权

评论回复
9
古道热肠| | 2007-9-26 13:27 | 只看该作者

不错

使用特权

评论回复
10
jerkoh| | 2008-7-12 13:50 | 只看该作者

re

请问下,STC进入ISP引导区下载程序,在握手时发送DI,接收RE脚置高和拉低怎么控制啊
在ISP时IO口是不能受控的呀

使用特权

评论回复
11
wangjun0415| | 2013-3-7 09:31 | 只看该作者
jerkoh 发表于 2008-7-12 13:50
请问下,STC进入ISP引导区下载程序,在握手时发送DI,接收RE脚置高和拉低怎么控制啊在ISP时IO口是不能受控 ...

我也觉得这里不行

使用特权

评论回复
12
ansen520| | 2013-3-8 09:26 | 只看该作者
485按位硬件换向可以实现

使用特权

评论回复
13
yan_junm| | 2013-9-15 10:10 | 只看该作者
我是这样实现RS48下载程序的,我用的是STC12C5616AD:
一:将RS485电路改为用TX信号自动切换收发器.二:STC-ISP软件选择V6.58B版本。三:在STC-ISP中选择合适的下载波特率:最低波特率4800,最高波特率为:9600.详细介绍我已写了一文件上传百度文度

使用特权

评论回复
14
kingxw| | 2013-9-16 15:29 | 只看该作者
请继续努力

使用特权

评论回复
15
xvezhe| | 2014-4-14 09:31 | 只看该作者
可以贴出通讯部分的代码。。。最近也是碰到485不能下载,PC对232就可在线升级

使用特权

评论回复
16
coody| | 2014-4-14 11:07 | 只看该作者
15系列的可以用485下载

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

90

帖子

2

粉丝