Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
ob:o7:timer [2017/07/26 13:44] иван_денисов |
ob:o7:timer [2022/02/04 11:45] (текущий) iadenisov |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Работа с таймером через прерывания ====== | ====== Работа с таймером через прерывания ====== | ||
- | Пример: | + | Для работы со счетчиком времени в неблокирующем режиме предусмотрено для модуля **MobxARMv6MSTM32SysTick0** и **MobxARMv7MSTM32SysTick0** в зависимости от архитектуры ядра вашего микроконтроллера, |
+ | |||
+ | =====Пример | ||
< | < | ||
Строка 14: | Строка 16: | ||
VAR (* секция глобальных переменных *) | VAR (* секция глобальных переменных *) | ||
- | msec: INTEGER; | + | msec: INTEGER; |
PROCEDURE Init; (* настройка МК *) | PROCEDURE Init; (* настройка МК *) | ||
Строка 20: | Строка 22: | ||
(* Настраиваем таймер на 1 мс *) | (* Настраиваем таймер на 1 мс *) | ||
SysTick0.Init(Sys.HCLK, | SysTick0.Init(Sys.HCLK, | ||
- | (* Настраиваем вывод | + | (* Настраиваем вывод |
PinCfg.Configure(PinCfg.C, | PinCfg.Configure(PinCfg.C, | ||
- | (* Устанавливаем таймер микросекунд *) | + | (* Устанавливаем таймер миллисекунд *) |
msec := 0; | msec := 0; | ||
END Init; | END Init; | ||
Строка 53: | Строка 55: | ||
Собираем HEX и BIN файлы для модуля | Собираем HEX и BIN файлы для модуля | ||
< | < | ||
+ | |||
+ | =====Пример для STM32F030F4 (ядро ARMv6)===== | ||
+ | |||
+ | < | ||
+ | MODULE MobxSTM32F030F4Blink; | ||
+ | |||
+ | IMPORT SYSTEM, | ||
+ | MCU := MicroSTM32F030, | ||
+ | ARMv6M := MicroARMv6M, | ||
+ | PinCfg := MicroSTM32F0Pins, | ||
+ | SysTick0 := MobxARMv6MSTM32SysTick0, | ||
+ | Sys := MicroSTM32F030System; | ||
+ | |||
+ | (* секция глобальных переменных *) | ||
+ | VAR | ||
+ | msec: INTEGER; | ||
+ | |||
+ | |||
+ | PROCEDURE Init; (* настройка МК *) | ||
+ | BEGIN | ||
+ | (* Настраиваем таймер на 1 мс *) | ||
+ | SysTick0.Init(Sys.HCLK, | ||
+ | (* Настраиваем вывод A9 *) | ||
+ | PinCfg.ConfigureOutput(PinCfg.A, | ||
+ | (* Устанавливаем таймер миллисекунд *) | ||
+ | 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.GPIOABSRR, | ||
+ | ELSIF msec = 500 THEN | ||
+ | SYSTEM.PUT(MCU.GPIOABSRR, | ||
+ | END; | ||
+ | ARMv6M.WFI (* ждать следующего прерывания, | ||
+ | END | ||
+ | UNTIL FALSE | ||
+ | END MainLoop; | ||
+ | |||
+ | |||
+ | BEGIN | ||
+ | Init; | ||
+ | MainLoop | ||
+ | |||
+ | END MobxSTM32F030F4Blink.</ | ||
+ | |||
+ | Компилируем модуль Mobx/ | ||
+ | < | ||
+ | |||
+ | Собираем HEX и BIN файлы для модуля. | ||
+ | < | ||
+ | |||
+ | |||
+ | |||
+ | Про то, как прошить полученным файлом микроконтроллер, | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | Автор заметки: | ||