source: trunk/firmware_v2/Core/Src/tim.c

Last change on this file was 24, checked in by f.jahn, 5 days ago
LVP, OVP, LVP
OVP modes implementiert
  • Lüftersteuerung in eigenes Modul verlagert
File size: 6.7 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#include <stdio.h>
26
27
28
29
30
31/* USER CODE END 0 */
32
33TIM_HandleTypeDef htim16;
34TIM_HandleTypeDef htim17;
35
36/* TIM16 init function */
37void MX_TIM16_Init(void)
38{
39
40  /* USER CODE BEGIN TIM16_Init 0 */
41
42  /* USER CODE END TIM16_Init 0 */
43
44  TIM_IC_InitTypeDef sConfigIC = {0};
45
46  /* USER CODE BEGIN TIM16_Init 1 */
47
48  /* USER CODE END TIM16_Init 1 */
49  htim16.Instance = TIM16;
50  htim16.Init.Prescaler = 119;
51  htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
52  htim16.Init.Period = 65535;
53  htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
54  htim16.Init.RepetitionCounter = 0;
55  htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
56  if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
57  {
58    Error_Handler();
59  }
60  if (HAL_TIM_IC_Init(&htim16) != HAL_OK)
61  {
62    Error_Handler();
63  }
64  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
65  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
66  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
67  sConfigIC.ICFilter = 0;
68  if (HAL_TIM_IC_ConfigChannel(&htim16, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
69  {
70    Error_Handler();
71  }
72  /* USER CODE BEGIN TIM16_Init 2 */
73
74  /* USER CODE END TIM16_Init 2 */
75
76}
77/* TIM17 init function */
78void MX_TIM17_Init(void)
79{
80
81  /* USER CODE BEGIN TIM17_Init 0 */
82
83  // FAN PWM at 25kHz
84
85  /* USER CODE END TIM17_Init 0 */
86
87  TIM_OC_InitTypeDef sConfigOC = {0};
88  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
89
90  /* USER CODE BEGIN TIM17_Init 1 */
91
92  /* USER CODE END TIM17_Init 1 */
93  htim17.Instance = TIM17;
94  htim17.Init.Prescaler = 0;
95  htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
96  htim17.Init.Period = 479;
97  htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
98  htim17.Init.RepetitionCounter = 0;
99  htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
100  if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
101  {
102    Error_Handler();
103  }
104  if (HAL_TIM_PWM_Init(&htim17) != HAL_OK)
105  {
106    Error_Handler();
107  }
108  sConfigOC.OCMode = TIM_OCMODE_PWM1;
109  sConfigOC.Pulse = 0;
110  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
111  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
112  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
113  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
114  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
115  if (HAL_TIM_PWM_ConfigChannel(&htim17, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
116  {
117    Error_Handler();
118  }
119  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
120  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
121  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
122  sBreakDeadTimeConfig.DeadTime = 0;
123  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
124  sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
125  sBreakDeadTimeConfig.BreakFilter = 0;
126  sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
127  if (HAL_TIMEx_ConfigBreakDeadTime(&htim17, &sBreakDeadTimeConfig) != HAL_OK)
128  {
129    Error_Handler();
130  }
131  /* USER CODE BEGIN TIM17_Init 2 */
132
133 
134
135  /* USER CODE END TIM17_Init 2 */
136  HAL_TIM_MspPostInit(&htim17);
137
138}
139
140void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
141{
142
143  GPIO_InitTypeDef GPIO_InitStruct = {0};
144  if(tim_baseHandle->Instance==TIM16)
145  {
146  /* USER CODE BEGIN TIM16_MspInit 0 */
147
148  /* USER CODE END TIM16_MspInit 0 */
149    /* TIM16 clock enable */
150    __HAL_RCC_TIM16_CLK_ENABLE();
151
152    __HAL_RCC_GPIOA_CLK_ENABLE();
153    /**TIM16 GPIO Configuration
154    PA6     ------> TIM16_CH1
155    */
156    GPIO_InitStruct.Pin = FAN_TACHO_Pin;
157    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
158    GPIO_InitStruct.Pull = GPIO_PULLUP;
159    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
160    GPIO_InitStruct.Alternate = GPIO_AF5_TIM16;
161    HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct);
162
163    /* TIM16 interrupt Init */
164    HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0);
165    HAL_NVIC_EnableIRQ(TIM16_IRQn);
166  /* USER CODE BEGIN TIM16_MspInit 1 */
167
168  /* USER CODE END TIM16_MspInit 1 */
169  }
170  else if(tim_baseHandle->Instance==TIM17)
171  {
172  /* USER CODE BEGIN TIM17_MspInit 0 */
173
174  /* USER CODE END TIM17_MspInit 0 */
175    /* TIM17 clock enable */
176    __HAL_RCC_TIM17_CLK_ENABLE();
177  /* USER CODE BEGIN TIM17_MspInit 1 */
178
179  /* USER CODE END TIM17_MspInit 1 */
180  }
181}
182void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
183{
184
185  GPIO_InitTypeDef GPIO_InitStruct = {0};
186  if(timHandle->Instance==TIM17)
187  {
188  /* USER CODE BEGIN TIM17_MspPostInit 0 */
189
190  /* USER CODE END TIM17_MspPostInit 0 */
191
192    __HAL_RCC_GPIOA_CLK_ENABLE();
193    /**TIM17 GPIO Configuration
194    PA7     ------> TIM17_CH1
195    */
196    GPIO_InitStruct.Pin = FAN_PWM_Pin;
197    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
198    GPIO_InitStruct.Pull = GPIO_NOPULL;
199    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
200    GPIO_InitStruct.Alternate = GPIO_AF5_TIM17;
201    HAL_GPIO_Init(FAN_PWM_GPIO_Port, &GPIO_InitStruct);
202
203  /* USER CODE BEGIN TIM17_MspPostInit 1 */
204
205  if (HAL_TIM_PWM_Start(timHandle, TIM_CHANNEL_1) != HAL_OK) Error_Handler();
206
207  /* USER CODE END TIM17_MspPostInit 1 */
208  }
209
210}
211
212void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
213{
214
215  if(tim_baseHandle->Instance==TIM16)
216  {
217  /* USER CODE BEGIN TIM16_MspDeInit 0 */
218
219  /* USER CODE END TIM16_MspDeInit 0 */
220    /* Peripheral clock disable */
221    __HAL_RCC_TIM16_CLK_DISABLE();
222
223    /**TIM16 GPIO Configuration
224    PA6     ------> TIM16_CH1
225    */
226    HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin);
227
228    /* TIM16 interrupt Deinit */
229    HAL_NVIC_DisableIRQ(TIM16_IRQn);
230  /* USER CODE BEGIN TIM16_MspDeInit 1 */
231
232  /* USER CODE END TIM16_MspDeInit 1 */
233  }
234  else if(tim_baseHandle->Instance==TIM17)
235  {
236  /* USER CODE BEGIN TIM17_MspDeInit 0 */
237
238  /* USER CODE END TIM17_MspDeInit 0 */
239    /* Peripheral clock disable */
240    __HAL_RCC_TIM17_CLK_DISABLE();
241  /* USER CODE BEGIN TIM17_MspDeInit 1 */
242
243  /* USER CODE END TIM17_MspDeInit 1 */
244  }
245}
246
247/* USER CODE BEGIN 1 */
248
249
250/* USER CODE END 1 */
Note: See TracBrowser for help on using the repository browser.