Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

воскресенье, 20 декабря 2015 г.

Измерение времени с помощью таймера

Если возникла необходимость измерения промежутка времени, например, длительности выполнения блока операций или интервала времени между двумя событиями, то логично привлечь к выполнению такой задачи один из имеющихся в микроконтроллере таймеров. Как именно производится измерение? А вот так – пример для блока операций:

TIM2->CR1 = 0; //остановка таймера
TIM2->CNT = 0; //сброс счетчика
TIM2->CR1 = 1; //перезапуск таймера
// блок операций, длительность выполнения которого
// необходимо измерить
TIM2->CR1 = 0; //остановка таймера

пример для интервала времени между двумя событиями

TIM2->CR1 = 0; //остановка таймера
TIM2->CNT = 0; //сброс счетчика
// ожидание момента наступления первого события, например,
// перехода LOW-HIGH на одном из выводов микроконтролера
TIM2->CR1 = 1; //перезапуск таймера
// ожидание момента наступления второго события, например,
// перехода HIGH-LOW на одном из выводов микроконтролера
TIM2->CR1 = 0; //остановка таймера

Естественно, прежде, чем можно будет воспользоваться таймером, его необходимо инициализировать. Для этого следует выполнить всего два действия – включить тактирование таймера и настроить предделитель на требуемую частоту счета (пусть это будет 10000 тиков всекунду или 10 тиков в миллисекунду):


RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
TIM2->PSC = 7199;

Комментариев нет:

Отправить комментарий