![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем здравствуйте!!!
У меня задача такая:мне нужно написать программу на Delphi 7. Чтобы была кнопочка,при нажатии которой на контроллере STM32F407 защигался светодиод.Если кто-нидь сталкивался с этим,подскажите,пожалуйста,хоть в какую сторону копать.А если скинете код,буду очень благодарна!!! ![]() |
|
#2
|
||||
|
||||
|
Если USB как COM порт в системе виден - то достаточно просто.
|
|
#3
|
|||
|
|||
|
Цитата:
Последний раз редактировалось Kateee, 27.01.2013 в 21:36. |
|
#4
|
||||
|
||||
|
Если устройство HID - то как-то так:
Код:
procedure TfrmMultiMeter.tbConnectClick(Sender: TObject);
var
devSet: integer;
i, uBytes: integer;
spdt: SP_DEVICE_INTERFACE_DATA;
begin
if connected then
begin
MessageBoxA(0, 'Вы уже подключены к устройству.', 'Ошибка!', 0);
exit;
end;
hHid := LoadLibrary('Hid.dll');
if hHid = 0 then
begin
MessageBoxA(0, 'Не удалось загрузить библиотеку Hid.dll', 'Ошибка!', 0);
exit;
end;
hSetupAPI := LoadLibrary('SetupAPI.dll');
if hSetupAPI = 0 then
begin
DoDisconnect();
MessageBoxA(0, 'Не удалось загрузить библиотеку SetupAPI.dll',
'Ошибка!', 0);
exit;
end;
HidD_GetHidGuid := GetProcAddress(hHid, 'HidD_GetHidGuid');
SetupDiGetClassDevsA := GetProcAddress(hSetupAPI, 'SetupDiGetClassDevsA');
SetupDiDestroyDeviceInfoList := GetProcAddress(hSetupAPI,
'SetupDiDestroyDeviceInfoList');
SetupDiEnumDeviceInterfaces := GetProcAddress(hSetupAPI,
'SetupDiEnumDeviceInterfaces');
SetupDiGetDeviceInterfaceDetailA := GetProcAddress(hSetupAPI,
'SetupDiGetDeviceInterfaceDetailA');
if (not assigned(HidD_GetHidGuid)) or (not assigned(SetupDiGetClassDevsA)) or
(not assigned(SetupDiDestroyDeviceInfoList)) or
(not assigned(SetupDiEnumDeviceInterfaces)) or
(not assigned(SetupDiGetDeviceInterfaceDetailA)) then
begin
DoDisconnect();
MessageBoxA(0, 'Не удалось получить адрес функции.', 'Ошибка!', 0);
exit;
end;
HidD_GetHidGuid(@Hg);
devSet := SetupDiGetClassDevsA(@Hg, 0, 0, $12);
if devSet = -1 then
begin
DoDisconnect();
MessageBoxA(0, 'Не получен список устройств.', 'Ошибка!', 0);
exit;
end;
i := 0;
spdt.cbSize := sizeof(spdt);
while SetupDiEnumDeviceInterfaces(devSet, 0, @Hg, i, @spdt) do
begin
SetupDiGetDeviceInterfaceDetailA(devSet, @spdt, 0, 0, @uBytes, 0);
if (uBytes <> 0) and (GetLastError() = 122) then
begin
GetMem(pSpDDT, uBytes);
pSpDDT^.cbSize := 5;
SetupDiGetDeviceInterfaceDetailA(devSet, @spdt, pSpDDT, uBytes,
@uBytes, 0);
if (pos('vid_0483&pid_5750', PAnsiChar(@(pSpDDT^.DevicePath))) <> 0) then
break;
FreeMem(pSpDDT);
pSpDDT := 0;
end;
inc(i);
end;
SetupDiDestroyDeviceInfoList(devSet);
if pSpDDT = nil then
begin
DoDisconnect();
MessageBoxA(0, 'Устройство vid_0483&pid_5750 не найдено.', 'Ошибка!', 0);
exit;
end;
hMM := CreateFileA(PAnsiChar(@(pSpDDT^.DevicePath)), GENERIC_READ or
GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if hMM = 0 then
begin
DoDisconnect();
MessageBoxA(0, 'Не удалось открыть устройство.', 'Ошибка!', 0);
exit;
end;
hEvt := CreateEvent(0, true, false, 0);
ResetEvent(hEvt);
ovlp.Offset := 0;
ovlp.OffsetHigh := 0;
ovlp.hEvent := hEvt;
end; |
|
#5
|
|||
|
|||
|
Это ведь код обнаружения устройства..Я же не знаю,что послать по USB в контроллер,чтобы загорелся светодиод.Я нашла вот такое -
пример из программы, которая передает в МК 16 управляющих байт, Код:
procedure TForm1.cmdWriteClick(Sender: TObject); var i : integer; Buf: array [0..16] of Byte; Written: Cardinal; ToWrite: Cardinal; begin //Проверяем подключено ли наше устройство if Assigned(CurrentDevice) then begin //Узнаем какова длина OUTPUT репорта, котрым владеет МК ToWrite := CurrentDevice.Caps.OutputReportByteLength; //Заполняем буфер нужными нам параметрами. Необходимо отметить, что самым первым //значением в буфере стоит номер репорта. В нашем случае это 0! Buf[0] := 0; Buf[1] := Rx; Buf[2] := Gx; Buf[3] := Yx; Buf[4] := Bx; Buf[5] := Rf; Buf[6] := Gf; Buf[7] := Yf; Buf[8] := Bf; Buf[9] := Regim; Buf[10] := Zmax; Buf[11] := Zmin; Buf[12] := Tim; Buf[13] := HiZat; Buf[14] := LoZat; Buf[15] := HiZatF; Buf[16] := LoZatF; //Все скопом сбрасываем в контроллер. В переменной Written будет количество //переданных байт CurrentDevice.WriteFile(Buf, ToWrite, Written); end; end; откуда взять эти параметры,которые записываются в буфер?Если есть возможность,то хотя бы приведите,пожалуйста,пример на каком-нидь другом контроллере,чтоб я понимала что и откуда берется( Последний раз редактировалось Admin, 28.01.2013 в 20:36. |
|
#6
|
||||
|
||||
|
Схема устройства есть?
|
| Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
Kateee (28.01.2013)
| ||