Ярлыки

_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 г.

STM32F4 HAL Timer& Interrupt Init

/* TIM5 init function */
void MX_TIM5_Init(void)
{
  htim5.Instance = TIM3; 
  htim5.Init.Prescaler = 16800-1; // делим 168 МГц на 16800 получаем 10000 Гц или 10 мс
  htim5.Init.CounterMode = TIM_COUNTERMODE_UP; // таймер считает вверх
  htim5.Init.Period = 5000-1; // считать будет до 5000, т.е. через 500 мс произойдет прерывание
  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // частоту входную не делим - нам хватает
  HAL_TIM_Base_Init(&htim5);
  /* Start the TIM Base generation in interrupt mode */
  /* Start Channel1 */
  HAL_TIM_Base_Start_IT(&htim5); // включаем прерывание таймера 5
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_1);
}





==========================Without HAL==================================

//=============================================================================
// TIM5 Interrupt Handler
//=============================================================================
void TIM5_IRQHandler(void)
{
    if(TIM5->SR & TIM_SR_UIF) // if UIF flag is set
    {
      TIM5->SR &= ~TIM_SR_UIF; // clear UIF flag
      GPIOA->ODR ^=GPIO_ODR_1;
    }
}    

int main(void)
{
  //HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* System interrupt init*/
  //HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

 /* GPIOB Periph clock enable */
  RCC->AHBENR |= RCC_AHBENR_GPIOAEN; 
  GPIOA->MODER |= (GPIO_MODER_MODER1_0 | GPIO_MODER_MODER0_0) ;    /* Configure PB0 and PB1 output  mode  */
  GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_0 | GPIO_OTYPER_OT_1) ;   // Ensure push pull mode selected--default
  GPIOA->OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR0|GPIO_OSPEEDER_OSPEEDR1);    //Ensure maximum speed setting (even though it is unnecessary)
  GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR0|GPIO_PUPDR_PUPDR1);    //Ensure all pull up pull down resistors are disabled  
  GPIOA->BSRRL = GPIO_BRR_BR_1;     // Set
  /* TIM5 clock enable */
  RCC->APB1ENR |= RCC_APB1ENR_TIM5EN;
  TIM5->PSC = 168000 - 1;       // Set prescaler to 16800 = 168 000 000Hz/16800 = 100000 Hz = 10 ms
  TIM5->ARR = 5000 - 1;         // Auto reload value 5000 = 500mS
  TIM5->DIER = TIM_DIER_UIE; // Enable update interrupt (timer level)
  TIM5->CR1 = TIM_CR1_CEN;   // Enable timer
  NVIC_EnableIRQ(TIM5_IRQn); // Enable interrupt from TIM5 (NVIC level) 
   
  while (1)
  {
  }
}



===================================================================

TIM_HandleTypeDef TIM_Handle;
int main(void)
{
    __TIM4_CLK_ENABLE();
    TIM_Handle.Init.Prescaler = 671;
    TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
    TIM_Handle.Init.Period = 62499;
    TIM_Handle.Instance = TIM4;   //Same timer whose clocks we enabled
    HAL_TIM_Base_Init(&TIM_Handle);     // Init timer
    HAL_TIM_Base_Start_IT(&TIM_Handle); // start timer interrupts
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 1);
    HAL_NVIC_ClearPendingIRQ(TIM4_IRQn);
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
    while(1)
    {
    }
}
void TIM4_IRQHandler(void)
{
    if (__HAL_TIM_GET_FLAG(&TIM_Handle, TIM_FLAG_UPDATE) != RESET)      //In case other interrupts are also running
    {
        if (__HAL_TIM_GET_ITSTATUS(&TIM_Handle, TIM_IT_UPDATE) != RESET)
        {
            __HAL_TIM_CLEAR_FLAG(&TIM_Handle, TIM_FLAG_UPDATE);
            /*put your code here */
        }
    }
}


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

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