source: ctrl/firmware/Main/CubeMX/Core/Src/tim.c

Last change on this file was 114, checked in by Zed, 2 months ago

Fixing the project.

File size: 13.2 KB
Line 
1/* USER CODE BEGIN Header */
2/**
3  ******************************************************************************
4  * @file    tim.c
5  * @brief   This file provides code for the configuration
6  *          of the TIM instances.
7  ******************************************************************************
8  * @attention
9  *
10  * Copyright (c) 2025 STMicroelectronics.
11  * All rights reserved.
12  *
13  * This software is licensed under terms that can be found in the LICENSE file
14  * in the root directory of this software component.
15  * If no LICENSE file comes with this software, it is provided AS-IS.
16  *
17  ******************************************************************************
18  */
19/* USER CODE END Header */
20/* Includes ------------------------------------------------------------------*/
21#include "tim.h"
22
23/* USER CODE BEGIN 0 */
24
25/* USER CODE END 0 */
26
27TIM_HandleTypeDef htim1;
28TIM_HandleTypeDef htim3;
29TIM_HandleTypeDef htim6;
30TIM_HandleTypeDef htim8;
31
32/* TIM1 init function */
33void MX_TIM1_Init(void)
34{
35
36  /* USER CODE BEGIN TIM1_Init 0 */
37
38  // This Timer is used to generate two PWM wave forms to charge the cell.
39
40  /* USER CODE END TIM1_Init 0 */
41
42  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
43  TIM_MasterConfigTypeDef sMasterConfig = {0};
44  TIM_OC_InitTypeDef sConfigOC = {0};
45  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
46
47  /* USER CODE BEGIN TIM1_Init 1 */
48
49  // CPU freqency is assumed as 100MHz. PWM frequency must not be greater than 64kHz.
50
51  /* USER CODE END TIM1_Init 1 */
52  htim1.Instance = TIM1;
53  htim1.Init.Prescaler = 0;
54  htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
55  htim1.Init.Period = 1600 - 1;
56  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
57  htim1.Init.RepetitionCounter = 0;
58  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
59  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
60  {
61    Error_Handler();
62  }
63  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
64  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
65  {
66    Error_Handler();
67  }
68  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
69  {
70    Error_Handler();
71  }
72  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
73  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
74  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
75  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
76  {
77    Error_Handler();
78  }
79  sConfigOC.OCMode = TIM_OCMODE_PWM1;
80  sConfigOC.Pulse = 50;
81  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
82  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
83  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
84  sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
85  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
86  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
87  {
88    Error_Handler();
89  }
90  sConfigOC.Pulse = 0;
91  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
92  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
93  {
94    Error_Handler();
95  }
96  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_ENABLE;
97  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;
98  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_1;
99  sBreakDeadTimeConfig.DeadTime = 20;
100  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
101  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
102  sBreakDeadTimeConfig.BreakFilter = 0;
103  sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
104  sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
105  sBreakDeadTimeConfig.Break2Filter = 0;
106  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_ENABLE;
107  if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
108  {
109    Error_Handler();
110  }
111  /* USER CODE BEGIN TIM1_Init 2 */
112
113  /* USER CODE END TIM1_Init 2 */
114  HAL_TIM_MspPostInit(&htim1);
115
116}
117/* TIM3 init function */
118void MX_TIM3_Init(void)
119{
120
121  /* USER CODE BEGIN TIM3_Init 0 */
122
123  // This timer is used to control FAN with the PWM generation.
124
125  /* USER CODE END TIM3_Init 0 */
126
127  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
128  TIM_MasterConfigTypeDef sMasterConfig = {0};
129  TIM_OC_InitTypeDef sConfigOC = {0};
130
131  /* USER CODE BEGIN TIM3_Init 1 */
132
133  // Output PWM frequency must be 25KHz
134
135  /* USER CODE END TIM3_Init 1 */
136  htim3.Instance = TIM3;
137  htim3.Init.Prescaler = 3;
138  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
139  htim3.Init.Period = 1000;
140  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
141  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
142  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
143  {
144    Error_Handler();
145  }
146  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
147  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
148  {
149    Error_Handler();
150  }
151  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
152  {
153    Error_Handler();
154  }
155  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
156  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
157  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
158  {
159    Error_Handler();
160  }
161  sConfigOC.OCMode = TIM_OCMODE_PWM1;
162  sConfigOC.Pulse = 990;
163  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
164  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
165  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
166  {
167    Error_Handler();
168  }
169  /* USER CODE BEGIN TIM3_Init 2 */
170
171  /* USER CODE END TIM3_Init 2 */
172  HAL_TIM_MspPostInit(&htim3);
173
174}
175/* TIM6 init function */
176void MX_TIM6_Init(void)
177{
178
179  /* USER CODE BEGIN TIM6_Init 0 */
180
181  // This timer increments its counter every 1µs and is used to generate
182  // delays for 1-Wire protocol. CPU speed is assumed as 100MHz.
183
184  /* USER CODE END TIM6_Init 0 */
185
186  TIM_MasterConfigTypeDef sMasterConfig = {0};
187
188  /* USER CODE BEGIN TIM6_Init 1 */
189
190  /* USER CODE END TIM6_Init 1 */
191  htim6.Instance = TIM6;
192  htim6.Init.Prescaler = 100 - 1;
193  htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
194  htim6.Init.Period = 65536 - 1;
195  htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
196  if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
197  {
198    Error_Handler();
199  }
200  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
201  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
202  if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
203  {
204    Error_Handler();
205  }
206  /* USER CODE BEGIN TIM6_Init 2 */
207
208  /* USER CODE END TIM6_Init 2 */
209
210}
211/* TIM8 init function */
212void MX_TIM8_Init(void)
213{
214
215  /* USER CODE BEGIN TIM8_Init 0 */
216
217  // This timer is used to count pulses from FAN's Hall-sensor to count RPM.
218
219  /* USER CODE END TIM8_Init 0 */
220
221  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
222  TIM_SlaveConfigTypeDef sSlaveConfig = {0};
223  TIM_MasterConfigTypeDef sMasterConfig = {0};
224  TIM_IC_InitTypeDef sConfigIC = {0};
225
226  /* USER CODE BEGIN TIM8_Init 1 */
227
228  /* USER CODE END TIM8_Init 1 */
229  htim8.Instance = TIM8;
230  htim8.Init.Prescaler = 32 - 1;
231  htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
232  htim8.Init.Period = 65536 - 1;
233  htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
234  htim8.Init.RepetitionCounter = 0;
235  htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
236  if (HAL_TIM_Base_Init(&htim8) != HAL_OK)
237  {
238    Error_Handler();
239  }
240  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
241  if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK)
242  {
243    Error_Handler();
244  }
245  if (HAL_TIM_IC_Init(&htim8) != HAL_OK)
246  {
247    Error_Handler();
248  }
249  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
250  sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
251  sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
252  sSlaveConfig.TriggerFilter = 0;
253  if (HAL_TIM_SlaveConfigSynchro(&htim8, &sSlaveConfig) != HAL_OK)
254  {
255    Error_Handler();
256  }
257  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
258  sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
259  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
260  if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK)
261  {
262    Error_Handler();
263  }
264  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
265  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
266  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
267  sConfigIC.ICFilter = 0;
268  if (HAL_TIM_IC_ConfigChannel(&htim8, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
269  {
270    Error_Handler();
271  }
272  /* USER CODE BEGIN TIM8_Init 2 */
273
274  /* USER CODE END TIM8_Init 2 */
275
276}
277
278void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
279{
280
281  GPIO_InitTypeDef GPIO_InitStruct = {0};
282  if(tim_baseHandle->Instance==TIM1)
283  {
284  /* USER CODE BEGIN TIM1_MspInit 0 */
285
286  /* USER CODE END TIM1_MspInit 0 */
287    /* TIM1 clock enable */
288    __HAL_RCC_TIM1_CLK_ENABLE();
289  /* USER CODE BEGIN TIM1_MspInit 1 */
290
291  /* USER CODE END TIM1_MspInit 1 */
292  }
293  else if(tim_baseHandle->Instance==TIM3)
294  {
295  /* USER CODE BEGIN TIM3_MspInit 0 */
296
297  /* USER CODE END TIM3_MspInit 0 */
298    /* TIM3 clock enable */
299    __HAL_RCC_TIM3_CLK_ENABLE();
300
301    /* TIM3 interrupt Init */
302    HAL_NVIC_SetPriority(TIM3_IRQn, 5, 0);
303    HAL_NVIC_EnableIRQ(TIM3_IRQn);
304  /* USER CODE BEGIN TIM3_MspInit 1 */
305
306  /* USER CODE END TIM3_MspInit 1 */
307  }
308  else if(tim_baseHandle->Instance==TIM6)
309  {
310  /* USER CODE BEGIN TIM6_MspInit 0 */
311
312  /* USER CODE END TIM6_MspInit 0 */
313    /* TIM6 clock enable */
314    __HAL_RCC_TIM6_CLK_ENABLE();
315  /* USER CODE BEGIN TIM6_MspInit 1 */
316
317  /* USER CODE END TIM6_MspInit 1 */
318  }
319  else if(tim_baseHandle->Instance==TIM8)
320  {
321  /* USER CODE BEGIN TIM8_MspInit 0 */
322
323  /* USER CODE END TIM8_MspInit 0 */
324    /* TIM8 clock enable */
325    __HAL_RCC_TIM8_CLK_ENABLE();
326
327    __HAL_RCC_GPIOC_CLK_ENABLE();
328    /**TIM8 GPIO Configuration
329    PC6     ------> TIM8_CH1
330    */
331    GPIO_InitStruct.Pin = FAN_TACHO_Pin;
332    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
333    GPIO_InitStruct.Pull = GPIO_PULLUP;
334    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
335    GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
336    HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct);
337
338    /* TIM8 interrupt Init */
339    HAL_NVIC_SetPriority(TIM8_CC_IRQn, 5, 0);
340    HAL_NVIC_EnableIRQ(TIM8_CC_IRQn);
341  /* USER CODE BEGIN TIM8_MspInit 1 */
342
343        HAL_NVIC_SetPriority(TIM8_CC_IRQn, 15, 0);
344        HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 15, 0);
345
346  /* USER CODE END TIM8_MspInit 1 */
347  }
348}
349void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
350{
351
352  GPIO_InitTypeDef GPIO_InitStruct = {0};
353  if(timHandle->Instance==TIM1)
354  {
355  /* USER CODE BEGIN TIM1_MspPostInit 0 */
356
357  /* USER CODE END TIM1_MspPostInit 0 */
358    __HAL_RCC_GPIOE_CLK_ENABLE();
359    /**TIM1 GPIO Configuration
360    PE8     ------> TIM1_CH1N
361    PE9     ------> TIM1_CH1
362    PE13     ------> TIM1_CH3
363    */
364    GPIO_InitStruct.Pin = CHARGE_PWM_L_Pin|CHARGE_PWM_H_Pin|DISPLAY_BACKLIGHT_PWM_Pin;
365    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
366    GPIO_InitStruct.Pull = GPIO_NOPULL;
367    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
368    GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
369    HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
370
371  /* USER CODE BEGIN TIM1_MspPostInit 1 */
372
373  /* USER CODE END TIM1_MspPostInit 1 */
374  }
375  else if(timHandle->Instance==TIM3)
376  {
377  /* USER CODE BEGIN TIM3_MspPostInit 0 */
378
379  /* USER CODE END TIM3_MspPostInit 0 */
380
381    __HAL_RCC_GPIOC_CLK_ENABLE();
382    /**TIM3 GPIO Configuration
383    PC7     ------> TIM3_CH2
384    */
385    GPIO_InitStruct.Pin = FAN_PWM_Pin;
386    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
387    GPIO_InitStruct.Pull = GPIO_NOPULL;
388    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
389    GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
390    HAL_GPIO_Init(FAN_PWM_GPIO_Port, &GPIO_InitStruct);
391
392  /* USER CODE BEGIN TIM3_MspPostInit 1 */
393
394  /* USER CODE END TIM3_MspPostInit 1 */
395  }
396
397}
398
399void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
400{
401
402  if(tim_baseHandle->Instance==TIM1)
403  {
404  /* USER CODE BEGIN TIM1_MspDeInit 0 */
405
406  /* USER CODE END TIM1_MspDeInit 0 */
407    /* Peripheral clock disable */
408    __HAL_RCC_TIM1_CLK_DISABLE();
409  /* USER CODE BEGIN TIM1_MspDeInit 1 */
410
411  /* USER CODE END TIM1_MspDeInit 1 */
412  }
413  else if(tim_baseHandle->Instance==TIM3)
414  {
415  /* USER CODE BEGIN TIM3_MspDeInit 0 */
416
417  /* USER CODE END TIM3_MspDeInit 0 */
418    /* Peripheral clock disable */
419    __HAL_RCC_TIM3_CLK_DISABLE();
420
421    /* TIM3 interrupt Deinit */
422    HAL_NVIC_DisableIRQ(TIM3_IRQn);
423  /* USER CODE BEGIN TIM3_MspDeInit 1 */
424
425  /* USER CODE END TIM3_MspDeInit 1 */
426  }
427  else if(tim_baseHandle->Instance==TIM6)
428  {
429  /* USER CODE BEGIN TIM6_MspDeInit 0 */
430
431  /* USER CODE END TIM6_MspDeInit 0 */
432    /* Peripheral clock disable */
433    __HAL_RCC_TIM6_CLK_DISABLE();
434  /* USER CODE BEGIN TIM6_MspDeInit 1 */
435
436  /* USER CODE END TIM6_MspDeInit 1 */
437  }
438  else if(tim_baseHandle->Instance==TIM8)
439  {
440  /* USER CODE BEGIN TIM8_MspDeInit 0 */
441
442  /* USER CODE END TIM8_MspDeInit 0 */
443    /* Peripheral clock disable */
444    __HAL_RCC_TIM8_CLK_DISABLE();
445
446    /**TIM8 GPIO Configuration
447    PC6     ------> TIM8_CH1
448    */
449    HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin);
450
451    /* TIM8 interrupt Deinit */
452    HAL_NVIC_DisableIRQ(TIM8_CC_IRQn);
453  /* USER CODE BEGIN TIM8_MspDeInit 1 */
454
455  /* USER CODE END TIM8_MspDeInit 1 */
456  }
457}
458
459/* USER CODE BEGIN 1 */
460
461/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.