用户ISP上位机软件如何实现?
使用STC的IAP系列单片机开发自己的ISP程序里提到上位机演示程序是基于MFC的对话框项目,上位机程序的核心模块是基于类CStcIsp_UserDlg的一个静态线程函数“static UINT Download(LPVOID pParam),
请问能够提供这个源码吗?或者开发这个上位机软件,应该参考那些资料?谢谢!
上位机不提供的,看 VC, C#
或者,不需要自己折腾了,用发布项目程序
我的一个项目封装了多个相同模块,以地址区分,希望可以通过一个串口,更新对应地址模块的程序。这种做法可行吗?能不能提供封装好的DLL库,可以让我调用做自己是ISP呢?如果我想自己实现这个功能,哪里可以找到如何把数据写入STC8H芯片的Flash程序空间写入的资料?
很好,明白了,谢谢! 强烈要求开放这个的源码,或提供通信协议。 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的,这是为啥啊,懂的朋友解析一下。 自己写个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]