Changeset 23 for trunk/firmware_v2/Core/Src/tim.c
- Timestamp:
- Aug 21, 2025, 3:14:57 PM (6 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/Core/Src/tim.c
r22 r23 23 23 /* USER CODE BEGIN 0 */ 24 24 25 # define STATE_NUM (2U)26 #define AVG_NUM (8U) 27 28 uint 16_t ic_buf[AVG_NUM][STATE_NUM];25 #include <stdio.h> 26 27 uint32_t period[STATE_NUM]; 28 uint32_t freq; 29 29 uint32_t ic_overflows; 30 30 31 31 /* USER CODE END 0 */ 32 32 33 TIM_HandleTypeDef htim 3;33 TIM_HandleTypeDef htim16; 34 34 TIM_HandleTypeDef htim17; 35 DMA_HandleTypeDef hdma_tim3_ch1; 36 37 /* TIM3 init function */ 38 void MX_TIM3_Init(void) 39 { 40 41 /* USER CODE BEGIN TIM3_Init 0 */ 42 43 /* USER CODE END TIM3_Init 0 */ 44 45 TIM_ClockConfigTypeDef sClockSourceConfig = {0}; 46 TIM_SlaveConfigTypeDef sSlaveConfig = {0}; 47 TIM_MasterConfigTypeDef sMasterConfig = {0}; 35 36 /* TIM16 init function */ 37 void MX_TIM16_Init(void) 38 { 39 40 /* USER CODE BEGIN TIM16_Init 0 */ 41 42 /* USER CODE END TIM16_Init 0 */ 43 48 44 TIM_IC_InitTypeDef sConfigIC = {0}; 49 45 50 /* USER CODE BEGIN TIM3_Init 1 */ 51 52 /* USER CODE END TIM3_Init 1 */ 53 htim3.Instance = TIM3; 54 htim3.Init.Prescaler = 1; 55 htim3.Init.CounterMode = TIM_COUNTERMODE_UP; 56 htim3.Init.Period = 65535; 57 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 58 htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; 59 if (HAL_TIM_Base_Init(&htim3) != HAL_OK) 60 { 61 Error_Handler(); 62 } 63 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; 64 if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) 65 { 66 Error_Handler(); 67 } 68 if (HAL_TIM_IC_Init(&htim3) != HAL_OK) 69 { 70 Error_Handler(); 71 } 72 sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET; 73 sSlaveConfig.InputTrigger = TIM_TS_TI1FP1; 74 sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_FALLING; 75 sSlaveConfig.TriggerFilter = 0; 76 if (HAL_TIM_SlaveConfigSynchro(&htim3, &sSlaveConfig) != HAL_OK) 77 { 78 Error_Handler(); 79 } 80 sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 81 sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_ENABLE; 82 if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) 46 /* USER CODE BEGIN TIM16_Init 1 */ 47 48 /* USER CODE END TIM16_Init 1 */ 49 htim16.Instance = TIM16; 50 htim16.Init.Prescaler = 23; 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) 83 61 { 84 62 Error_Handler(); … … 88 66 sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; 89 67 sConfigIC.ICFilter = 0; 90 if (HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) 91 { 92 Error_Handler(); 93 } 94 /* USER CODE BEGIN TIM3_Init 2 */ 95 96 __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE); 97 HAL_TIM_IC_Start_DMA(&htim3, TIM_CHANNEL_1, (uint32_t*)ic_buf, STATE_NUM * AVG_NUM); 98 99 /* USER CODE END TIM3_Init 2 */ 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 */ 100 75 101 76 } … … 132 107 } 133 108 sConfigOC.OCMode = TIM_OCMODE_PWM1; 134 sConfigOC.Pulse = 64;109 sConfigOC.Pulse = 0; 135 110 sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW; 136 111 sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; … … 167 142 168 143 GPIO_InitTypeDef GPIO_InitStruct = {0}; 169 if(tim_baseHandle->Instance==TIM 3)170 { 171 /* USER CODE BEGIN TIM 3_MspInit 0 */172 173 /* USER CODE END TIM 3_MspInit 0 */174 /* TIM 3clock enable */175 __HAL_RCC_TIM 3_CLK_ENABLE();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(); 176 151 177 152 __HAL_RCC_GPIOA_CLK_ENABLE(); 178 /**TIM 3GPIO Configuration179 PA6 ------> TIM 3_CH1153 /**TIM16 GPIO Configuration 154 PA6 ------> TIM16_CH1 180 155 */ 181 156 GPIO_InitStruct.Pin = FAN_TACHO_Pin; … … 183 158 GPIO_InitStruct.Pull = GPIO_PULLUP; 184 159 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 185 GPIO_InitStruct.Alternate = GPIO_AF 1_TIM3;160 GPIO_InitStruct.Alternate = GPIO_AF5_TIM16; 186 161 HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct); 187 162 188 /* TIM3 DMA Init */ 189 /* TIM3_CH1 Init */ 190 hdma_tim3_ch1.Instance = DMA1_Channel2; 191 hdma_tim3_ch1.Init.Request = DMA_REQUEST_TIM3_CH1; 192 hdma_tim3_ch1.Init.Direction = DMA_PERIPH_TO_MEMORY; 193 hdma_tim3_ch1.Init.PeriphInc = DMA_PINC_DISABLE; 194 hdma_tim3_ch1.Init.MemInc = DMA_MINC_ENABLE; 195 hdma_tim3_ch1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 196 hdma_tim3_ch1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; 197 hdma_tim3_ch1.Init.Mode = DMA_CIRCULAR; 198 hdma_tim3_ch1.Init.Priority = DMA_PRIORITY_LOW; 199 if (HAL_DMA_Init(&hdma_tim3_ch1) != HAL_OK) 200 { 201 Error_Handler(); 202 } 203 204 __HAL_LINKDMA(tim_baseHandle,hdma[TIM_DMA_ID_CC1],hdma_tim3_ch1); 205 206 /* TIM3 interrupt Init */ 207 HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); 208 HAL_NVIC_EnableIRQ(TIM3_IRQn); 209 /* USER CODE BEGIN TIM3_MspInit 1 */ 210 211 /* USER CODE END TIM3_MspInit 1 */ 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 */ 212 169 } 213 170 else if(tim_baseHandle->Instance==TIM17) … … 256 213 { 257 214 258 if(tim_baseHandle->Instance==TIM 3)259 { 260 /* USER CODE BEGIN TIM 3_MspDeInit 0 */261 262 /* USER CODE END TIM 3_MspDeInit 0 */215 if(tim_baseHandle->Instance==TIM16) 216 { 217 /* USER CODE BEGIN TIM16_MspDeInit 0 */ 218 219 /* USER CODE END TIM16_MspDeInit 0 */ 263 220 /* Peripheral clock disable */ 264 __HAL_RCC_TIM 3_CLK_DISABLE();265 266 /**TIM 3GPIO Configuration267 PA6 ------> TIM 3_CH1221 __HAL_RCC_TIM16_CLK_DISABLE(); 222 223 /**TIM16 GPIO Configuration 224 PA6 ------> TIM16_CH1 268 225 */ 269 226 HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin); 270 227 271 /* TIM3 DMA DeInit */ 272 HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_CC1]); 273 274 /* TIM3 interrupt Deinit */ 275 HAL_NVIC_DisableIRQ(TIM3_IRQn); 276 /* USER CODE BEGIN TIM3_MspDeInit 1 */ 277 278 /* USER CODE END TIM3_MspDeInit 1 */ 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 */ 279 233 } 280 234 else if(tim_baseHandle->Instance==TIM17) … … 293 247 /* USER CODE BEGIN 1 */ 294 248 249 static unsigned lastSpeed; 250 295 251 void SetFANSpeed(unsigned speed) 296 252 { 297 const unsigned MAX_RPM = 100 0U; // 100.0%253 const unsigned MAX_RPM = 100U; // 100.0% 298 254 299 255 if (speed > MAX_RPM) speed = MAX_RPM; 300 256 301 const unsigned MAX_PWM = __HAL_TIM_GET_AUTORELOAD(&htim17); 257 lastSpeed = speed; 258 259 const unsigned MAX_PWM = __HAL_TIM_GET_AUTORELOAD(&htim17) + 1U; 260 //printf("%u", MAX_PWM); 302 261 const unsigned newPWM = (MAX_PWM * speed/ MAX_RPM); 303 262 … … 305 264 } 306 265 266 //----------------------------------------------------------------------------- 267 268 unsigned GetLastSpeed(void) 269 { 270 return lastSpeed; 271 } 272 307 273 /* USER CODE END 1 */
Note: See TracChangeset
for help on using the changeset viewer.