Example #1
0
/**
* @brief  HRTIM minimal configuration to have snippets running
*         HRTIM is clocked and DLL is started
* @param  None
* @retval None
*/
static void HRTIM_Minimal_Config(void)
{

  /* Use the PLLx2 clock for HRTIM */
  __HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);

  /* Enable HRTIM clock*/
  __HAL_RCC_HRTIM1_CLK_ENABLE();

  /* DLL calibration: periodic calibration enabled, period set to 14µs */
  HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;
    
  /* Check DLL end of calibration flag */
  while((HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY) == RESET);

}
Example #2
0
/**
* @brief  HRTIM configuration at register level (no HAL call)
* @param  None
* @retval None
*/
static void HRTIM_Config_NoHAL(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    /* --------------------------*/
    /* HRTIM Input and NVIC init */
    /* --------------------------*/

    __GPIOA_CLK_ENABLE();

    /* Configure HRTIM input: FAULT1 (PA12) */
    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;;
    GPIO_InitStruct.Alternate = GPIO_AF13_HRTIM1;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* Configure and enable HRTIM TIMERA interrupt channel in NVIC */
    HAL_NVIC_SetPriority(HRTIM1_TIMA_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(HRTIM1_TIMA_IRQn);

    /* --------------------------*/
    /* HRTIM Clock and DLL init  */
    /* --------------------------*/

    /* Use the PLLx2 clock for HRTIM */
    __HAL_RCC_HRTIM1_CONFIG(RCC_HRTIM1CLK_PLLCLK);

    /* Enable HRTIM clock*/
    __HRTIM1_CLK_ENABLE();

    /* DLL calibration: periodic calibration enabled, period set to 14µs */
    HRTIM1->sCommonRegs.DLLCR = HRTIM_CALIBRATIONRATE_14| HRTIM_DLLCR_CALEN;

    /* Check DLL end of calibration flag */
    while(HRTIM1->sCommonRegs.ISR & HRTIM_IT_DLLRDY == RESET);

    /* -------------------------------------------------------- */
    /* TIMERA initialization: PWM frequency and Repetition rate */
    /* Continuous mode, preload enabled on REP event            */
    /* -------------------------------------------------------- */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].PERxR = BUCK_PWM_PERIOD; /* 400kHz switching frequency */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].REPxR = 127; /* 1 ISR every 128 PWM periods */

    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].TIMxCR = HRTIM_TIMCR_CONT
            + HRTIM_TIMCR_PREEN
            + HRTIM_TIMCR_TREPU;
    /* Enable REP interrupts */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].TIMxDIER = HRTIM_TIMDIER_REPIE;

    /* --------------------------------------------------------------- */
    /* TA1 and TA2 waveforms description: Set on period, reset on CMP1 */
    /* deadtime enabled, fault1 selected, disabling both outputs                   */
    /* --------------------------------------------------------------- */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].SETx1R = HRTIM_SET1R_PER;
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].RSTx1R = HRTIM_RST1R_CMP1;

    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].OUTxR = HRTIM_OUTR_DTEN + HRTIM_OUTR_FAULT1_1 + HRTIM_OUTR_FAULT2_1;
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].FLTxR = HRTIM_FLTR_FLT1EN;

    /* Set compare registers for duty cycle on TA1 */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP1xR = BUCK_PWM_PERIOD/20;    /* 5% duty cycle */
    /* Set deadtime values and lock deadtime signs */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].DTxR = HRTIM_DTR_DTFSLK + (DT_FALLING<<16) + HRTIM_DTR_DTRSLK + DT_RISING;

    /* ------------------------------------------- */
    /* ADC trigger intialization (with CMP2 event) */
    /* ------------------------------------------- */
    HRTIM1->sTimerxRegs[HRTIM_TIMERINDEX_TIMER_A].CMP2xR = BUCK_PWM_PERIOD/10;    /* Samples in middle of ON time */
    HRTIM1->sCommonRegs.CR1 = HRTIM_CR1_ADC2USRC_0; /* ADC trigger update: TimerA */
    HRTIM1->sCommonRegs.ADC2R = HRTIM_ADC2R_AD2TAC2; /* ADC trigger event: Timer A compare 2*/

    /* ---------------------------------------------------------- */
    /* FAULT1 global init: no filter, low polarity, Fault1 enable */
    /* ---------------------------------------------------------- */
    HRTIM1->sCommonRegs.FLTINR1 = HRTIM_FLTINR1_FLT1E;

    /* ---------------*/
    /* HRTIM start-up */
    /* ---------------*/
    /* Force register update before starting (optional) */
    HRTIM1->sCommonRegs.CR2 |= HRTIM_CR2_TASWU;

    /* Enable HRTIM's outputs TA1 and TA2 */
    /* Note: it is necessary to enable also GPIOs to have outputs functional */
    /* This must be done after HRTIM initialization */
    HRTIM1->sCommonRegs.OENR = HRTIM_OENR_TA1OEN + HRTIM_OENR_TA2OEN;

    /* Start HRTIM's TIMER A */
    HRTIM1->sMasterRegs.MCR = HRTIM_MCR_TACEN;
}