找回密码
 立即注册
查看: 1850|回复: 7

用户ISP上位机软件如何实现?

[复制链接]

1

主题

3

回帖

147

积分

注册会员

积分
147
发表于 2023-4-17 16:32:57 | 显示全部楼层 |阅读模式
使用STC的IAP系列单片机开发自己的ISP程序里提到上位机演示程序是基于MFC的对话框项目,
上位机程序的核心模块是基于类CStcIsp_UserDlg的一个静态线程函数“static UINT Download(LPVOID pParam),
请问能够提供这个源码吗?或者开发这个上位机软件,应该参考那些资料?谢谢!


Screenshot 2023-04-17 162924.png
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2023-4-17 16:42:54 | 显示全部楼层
上位机不提供的,看 VC, C#

或者,不需要自己折腾了,用发布项目程序
1.png

回复

使用道具 举报 送花

1

主题

3

回帖

147

积分

注册会员

积分
147
发表于 2023-4-17 21:23:30 | 显示全部楼层
我的一个项目封装了多个相同模块,以地址区分,希望可以通过一个串口,更新对应地址模块的程序。这种做法可行吗?能不能提供封装好的DLL库,可以让我调用做自己是ISP呢?如果我想自己实现这个功能,哪里可以找到如何把数据写入STC8H芯片的Flash程序空间写入的资料?
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 2023-4-17 21:40:37 | 显示全部楼层
1.png

2.png

3.png

4.png


回复

使用道具 举报 送花

1

主题

3

回帖

147

积分

注册会员

积分
147
发表于 2023-4-17 22:42:36 | 显示全部楼层
很好,明白了,谢谢!
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-31 18:09:26
已绑定手机

0

主题

2

回帖

14

积分

新手上路

积分
14
发表于 2025-7-31 18:09:26 | 显示全部楼层
强烈要求开放这个的源码,或提供通信协议。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-07-31 18:09:26
已绑定手机

0

主题

2

回帖

14

积分

新手上路

积分
14
发表于 2025-7-31 18:15:38 | 显示全部楼层
23 06 A0 00 00 00 00 00 24 13 23 06 A3 00 00 00 00 00 24 10

23 86
A2 00 00 00 00 80 CA 1B C0 D1 7E 37 00 08 7D 23
0B 24 7A 27 00 08 BE 34 00 C8 48 09 6D 33 7A 37
00 08 63 A0 FF D0 D1 DA 1B 32 9A FE 00 45 A2 B2
E4 33 78 FA 7E 34 CD 34 7E 24 12 AB 90 1F FC 79
3E 00 02 1B EA 20 75 C7 20 80 E3 75 E9 00 75 EA
00 A9 D7 BA 75 96 00 75 95 00 75 B2 00 75 B1 00
7E 34 FE 13 7E 24 00 7E 7E 1B B0 44 04 7A 1B B0
75 89 00 A9 D7 8E 75 8A 40 75 8C A2 D2 8C D2 A9
9F 11 90 1F FC 79 24 77

23 86
A2 00 00 00 80 80 3E 00 02 1B EA 20 7A 37 00 08
D2 AF AA FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF 24 BB

23 86
A2 00 01 10 00 80 02 10 0F FF FF FF FF FF FF FF
FF 8A FE 00 00 75 84 01 7E 44 04 1F E4 7A 49 B0
1B 44 78 F9 7E F8 00 09 8A FE 00 24 FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF 24 88

23 06 A4 00 00 00 00 00 24 0F


接收
40 00 02 01 00 24 99
40 00 00 24 9C 40 00 00 24 9C 40 00 00 24 9C 40 00 00 24 9C

通过抓包,勉强能懂一点。不解的是中间FFFF的数据是不用发送的,另外发过去的地址是从0000开始的,看isp接收也没有 加上fe0000。但读是加了fe0000的,这是为啥啊,懂的朋友解析一下。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:48
  • 最近打卡:2025-08-21 22:43:07
已绑定手机

49

主题

341

回帖

1238

积分

金牌会员

积分
1238
发表于 2025-8-2 15:54:26 来自手机 | 显示全部楼层
自己写个bootloader,再在电脑上写个串口通信程序。
简单写个不复杂。python网上有教程。c++问deepseek。
底下这个代码devc++应该是能直接编译过的。改改用就好了

#include <windows.h>
#include <iostream>

HANDLE hSerial;

bool openSerialPort(const char* portName, int baudRate) {
    hSerial = CreateFile(portName,
                        GENERIC_READ | GENERIC_WRITE,
                        0,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        NULL);

    if (hSerial == INVALID_HANDLE_VALUE) {
        std::cerr << "Error opening serial port\n";
        return false;
    }

    DCB dcbSerialParams = {0};
    dcbSerialParams.DCBlength = sizeof(dcbSerialParams);
    if (!GetCommState(hSerial, &dcbSerialParams)) {
        std::cerr << "Error getting serial port state\n";
        return false;
    }

    dcbSerialParams.BaudRate = baudRate;
    dcbSerialParams.ByteSize = 8;
    dcbSerialParams.StopBits = ONESTOPBIT;
    dcbSerialParams.Parity = NOPARITY;
    if (!SetCommState(hSerial, &dcbSerialParams)) {
        std::cerr << "Error setting serial port state\n";
        return false;
    }

    COMMTIMEOUTS timeouts = {0};
    timeouts.ReadIntervalTimeout = 50;
    timeouts.ReadTotalTimeoutConstant = 50;
    timeouts.ReadTotalTimeoutMultiplier = 10;
    timeouts.WriteTotalTimeoutConstant = 50;
    timeouts.WriteTotalTimeoutMultiplier = 10;
    if (!SetCommTimeouts(hSerial, &timeouts)) {
        std::cerr << "Error setting timeouts\n";
        return false;
    }

    return true;
}

void writeData(const char* data) {
    DWORD bytesWritten;
    WriteFile(hSerial, data, strlen(data), &bytesWritten, NULL);
}

std::string readData() {
    char buffer[256];
    DWORD bytesRead;
    ReadFile(hSerial, buffer, sizeof(buffer), &bytesRead, NULL);
    return std::string(buffer, bytesRead);
}

void closeSerialPort() {
    CloseHandle(hSerial);
}

int main() {
    if (openSerialPort("COM3", CBR_9600)) {
        writeData("Hello Serial Port");
        std::string response = readData();
        std::cout << "Received: " << response << std::endl;
        closeSerialPort();
    }
    return 0;
}
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 00:08 , Processed in 0.126523 second(s), 88 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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