搜索
bottom↓
回复: 18

自制串口下载器,欺骗ICCAVR,取代STK500

[复制链接]

出0入0汤圆

发表于 2009-5-16 12:17:56 | 显示全部楼层 |阅读模式
上位机采用VB编程,首先看看ICCAVR和VB程序的关系。
1.新建VB工程,form1上添加一个文本框架Text1,在Form_Load()里只有一句Text1.Text = Command,再生成EXE文件(例如取名为test.exe)。

(原文件名:图1.JPG)
2.在ICCAVR里打开ISP DIALOG,选择SK-500,在ISP Option里选中自动下载,找到刚才生成的EXE文件(test.exe)的路径,还可以选择串口和波特率。

(原文件名:图2.JPG)

(原文件名:图3.jpg)
3.一切OK之后,按下F9编译工程,得到如下结果:
EXE被启动,文本框中的数据为: -z -dATMega8 -ccom1  

(原文件名:图4.jpg)
此时ICCAVR还没完呢,点击test.exe的关闭按钮,再看test.exe又被启动了,此时得到的命令是:
-z -dATMega8 -ccom1  -e -pf -ifC:\DOCUME~1\Administrator\MYDOCU~1\ICC_WO~1.10\ROOT\HEX\ROOT.hex

(原文件名:图5.jpg)
此时ICCAVR仍然还没完呢,点击test.exe的关闭按钮,再看ICCAVR 提示说
ISP programming done.

(原文件名:图6.jpg)

因此我们可以来个总结:
ICCAVR调用EXE文件并传入命令参数,命令以“-”开头,两条命令间以空格或TAB隔开。
-z                :不知是什么命令
-e                :也不知是什么命令
-pf                :还是不知是什么命令
-d                :选择器件(ATMega8)
-c                :选择串口(com1)
-if                :文件路径(C:\DOCUME~1\Administrator\MYDOCU~1\ICC_WO~1.10\ROOT\HEX\
ROOT.hex)

似乎没有见到波特率的命令,不知是不是ICCAVR的BUG,总之对我们有用的就两个命令:-c和-if。

4.现在来改进一下VB程序:
添加文本框text2,multiline属性为true,scrollbars为2,该文本框就能多行显示且带滚动条。

(原文件名:图7.jpg)
窗体代码添加三个函数:
AddMsg                :字符串追加到文本框
ExeCmd                        :执行一条命令
AnalyzeCmd        :将命令进行分解

在Form_Load()函数中添加Call AnalyzeCmd(Command)。




全部代码如下:
'字符串追加到文本框
Public Function AddMsg(strmsg As String)
Dim lenms   As Long
lenms = Len(Text2.Text)
Text2.SelStart = lenms
Text2.SelText = strmsg
End Function
'执行命令
Private Function ExeCmd(ByVal Cmd As String)
Dim Cmd1, Cmd2 As String
Dim CmdLen As Long

AddMsg Cmd & vbCrLf

CmdLen = Len(Cmd)

If CmdLen >= 2 Then
    Cmd1 = Mid(Cmd, 1, 2)
    Select Case Cmd1
        Case "-c"                               '命令开头为"-c"
            If CmdLen >= 3 Then
                Cmd2 = Mid(Cmd, 3, CmdLen - 2)
                MsgBox "you select the com port is:" & Cmd2
            End If
        Case "-i"
            If CmdLen >= 4 Then
                If Mid(Cmd, 3, 1) = "f" Then    '命令开头为"-if"
                    Cmd2 = Mid(Cmd, 4, CmdLen - 3)
                    MsgBox "the file path is:" & Cmd2
                End If
            End If
    End Select
End If

End Function


'将命令进行分解
Private Function AnalyzeCmd(ByVal CmdLine As String)
Dim Ch, CmdLen, Cmdn As String
Dim i As Long

CmdLen = Len(CmdLine)

If CmdLen < 1 Then
    Exit Function
End If

For i = 1 To CmdLen
    Ch = Mid(CmdLine, i, 1)   '以一次一个字符的方式取出命令行参数。
    If (Ch <> " " And Ch <> vbTab) Then '检测是否为   space   或   tab。
        Cmdn = Cmdn & Ch
    Else                        '命令结束
        If Len(Cmdn) > 0 Then   '排除连续空格的情况
            ExeCmd Cmdn         '执行命令
            Cmdn = ""           '清除本次得到的命令
        End If
    End If
Next i

If Len(Cmdn) > 0 Then           '结尾没有空格的情况
    ExeCmd Cmdn                 '执行命令
    Cmdn = ""
End If

End Function

Private Sub Form_Load()
Text1.Text = Command
Call AnalyzeCmd(Command)
End Sub


5.重复第2步,ICCAVR完成编译后将看到如下结果:
得到了串口号

(原文件名:图8.jpg)
命令被分成一行一行地显示在text2中

(原文件名:图9.jpg)
得到hex 文件路径

(原文件名:图10.jpg)

(原文件名:图11.jpg)
恭喜你,成功了!

6.将命令行的处理添加到自己编写的串口下载程序中(STK_V74上位机),改下ICCAVR中STK500的路径就OK了。
因为我不知道VB程序怎么向ICCAVR返回信号(据说要用管道),所以只能通过气球的方式来显示信息,还望高人指点。

(原文件名:图14.jpg)


电路参考下图,晶振可不用外接,波特率设低一点就行了。

(原文件名:图12.jpg)
电平转换还可用分立元件:

(原文件名:图13.jpg)

自制串口下载器全部资料及源代码:
点击此处下载 ourdev_445292.rar(文件大小:12.57M) (原文件名:STK_V74.rar)

没装VB的电脑要在STK_V74上位机\包\Support下运行STK7_4.exe

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-5-16 12:22:31 | 显示全部楼层
`好像很有趣,标记一下

出0入0汤圆

发表于 2009-5-16 12:26:19 | 显示全部楼层
Private Sub Form_Load()
Text1.Text = Command
End Sub

这段代码怎么移植到C++?

出0入0汤圆

发表于 2009-5-16 13:20:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-16 14:03:25 | 显示全部楼层
command 在 main函数的argc, argv两个参数里
如果在VC中使用,用  CCommandLineInfo   cmdInfo;  ParseCommandLine(cmdInfo);这两行调出,详见MSDN

出0入0汤圆

发表于 2009-5-16 15:00:59 | 显示全部楼层
好象挺有意思的
有时间研究一下


楼主高人

出0入0汤圆

发表于 2009-5-16 15:05:10 | 显示全部楼层
不是一般的高呀!!!标记!

出0入0汤圆

发表于 2009-5-16 16:07:40 | 显示全部楼层
C语言本来就有入口参数就可以用...

int main(int argc, char* argv[])
{
    int i;
    for(i=0;i<argc;i++)
    {
        printf("%s\n",argv);
    }
    return 0;
}
argc是参数个数(以空格或TAB分隔)
argv[0] 是编译出的exe文件运行时路径
argv[1] ~ argv[argc-1]就是不同的参数了...
可以用printf打印出来看
==================
加个system("pause");可以调用外部命令等待按键后再退出...

出0入0汤圆

发表于 2009-5-19 13:41:48 | 显示全部楼层
抽空弄个试试

出0入0汤圆

发表于 2010-4-21 22:47:13 | 显示全部楼层
很感兴趣,标记一下,方便查找。

出0入4汤圆

发表于 2010-4-21 22:57:01 | 显示全部楼层
不错.

出0入0汤圆

发表于 2010-4-23 08:46:06 | 显示全部楼层
记号!

出0入0汤圆

发表于 2010-4-23 09:57:57 | 显示全部楼层
这个应该给条裤头

出0入70汤圆

发表于 2010-4-23 10:08:11 | 显示全部楼层
想知道原来程序是怎么回传信息给ICCAVR不难

找对工具就知道传信息的格式了

出0入0汤圆

发表于 2010-4-23 12:47:32 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-4-23 13:06:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-5-10 00:53:27 | 显示全部楼层
很棒,记录一下

出0入0汤圆

发表于 2013-5-10 01:00:49 | 显示全部楼层
这个还是要标记,不能收藏的么。

出0入0汤圆

发表于 2013-5-10 13:12:13 | 显示全部楼层
大哥,偶像啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 23:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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