Это старая версия документа!
Если подключить к микроконтроллеру драйвер 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.