Это старая версия документа!
Если подключить к микроконтроллеру драйвер L293D, то возможно управлять мотором, путем создания разных или одинаковых сигналов на двух выводах. В этом примере управляющие каналы драйвера подключены к выводам PC14 и PC15.
С помощью модуля MicroSTM32F1TPorts возможно принимать пакеты с идентификаторами от ПК.
Код для микроконтроллера:
MODULE Main;
IMPORT SYSTEM,
MCU := MicroSTM32F10xxD,
ARMv7M := MicroARMv7M,
Pins := MicroSTM32F10xPinCfg,
TPs := MicroSTM32F1TPorts,
Sys := MicroSTM32F103x8System;
CONST
motorStartForward = 021X;
motorStartBackward = 022X;
motorStop = 023X;
VAR
p0: TPs.Port;
PROCEDURE Receive (id: CHAR; a: ARRAY OF CHAR; len: INTEGER);
BEGIN
IF id = motorStartForward THEN
SYSTEM.PUT(MCU.GPIOCBSRR, {15, 14+16})
ELSIF id = motorStartBackward THEN
SYSTEM.PUT(MCU.GPIOCBSRR, {15 + 16, 14})
ELSIF id = motorStop THEN
SYSTEM.PUT(MCU.GPIOCBSRR, {15 + 16, 14 + 16})
END
END Receive;
PROCEDURE InitPort;
VAR par: TPs.InitPar2;
BEGIN
par.n := TPs.USART1;
par.RXPinPort := Pins.A; par.RXPinN := 10;
par.TXPinPort := Pins.A; par.TXPinN := 9;
par.UCLK := Sys.PCLK2;
par.baud := 19200;
par.parity := TPs.parityNone;
par.receive := Receive; (* устанавливаем процедуру для вызова при приёме данных *)
TPs.Init(p0, par)
END InitPort;
PROCEDURE Init;
VAR ok: BOOLEAN;
BEGIN
InitPort;
Pins.Configure(Pins.C, 14, Pins.outputPushPull2MHz);
Pins.Configure(Pins.C, 15, Pins.outputPushPull2MHz);
END Init;
PROCEDURE MainLoop;
BEGIN
REPEAT
TPs.Receive(p0); (* принимаем данные по UART *)
ARMv7M.WFI
UNTIL FALSE
END MainLoop;
BEGIN
Init;
MainLoop
END Main.