22#include "general_tim.h"
36 if (stim->htim.Instance == NULL)
43 if(stim->sTimAHBFreqMHz == NULL)
45 stim->htim.Init.Prescaler = (stim->sTimAHBFreqMHz*stim->sTickBaseUS) - 1;
47 if ((stim->sTimFreqHz != NULL))
48 stim->htim.Init.Period = ((1000000/stim->sTickBaseUS) / stim->sTimFreqHz) - 1;
49 else if (stim->htim.Init.Period == NULL)
50 stim->htim.Init.Period = 0xFFFF;
52 if(stim->sTickBasePrescaler)
54 stim->htim.Init.Prescaler = (stim->htim.Init.Prescaler + 1)/stim->sTickBasePrescaler - 1;
55 stim->htim.Init.Period = (stim->htim.Init.Period + 1)*stim->sTickBasePrescaler - 1;
58 stim->sTickBasePrescaler = 1;
62 for(
int i = 0; (stim->htim.Init.Prescaler > 0xFFFF) || (stim->htim.Init.Period > 0xFFFF); i++)
70 if(stim->htim.Init.Prescaler > 0xFFFF)
73 stim->htim.Init.Prescaler = ((stim->htim.Init.Prescaler + 1)/2) - 1;
74 stim->htim.Init.Period = ((stim->htim.Init.Period + 1)*2) - 1;
76 if(stim->sTickBaseUS > 1)
77 stim->sTickBaseUS /= 2;
79 else if (stim->sTickBaseUS == 1)
80 stim->sTickBasePrescaler *= 2;
85 if(stim->htim.Init.Period > 0xFFFF)
88 stim->htim.Init.Period = ((stim->htim.Init.Period + 1)/2) - 1;
89 stim->htim.Init.Prescaler = ((stim->htim.Init.Prescaler + 1)*2) - 1;
91 stim->sTickBaseUS *= 2;
97 TIM_Base_MspInit(&stim->htim, stim->sTimMode);
98 if (HAL_TIM_Base_Init(&stim->htim) != HAL_OK)
106 if (stim->sClockSourceConfig.ClockSource == NULL)
107 stim->sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
109 if (HAL_TIM_ConfigClockSource(&stim->htim, &stim->sClockSourceConfig) != HAL_OK)
117 if (stim->sSlaveConfig.SlaveMode)
120 if (HAL_TIM_SlaveConfigSynchro(&stim->htim, &stim->sSlaveConfig) != HAL_OK)
128 if (HAL_TIMEx_MasterConfigSynchronization(&stim->htim, &stim->sMasterConfig) != HAL_OK)
135 if (HAL_TIMEx_ConfigBreakDeadTime(&stim->htim, &stim->sBreakDeadTimeConfig) != HAL_OK)
142 __HAL_TIM_CLEAR_IT(&stim->htim, TIM_IT_UPDATE);
146 #ifdef UPDATE_TIM_PARAMS_AFTER_INITIALIZATION
147 stim->sTickBaseUS = (stim->htim.Instance->PSC+1)*stim->sTickBasePrescaler/(stim->sTimAHBFreqMHz);
148 if(stim->sTickBaseUS == 0)
150 stim->sTickBaseUS = 1;
151 stim->sTickBasePrescaler = stim->sTimAHBFreqMHz/(stim->htim.Instance->PSC+1);
154 stim->htim.Instance->CNT = 0;
172 GPIO_InitTypeDef GPIO_InitStruct = {0};
173 HAL_StatusTypeDef RES = HAL_ERROR;
177 RES = HAL_TIM_Encoder_Init(henc->htim, &henc->sConfig);
191 GPIO_InitStruct.Pin = henc->GPIO_PIN_TI1|henc->GPIO_PIN_TI2;
192 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
193 GPIO_InitStruct.Pull = GPIO_PULLUP;
194 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
196 if(GPIO_InitStruct.Alternate)
197 HAL_GPIO_Init(henc->GPIOx, &GPIO_InitStruct);
199 if(henc->GPIO_PIN_SW)
202 GPIO_InitStruct.Pin = henc->GPIO_PIN_SW;
203 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
204 GPIO_InitStruct.Pull = GPIO_PULLUP;
205 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
220HAL_StatusTypeDef TIM_Output_PWM_Init(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfigOC, uint32_t TIM_CHANNEL, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN)
222 GPIO_InitTypeDef GPIO_InitStruct = {0};
223 HAL_StatusTypeDef RES = HAL_ERROR;
226 RES = HAL_TIM_PWM_ConfigChannel(htim, sConfigOC, TIM_CHANNEL);
240 GPIO_InitStruct.Pin = GPIO_PIN;
241 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
242 if(sConfigOC->OCPolarity == TIM_OCNPOLARITY_HIGH)
243 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
245 GPIO_InitStruct.Pull = GPIO_PULLUP;
246 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
248 if(GPIO_InitStruct.Alternate)
249 HAL_GPIO_Init(GPIOx, &GPIO_InitStruct);
260HAL_StatusTypeDef TIM_OC_Comparator_Init(TIM_HandleTypeDef *htim, uint32_t TIM_CHANNEL)
262 TIM_OC_InitTypeDef sConfigOC = {0};
263 HAL_StatusTypeDef RES = HAL_ERROR;
265 sConfigOC.OCMode = TIM_OCMODE_ACTIVE;
267 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
269 RES = HAL_TIM_OC_ConfigChannel(htim, &sConfigOC, TIM_CHANNEL);
289HAL_StatusTypeDef TIM_Delay(TIM_HandleTypeDef *htim, uint16_t delay)
291 if(delay >= htim->Instance->ARR)
295 htim->Instance->CNT = 0;
298 if(htim->Instance->CNT > delay)
311HAL_StatusTypeDef TIM_Delay_Start(TIM_HandleTypeDef *htim)
313 htim->Instance->CNT = 0;
326HAL_StatusTypeDef TIM_Delay_NonBlocking(TIM_HandleTypeDef *htim, uint16_t delay)
328 if(delay >= htim->Instance->ARR)
333 if(htim->Instance->CNT <= delay)
349void TIM_Base_MspInit(TIM_HandleTypeDef* htim, TIM_ITModeTypeDef it_mode)
351 it_mode = it_mode&TIM_IT_CONF;
353 if(htim->Instance==TIM1)
356 __HAL_RCC_TIM1_CLK_ENABLE();
361 HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
362 HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
367 if(htim->Instance==TIM2)
370 __HAL_RCC_TIM2_CLK_ENABLE();
375 HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
376 HAL_NVIC_EnableIRQ(TIM2_IRQn);
381 if(htim->Instance==TIM3)
384 __HAL_RCC_TIM3_CLK_ENABLE();
389 HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
390 HAL_NVIC_EnableIRQ(TIM3_IRQn);
395 if(htim->Instance==TIM4)
398 __HAL_RCC_TIM4_CLK_ENABLE();
403 HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
404 HAL_NVIC_EnableIRQ(TIM4_IRQn);
409 if(htim->Instance==TIM5)
412 __HAL_RCC_TIM5_CLK_ENABLE();
417 HAL_NVIC_SetPriority(TIM5_IRQn, 0, 0);
418 HAL_NVIC_EnableIRQ(TIM5_IRQn);
423 if(htim->Instance==TIM6)
426 __HAL_RCC_TIM6_CLK_ENABLE();
431 HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0);
432 HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
437 if(htim->Instance==TIM7)
440 __HAL_RCC_TIM7_CLK_ENABLE();
445 HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0);
446 HAL_NVIC_EnableIRQ(TIM7_IRQn);
451 if(htim->Instance==TIM8)
454 __HAL_RCC_TIM8_CLK_ENABLE();
459 HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
460 HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
465 if(htim->Instance==TIM9)
468 __HAL_RCC_TIM9_CLK_ENABLE();
473 HAL_NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 0, 0);
474 HAL_NVIC_EnableIRQ(TIM1_BRK_TIM9_IRQn);
479 if(htim->Instance==TIM10)
482 __HAL_RCC_TIM10_CLK_ENABLE();
487 HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
488 HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
493 if(htim->Instance==TIM11)
496 __HAL_RCC_TIM11_CLK_ENABLE();
501 HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM11_IRQn, 0, 0);
502 HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM11_IRQn);
507 if(htim->Instance==TIM12)
510 __HAL_RCC_TIM12_CLK_ENABLE();
515 HAL_NVIC_SetPriority(TIM8_BRK_TIM12_IRQn, 0, 0);
516 HAL_NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn);
521 if(htim->Instance==TIM13)
524 __HAL_RCC_TIM13_CLK_ENABLE();
529 HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 0, 0);
530 HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn);
535 if(htim->Instance==TIM14)
538 __HAL_RCC_TIM14_CLK_ENABLE();
543 HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 0, 0);
544 HAL_NVIC_EnableIRQ(TIM8_TRG_COM_TIM14_IRQn);
555void TIM_Base_MspDeInit(TIM_HandleTypeDef* htim)
558 if(htim->Instance==TIM1)
560 __HAL_RCC_TIM1_FORCE_RESET();
561 __HAL_RCC_TIM1_RELEASE_RESET();
565 if(htim->Instance==TIM2)
567 __HAL_RCC_TIM2_FORCE_RESET();
568 __HAL_RCC_TIM2_RELEASE_RESET();
572 if(htim->Instance==TIM3)
574 __HAL_RCC_TIM3_FORCE_RESET();
575 __HAL_RCC_TIM3_RELEASE_RESET();
579 if(htim->Instance==TIM4)
581 __HAL_RCC_TIM4_FORCE_RESET();
582 __HAL_RCC_TIM4_RELEASE_RESET();
586 if(htim->Instance==TIM5)
588 __HAL_RCC_TIM5_FORCE_RESET();
589 __HAL_RCC_TIM5_RELEASE_RESET();
593 if(htim->Instance==TIM6)
595 __HAL_RCC_TIM6_FORCE_RESET();
596 __HAL_RCC_TIM6_RELEASE_RESET();
600 if(htim->Instance==TIM7)
602 __HAL_RCC_TIM7_FORCE_RESET();
603 __HAL_RCC_TIM7_RELEASE_RESET();
607 if(htim->Instance==TIM8)
609 __HAL_RCC_TIM8_FORCE_RESET();
610 __HAL_RCC_TIM8_RELEASE_RESET();
614 if(htim->Instance==TIM9)
616 __HAL_RCC_TIM9_FORCE_RESET();
617 __HAL_RCC_TIM9_RELEASE_RESET();
621 if(htim->Instance==TIM10)
623 __HAL_RCC_TIM10_FORCE_RESET();
624 __HAL_RCC_TIM10_RELEASE_RESET();
628 if(htim->Instance==TIM11)
630 __HAL_RCC_TIM11_FORCE_RESET();
631 __HAL_RCC_TIM11_RELEASE_RESET();
635 if(htim->Instance==TIM12)
637 __HAL_RCC_TIM12_FORCE_RESET();
638 __HAL_RCC_TIM12_RELEASE_RESET();
642 if(htim->Instance==TIM13)
644 __HAL_RCC_TIM13_FORCE_RESET();
645 __HAL_RCC_TIM13_RELEASE_RESET();
649 if(htim->Instance==TIM14)
651 __HAL_RCC_TIM14_FORCE_RESET();
652 __HAL_RCC_TIM14_RELEASE_RESET();
Заголовочный файл для модуля инициализации портов.
#define MyLibs_Error_Handler(params)
Error_Handler который будет вызыватся в библиотеке
#define TIM_Alternate_Mapping(INSTANCE)
Маппинг альтернативной функции SPI между GPIO.
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
Включить тактирование порта GPIO.