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

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


ob:o7:timer

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ob:o7:timer [2017/07/26 13:43]
иван_денисов
ob:o7:timer [2022/02/04 11:45] (текущий)
iadenisov
Строка 1: Строка 1:
 ====== Работа с таймером через прерывания ====== ====== Работа с таймером через прерывания ======
  
-Пример:+Для работы со счетчиком времени в неблокирующем режиме предусмотрено для модуля **MobxARMv6MSTM32SysTick0** и **MobxARMv7MSTM32SysTick0** в зависимости от архитектуры ядра вашего микроконтроллера, **ARMv6** или **ARMv7** соответственно. 
 + 
 +=====Пример для STM32F103C8 (ядро ARMv7)=====
  
 <code> <code>
 MODULE MobxSTM32F103C8Blink; MODULE MobxSTM32F103C8Blink;
- +
 IMPORT SYSTEM, IMPORT SYSTEM,
  MCU := MicroSTM32F10xxD, (* адреса разных регистров для STM32F103C8 *)  MCU := MicroSTM32F10xxD, (* адреса разных регистров для STM32F103C8 *)
Строка 14: Строка 16:
    
 VAR (* секция глобальных переменных *) VAR (* секция глобальных переменных *)
- msec: INTEGER;  (* счетчик микросекунд *)+ msec: INTEGER;  (* счетчик миллисекунд *)
    
 PROCEDURE Init;  (* настройка МК *) PROCEDURE Init;  (* настройка МК *)
Строка 20: Строка 22:
  (* Настраиваем таймер на 1 мс *)  (* Настраиваем таймер на 1 мс *)
  SysTick0.Init(Sys.HCLK, 1000);  SysTick0.Init(Sys.HCLK, 1000);
- (* Настраиваем вывод A9 *)+ (* Настраиваем вывод C13 *)
  PinCfg.Configure(PinCfg.C, 13, PinCfg.outputPushPull2MHz);  PinCfg.Configure(PinCfg.C, 13, PinCfg.outputPushPull2MHz);
- (* Устанавливаем таймер микросекунд *)+ (* Устанавливаем таймер миллисекунд *)
  msec := 0;  msec := 0;
 END Init; END Init;
Строка 46: Строка 48:
  MainLoop  MainLoop
    
-END MobxSTM32F103C8Blink.<code>+END MobxSTM32F103C8Blink.</code>
  
 Компилируем модуль Mobx/Files/STM32F103C8Blink.odc, а также перед этим таймер. Компилируем модуль Mobx/Files/STM32F103C8Blink.odc, а также перед этим таймер.
-<code>^Q O7ARMv7MP.Compile MobxARMv7MSTM32SysTick0 MobxSTM32F103C8Blink<code>+<code>^Q O7ARMv7MP.Compile MobxARMv7MSTM32SysTick0 MobxSTM32F103C8Blink</code>
  
 Собираем HEX и BIN файлы для модуля Собираем HEX и BIN файлы для модуля
-<code>^Q O7ARMv7MLinker.Link STM32F103C8 MobxSTM32F103C8Blink<code>+<code>^Q O7ARMv7MLinker.Link STM32F103C8 MobxSTM32F103C8Blink</code> 
 + 
 +=====Пример для STM32F030F4 (ядро ARMv6)===== 
 + 
 +<code> 
 +MODULE MobxSTM32F030F4Blink; 
 + 
 +IMPORT SYSTEM, 
 + MCU := MicroSTM32F030, (* адреса разных регистров для STM32F030 *) 
 + ARMv6M := MicroARMv6M, (* адреса и команды общие для всех ядер ARMv6M *) 
 + PinCfg := MicroSTM32F0Pins, (* настройка ног *) 
 + SysTick0 := MobxARMv6MSTM32SysTick0, (* таймер на прерываниях *) 
 + Sys := MicroSTM32F030System; 
 + 
 +(* секция глобальных переменных *) 
 +VAR 
 + msec: INTEGER;  (* счетчик миллисекунд *) 
 + 
 + 
 +PROCEDURE Init;  (* настройка МК *) 
 +BEGIN 
 + (* Настраиваем таймер на 1 мс *) 
 + SysTick0.Init(Sys.HCLK, 1000); 
 + (* Настраиваем вывод A9 *) 
 + PinCfg.ConfigureOutput(PinCfg.A, 9, PinCfg.noPull, PinCfg.pushPullMedium); 
 + (* Устанавливаем таймер миллисекунд *) 
 + 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, {9}); (* поднять напряжение на PA9 *) 
 + ELSIF msec = 500 THEN 
 + SYSTEM.PUT(MCU.GPIOABSRR, {9 + 16}) (* убрать напряжение на PA9 *) 
 + END; 
 + ARMv6M.WFI (* ждать следующего прерывания, перейти в "спящий режим" *) 
 + END 
 + UNTIL FALSE 
 +END MainLoop; 
 + 
 + 
 +BEGIN 
 + Init; 
 + MainLoop 
 + 
 +END MobxSTM32F030F4Blink.</code> 
 + 
 +Компилируем модуль Mobx/Files/STM32F030F4Blink.odc, а также перед этим таймер. 
 +<code>^Q O7ARMv6MP.Compile MobxARMv6MSTM32SysTick0 MobxSTM32F030F4Blink</code> 
 + 
 +Собираем HEX и BIN файлы для модуля. 
 +<code>^Q O7ARMv6MLinker.Link STM32F030F4 MobxSTM32F030F4Blink</code> 
 + 
 + 
 + 
 +Про то, как прошить полученным файлом микроконтроллер, читайте в статье «[[ob:o7:stm32flash|Прошивка микроконтроллера через UART]]». 
 + 
 + 
 +---- 
 + 
 +Автор заметки: [[http://iadenisov.ru|И.А. Денисов]]
  
ob/o7/timer.1501065825.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)