Ярлыки

_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)

суббота, 26 декабря 2015 г.

STM32 Basic Timer

#include "stm32l1xx.h" //В этом файле заданы все имена регистров периферии 

uint8_t i = 0; //Переменная отображает текущее состояние светодиода - ON/OFF

void TIM6_IRQHandler(void); //Объявление функции обработчика прерывания таймера 6

int main()
{
  //GPIOB init
  RCC->AHBENR |= RCC_AHBENR_GPIOBEN; //Подаем тактовые импульсы в порт B
  GPIOB->MODER |= GPIO_MODER_MODER6_0; //Порт B в режиме "выход"
  GPIOB->OTYPER &= ~GPIO_OTYPER_OT_6; //Выход в режиме "push-pull"
  GPIOB->PUPDR &= ~GPIO_PUPDR_PUPDR6; //Подтягивающие резисторы не используются
  GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6; //Скорость работы порта максимальная
  
  NVIC_SetPriority(TIM6_IRQn, 1); //Приоритет прерывания
  NVIC_EnableIRQ(TIM6_IRQn); //Разрешаем обработку прерывания от таймера 6
  
  //TIM6 init
  RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; //Подаем тактовые импульсы на таймер 6
  TIM6->PSC = 0xFFFF; //Коэффициент деления максимальный - 65535 + 1
  TIM6->ARR = 0x000F; //Перезагружаемое значение - 16
  TIM6->DIER |= TIM_DIER_UIE; //Разрешаем прерывание при переполнении счетчика
  TIM6->CR1 |= TIM_CR1_CEN; //Запуск счета    
  
  while(1); //Бесконечный цикл. Здесь могла быт ваша программа!
}

 void TIM6_IRQHandler(void) //Функция обработчика прерывания от таймера 6
  {
    TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем бит вызова прерывания. 
    if (i == 0) //Проверяем текущее состояние светодиода - ON/OFF
      GPIOB->BSRRL |= GPIO_BSRR_BS_6; //Зажигаем светодиод
    else
     GPIOB->BSRRH |= GPIO_BSRR_BS_6; //Или гасим светодиод
    i = ~i; //Изменяем переменную, отображающую текушее состояние светодиода
  }

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

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