Changeset 19 for trunk/firmware_v2/Core
- Timestamp:
- Aug 19, 2025, 11:11:18 AM (8 days ago)
- Location:
- trunk/firmware_v2/Core
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/firmware_v2/Core/Inc/stm32c0xx_it.h
r17 r19 53 53 void SysTick_Handler(void); 54 54 void DMA1_Channel1_IRQHandler(void); 55 void DMA1_Channel2_3_IRQHandler(void); 55 56 void TIM16_IRQHandler(void); 56 57 /* USER CODE BEGIN EFP */ -
trunk/firmware_v2/Core/Inc/tim.h
r17 r19 48 48 /* USER CODE BEGIN Prototypes */ 49 49 50 void SetFANSpeed(unsigned speed); 51 50 52 /* USER CODE END Prototypes */ 51 53 -
trunk/firmware_v2/Core/Src/dma.c
r17 r19 47 47 HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); 48 48 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); 49 52 50 53 } -
trunk/firmware_v2/Core/Src/stm32c0xx_it.c
r18 r19 60 60 /* External variables --------------------------------------------------------*/ 61 61 extern DMA_HandleTypeDef hdma_adc1; 62 extern DMA_HandleTypeDef hdma_tim16_ch1; 62 63 extern TIM_HandleTypeDef htim16; 63 64 /* USER CODE BEGIN EV */ … … 160 161 161 162 /** 163 * @brief This function handles DMA1 channel 2 and channel 3 interrupts. 164 */ 165 void 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 /** 162 177 * @brief This function handles TIM16 global interrupt. 163 178 */ … … 177 192 178 193 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; 189 204 190 205 191 206 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef* htim) 192 207 { 208 extern uint32_t ic_overflows; 209 193 210 if (htim->Instance == TIM16) 194 211 { 195 static unsigned stateCnt; 196 212 printf("Full\n"); 213 ic_overflows = 0U; 214 /*static unsigned stateCnt; 215 197 216 capturedValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); 198 217 T[stateCnt++] = capturedValue + 65536U * overflowCnt; … … 217 236 218 237 stateCnt = 0U; 219 } 238 }*/ 220 239 } 221 240 } … … 225 244 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* htim) 226 245 { 246 extern uint32_t ic_overflows; 247 227 248 if (htim->Instance == TIM16) 228 249 { 229 overflowCnt++; 250 ic_overflows++; 251 printf("Ovf\n"); 252 //ic_overflows %= 230 253 } 231 254 } 232 255 256 //----------------------------------------------------------------------------- 257 258 void 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 233 269 /* USER CODE END 1 */ -
trunk/firmware_v2/Core/Src/tim.c
r18 r19 26 26 #define AVG_NUM (64U) 27 27 28 uint 32_t ic_buf[AVG_NUM][STATE_NUM];29 uint32_t ic_overflows [AVG_NUM][STATE_NUM];28 uint16_t ic_buf[AVG_NUM][STATE_NUM]; 29 uint32_t ic_overflows; 30 30 31 31 /* USER CODE END 0 */ … … 33 33 TIM_HandleTypeDef htim16; 34 34 TIM_HandleTypeDef htim17; 35 DMA_HandleTypeDef hdma_tim16_ch1; 35 36 36 37 /* TIM16 init function */ … … 74 75 /* USER CODE BEGIN TIM16_Init 2 */ 75 76 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); 77 79 78 80 /* USER CODE END TIM16_Init 2 */ … … 134 136 } 135 137 /* USER CODE BEGIN TIM17_Init 2 */ 138 139 136 140 137 141 /* USER CODE END TIM17_Init 2 */ … … 163 167 HAL_GPIO_Init(FAN_TACHO_GPIO_Port, &GPIO_InitStruct); 164 168 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 165 187 /* TIM16 interrupt Init */ 166 188 HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0); … … 228 250 HAL_GPIO_DeInit(FAN_TACHO_GPIO_Port, FAN_TACHO_Pin); 229 251 252 /* TIM16 DMA DeInit */ 253 HAL_DMA_DeInit(tim_baseHandle->hdma[TIM_DMA_ID_CC1]); 254 230 255 /* TIM16 interrupt Deinit */ 231 256 HAL_NVIC_DisableIRQ(TIM16_IRQn); … … 249 274 /* USER CODE BEGIN 1 */ 250 275 276 void 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 251 288 /* USER CODE END 1 */
Note: See TracChangeset
for help on using the changeset viewer.