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

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


ob:o7:timer

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


Работа с таймером через прерывания

Пример:

<code> MODULE MobxSTM32F103C8Blink;

IMPORT SYSTEM,

MCU := MicroSTM32F10xxD, (* адреса разных регистров для STM32F103C8 *)
ARMv7M := MicroARMv7M, (* адреса и команды общие для всех ядер ARMv7M *)
PinCfg := MicroSTM32F10xPinCfg, (* настройка ног *)
SysTick0 := MobxARMv7MSTM32SysTick0, (* таймер на прерываниях *)
Sys := MicroSTM32F103x8System;

VAR (* секция глобальных переменных *)

msec: INTEGER;  (* счетчик микросекунд *)

PROCEDURE Init; (* настройка МК *) BEGIN

(* Настраиваем таймер на 1 мс *)
SysTick0.Init(Sys.HCLK, 1000);
(* Настраиваем вывод A9 *)
PinCfg.Configure(PinCfg.C, 13, PinCfg.outputPushPull2MHz);
(* Устанавливаем таймер микросекунд *)
msec := 0;

END Init;

PROCEDURE MainLoop; (* главный цикл *) BEGIN

REPEAT
	IF SysTick0.OnTimer() THEN
		IF msec = 999 THEN msec := 0 ELSE INC(msec) END;
		IF msec = 0 THEN
			SYSTEM.PUT(MCU.GPIOCBSRR, {13}); (* поднять напряжение на PС13 *)
		ELSIF msec = 500 THEN
			SYSTEM.PUT(MCU.GPIOCBSRR, {13 + 16}) (* убрать напряжение на PС13 *)
		END;
		ARMv7M.WFI (* ждать следующего прерывания, перейти в "спящий режим" *)
	END
UNTIL FALSE

END MainLoop;

BEGIN

Init;
MainLoop

END MobxSTM32F103C8Blink.<code>

Компилируем модуль Mobx/Files/STM32F103C8Blink.odc, а также перед этим таймер. <code>^Q O7ARMv7MP.Compile MobxARMv7MSTM32SysTick0 MobxSTM32F103C8Blink<code>

Собираем HEX и BIN файлы для модуля <code>^Q O7ARMv7MLinker.Link STM32F103C8 MobxSTM32F103C8Blink<code>

ob/o7/timer.1501065825.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)