Changeset 19 for trunk/firmware_v2/Core


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

Fixing project before changing Timer16 to Timer3

Location:
trunk/firmware_v2/Core
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/firmware_v2/Core/Inc/stm32c0xx_it.h

    r17 r19  
    5353void SysTick_Handler(void);
    5454void DMA1_Channel1_IRQHandler(void);
     55void DMA1_Channel2_3_IRQHandler(void);
    5556void TIM16_IRQHandler(void);
    5657/* USER CODE BEGIN EFP */
  • trunk/firmware_v2/Core/Inc/tim.h

    r17 r19  
    4848/* USER CODE BEGIN Prototypes */
    4949
     50void SetFANSpeed(unsigned speed);
     51
    5052/* USER CODE END Prototypes */
    5153
  • trunk/firmware_v2/Core/Src/dma.c

    r17 r19  
    4747  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
    4848  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
     49  /* DMA1_Channel2_3_IRQn interrupt configuration */
     50  HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn, 0, 0);
     51  HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
    4952
    5053}
  • trunk/firmware_v2/Core/Src/stm32c0xx_it.c

    r18 r19  
    6060/* External variables --------------------------------------------------------*/
    6161extern DMA_HandleTypeDef hdma_adc1;
     62extern DMA_HandleTypeDef hdma_tim16_ch1;
    6263extern TIM_HandleTypeDef htim16;
    6364/* USER CODE BEGIN EV */
     
    160161
    161162/**
     163  * @brief This function handles DMA1 channel 2 and channel 3 interrupts.
     164  */
     165void DMA1_Channel2_3_IRQHandler(void)
     166{
     167  /* USER CODE BEGIN DMA1_Channel2_3_IRQn 0 */
     168
     169  /* USER CODE END DMA1_Channel2_3_IRQn 0 */
     170  HAL_DMA_IRQHandler(&hdma_tim16_ch1);
     171  /* USER CODE BEGIN DMA1_Channel2_3_IRQn 1 */
     172
     173  /* USER CODE END DMA1_Channel2_3_IRQn 1 */
     174}
     175
     176/**
    162177  * @brief This function handles TIM16 global interrupt.
    163178  */
     
    177192
    178193
    179 uint32_t capturedValue;
    180 uint32_t previousCaptureValue;
    181 uint32_t frequency;
    182 uint32_t overflowCnt;
    183 uint32_t T[STATE_NUM];
    184 
    185 static uint32_t avg;
    186 static uint32_t psc;
    187 static uint32_t freq;
    188 static uint32_t rpm;
     194//uint32_t capturedValue;
     195//uint32_t previousCaptureValue;
     196//uint32_t frequency;
     197//uint32_t overflowCnt;
     198//uint32_t T[STATE_NUM];
     199
     200//static uint32_t avg;
     201//static uint32_t psc;
     202//static uint32_t freq;
     203//static uint32_t rpm;
    189204
    190205
    191206void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef* htim)
    192207{
     208        extern uint32_t ic_overflows;
     209
    193210        if (htim->Instance == TIM16)
    194211        {
    195                 static unsigned stateCnt;
    196 
     212                printf("Full\n");
     213                ic_overflows = 0U;
     214                /*static unsigned stateCnt;
     215 
    197216                capturedValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
    198217                T[stateCnt++] = capturedValue + 65536U * overflowCnt;
     
    217236
    218237                        stateCnt = 0U;
    219                 }
     238                }*/
    220239        }
    221240}
     
    225244void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim)
    226245{
     246        extern uint32_t ic_overflows;
     247
    227248        if (htim->Instance == TIM16)
    228249        {
    229                 overflowCnt++;
     250                ic_overflows++;
     251                printf("Ovf\n");
     252                //ic_overflows %=
    230253        }
    231254}
    232255
     256//-----------------------------------------------------------------------------
     257
     258void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim)
     259{
     260        extern uint32_t ic_overflows;
     261
     262        if (htim->Instance == TIM16)
     263        {
     264                printf("Half\n");
     265                ic_overflows = 0U;
     266        }
     267}
     268
    233269/* USER CODE END 1 */
  • 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.