micromotion 发表于 2023-4-17 16:32:57

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

使用STC的IAP系列单片机开发自己的ISP程序里提到上位机演示程序是基于MFC的对话框项目,
上位机程序的核心模块是基于类CStcIsp_UserDlg的一个静态线程函数“static UINT Download(LPVOID pParam),
请问能够提供这个源码吗?或者开发这个上位机软件,应该参考那些资料?谢谢!


神农鼎 发表于 2023-4-17 16:42:54

上位机不提供的,看 VC, C#

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


micromotion 发表于 2023-4-17 21:23:30

我的一个项目封装了多个相同模块,以地址区分,希望可以通过一个串口,更新对应地址模块的程序。这种做法可行吗?能不能提供封装好的DLL库,可以让我调用做自己是ISP呢?如果我想自己实现这个功能,哪里可以找到如何把数据写入STC8H芯片的Flash程序空间写入的资料?

神农鼎 发表于 2023-4-17 21:40:37










micromotion 发表于 2023-4-17 22:42:36

很好,明白了,谢谢!

tqingguang6688 发表于 2025-7-31 18:09:26

强烈要求开放这个的源码,或提供通信协议。

tqingguang6688 发表于 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的,这是为啥啊,懂的朋友解析一下。

_NCY_ 发表于 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;
    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;
}
页: [1]
查看完整版本: 用户ISP上位机软件如何实现?