Инструменты пользователя

Инструменты сайта


ob:o7:example:pccontrol

Это старая версия документа!


Если подключить к микроконтроллеру драйвер 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.
ob/o7/example/pccontrol.1647068651.txt.gz · Последнее изменение: 2022/03/12 10:04 — iadenisov