Ignore:
Timestamp:
Aug 19, 2025, 11:11:18 AM (8 days ago)
Author:
f.jahn
Message:

Fixing project before changing Timer16 to Timer3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware_v2/Core/Src/tim.c

    r18 r19  
    2626#define AVG_NUM         (64U)
    2727
    28 uint32_t ic_buf[AVG_NUM][STATE_NUM];
    29 uint32_t ic_overflows[AVG_NUM][STATE_NUM];
     28uint16_t ic_buf[AVG_NUM][STATE_NUM];
     29uint32_t ic_overflows;
    3030
    3131/* USER CODE END 0 */
     
    3333TIM_HandleTypeDef htim16;
    3434TIM_HandleTypeDef htim17;
     35DMA_HandleTypeDef hdma_tim16_ch1;
    3536
    3637/* TIM16 init function */
     
    7475  /* USER CODE BEGIN TIM16_Init 2 */
    7576
    76   HAL_TIM_IC_Start_DMA(&htim16, TIM_CHANNEL_1, ic_buf, STATE_NUM * AVG_NUM);
     77  __HAL_TIM_ENABLE_IT(&htim16, TIM_IT_UPDATE);
     78  HAL_TIM_IC_Start_DMA(&htim16, TIM_CHANNEL_1, (uint32_t*)ic_buf, STATE_NUM * AVG_NUM);
    7779
    7880  /* USER CODE END TIM16_Init 2 */
     
    134136  }
    135137  /* USER CODE BEGIN TIM17_Init 2 */
     138
     139 
    136140
    137141  /* USER CODE END TIM17_Init 2 */
     
    163167    HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct);
    164168
     169    /* TIM16 DMA Init */
     170    /* TIM16_CH1 Init */
     171    hdma_tim16_ch1.Instance = DMA1_Channel2;
     172    hdma_tim16_ch1.Init.Request = DMA_REQUEST_TIM16_CH1;
     173    hdma_tim16_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY;
     174    hdma_tim16_ch1.Init.PeriphInc = DMA_PINC_DISABLE;
     175    hdma_tim16_ch1.Init.MemInc = DMA_MINC_ENABLE;
     176    hdma_tim16_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
     177    hdma_tim16_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
     178    hdma_tim16_ch1.Init.Mode = DMA_CIRCULAR;
     179    hdma_tim16_ch1.Init.Priority = DMA_PRIORITY_LOW;
     180    if (HAL_DMA_Init(&hdma_tim16_ch1) != HAL_OK)
     181    {
     182      Error_Handler();
     183    }
     184
     185    __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim16_ch1);
     186
    165187    /* TIM16 interrupt Init */
    166188    HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0);
     
    228250    HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin);
    229251
     252    /* TIM16 DMA DeInit */
     253    HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_CC1]);
     254
    230255    /* TIM16 interrupt Deinit */
    231256    HAL_NVIC_DisableIRQ(TIM16_IRQn);
     
    249274/* USER CODE BEGIN 1 */
    250275
     276void SetFANSpeed(unsigned speed)
     277{
     278        const unsigned MAX_RPM = 1000U;                                                                                 // 100.0%
     279
     280        if (speed > MAX_RPM) speed = MAX_RPM;
     281
     282        const unsigned MAX_PWM = __HAL_TIM_GET_AUTORELOAD(&htim17);
     283        const unsigned newPWM = (MAX_PWM * speed/ MAX_RPM);
     284
     285        __HAL_TIM_SET_COMPARE(&htim17, TIM_CHANNEL_1, newPWM);
     286}
     287
    251288/* USER CODE END 1 */
Note: See TracChangeset for help on using the changeset viewer.