打印
[国产单片机]

揭示STC-ISP的一个兼容性问题

[复制链接]
3806|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chunxx|  楼主 | 2010-7-24 13:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
俺下载过的STC单片机也过几K了,至今没有一片写不了而报废的,芯片的质量还是不错的。不过经常遇到联不上的情况,也就是出现“重新给单片机上电....”就没反应了,特别是开发中容易遇到。板上查查,换个串口什么的也就混过去了,以前的记不得具体什么原因、怎么解决的了。
开始最多的是板上振荡电路不工作,这个好理解,但开发调试中也遇到,上次能下载的,过一下就不能了,这个就不是板的问题了。前一段在调程序的时候老遇到,总结出了一个规律:如果PC机上其他程序用了一下串口,退出,再用STC-ISP,有80%的概率联不上,这时重新给单片机上电100次都没有用的,只有重新启动PC。这个“其他程序”不包括Window本身的“超级终端”,而这时用其他程序打开串口、通信都是正常的!89系列,12系列,以及3.xx到4.xx的版本都是如此!
老是重新启动PC不是办法,偶的解决方法是找一个USB转串口给STC-ISP专用,没时间理睬它。想来也恼火,只能用处的串口,真牛。
前两天调程序又遇到这个情况,正好这个串口应用程序是自己写的,虽然已经很多年了,但源码还在,一怒之下打开源程序,一个个调整串口配置,看看有什么古怪,终于找到原因:串口DCB设置中,如果用了:
    dcb.fAbortOnError = true;
执行完自己的程序,正常关闭串口退出,STC-ISP就再也找不到单片机了。设置成dcb.fAbortOnError = false就没有问题,100%灵验。
仔细考虑一下,也就是STC-ISP只能在AbortOnError=false时才能用,但它打开串口时又不自己设置DCB中的这个项,而是用当前Default配置。是不知道,还是高级技巧?
PC机的串口程序已经很久没有看过了,只是直接用,但以前的经验还作为注释放在源程序中。实际应用,如果与串口通信的设备要经常开关机的话,PC端必须考虑dcb.fAbortOnError这个项,否则在串口打开的情况下,设备断电重开,就会产生CE_BREAK/CE_FRAME错误,ClearCommError()可能无法清除,真是串口虽然打开,WriteFile数据确发不出去。
把自己的程序,在关闭串口时增加一个设dcb.fAbortOnError = false也就能和STC-ISP一起用了,但别人的程序就没办法了。

相关帖子

沙发
yczhang| | 2010-7-25 12:14 | 只看该作者
我怎么没遇到过这个问题呢?

使用特权

评论回复
板凳
McuPlayer| | 2010-7-25 22:32 | 只看该作者
谢谢楼主分享,有机会实验一下

使用特权

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

本版积分规则

427

主题

458

帖子

4

粉丝