работа с регистрами перенесена на уровень hal. Таймер на шим выключается, только если не осталось больше инициализированных каналов
This commit is contained in:
1 parent
0ea1ec5b97
commit
4b030d1ad8
3 files changed
+53
-31
No files matched your search
@@ -226,6 +226,7 @@ static inline __attribute__((always_inline)) HAL_StatusTypeDef HAL_Timer32_WaitF
|
||||
void HAL_TIMER32_MspInit(TIMER32_HandleTypeDef* htimer32);
|
||||
void HAL_TIMER32_Channel_MspInit(TIMER32_CHANNEL_HandleTypeDef* timerChannel);
|
||||
HAL_StatusTypeDef HAL_Timer32_Init(TIMER32_HandleTypeDef *timer);
|
||||
HAL_StatusTypeDef HAL_Timer32_Deinit(TIMER32_HandleTypeDef *timer);
|
||||
void HAL_Timer32_State_Set(TIMER32_HandleTypeDef *timer, HAL_TIMER32_StateTypeDef state);
|
||||
void HAL_Timer32_Top_Set(TIMER32_HandleTypeDef *timer, uint32_t top);
|
||||
void HAL_Timer32_Prescaler_Set(TIMER32_HandleTypeDef *timer, uint32_t prescaler);
|
||||
|
||||
@@ -78,6 +78,41 @@ HAL_StatusTypeDef HAL_Timer32_Init(TIMER32_HandleTypeDef *timer)
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
HAL_StatusTypeDef HAL_Timer32_Deinit(TIMER32_HandleTypeDef *timer)
|
||||
{
|
||||
if ((timer->Instance != TIMER32_0) && (timer->Instance != TIMER32_1) && (timer->Instance != TIMER32_2))
|
||||
{
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
if (timer->Instance == TIMER32_0)
|
||||
{
|
||||
__HAL_PCC_TIMER32_0_CLK_DISABLE();
|
||||
}
|
||||
|
||||
if (timer->Instance == TIMER32_1)
|
||||
{
|
||||
__HAL_PCC_TIMER32_1_CLK_DISABLE();
|
||||
if (timer->Clock.Source == TIMER32_SOURCE_TX_PAD)
|
||||
HAL_GPIO_PinConfig(GPIO_0, GPIO_PIN_4, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA);
|
||||
}
|
||||
|
||||
if (timer->Instance == TIMER32_2)
|
||||
{
|
||||
__HAL_PCC_TIMER32_2_CLK_DISABLE();
|
||||
if (timer->Clock.Source == TIMER32_SOURCE_TX_PAD)
|
||||
HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_4, HAL_GPIO_MODE_GPIO_INPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA);
|
||||
}
|
||||
|
||||
HAL_Timer32_InterruptMask_Clear(timer, 0xFFFFFFFF);
|
||||
HAL_Timer32_Prescaler_Set(timer, 0);
|
||||
HAL_Timer32_InterruptFlags_ClearMask(timer, 0xFFFFFFFF);
|
||||
HAL_Timer32_InterruptFlags_Clear(timer);
|
||||
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
|
||||
void HAL_Timer32_State_Set(TIMER32_HandleTypeDef *timer, HAL_TIMER32_StateTypeDef state)
|
||||
{
|
||||
timer->State = state;
|
||||
@@ -199,7 +234,7 @@ HAL_StatusTypeDef HAL_Timer32_Channel_Init(TIMER32_CHANNEL_HandleTypeDef *timerC
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
HAL_TIMER32_Channel_MspInit(timerChannel);
|
||||
// HAL_TIMER32_Channel_MspInit(timerChannel); // здесь инициализируются сразу все каналы выбранного таймера, а нам такого не надо
|
||||
|
||||
timerChannel->Instance = (TIMER32_CHANNEL_TypeDef *)&(timerChannel->TimerInstance->CHANNELS[timerChannel->ChannelIndex]);
|
||||
|
||||
@@ -220,6 +255,8 @@ HAL_StatusTypeDef HAL_Timer32_Channel_DeInit(TIMER32_CHANNEL_HandleTypeDef *time
|
||||
return HAL_ERROR;
|
||||
}
|
||||
|
||||
timerChannel->Instance = (TIMER32_CHANNEL_TypeDef *)&(timerChannel->TimerInstance->CHANNELS[timerChannel->ChannelIndex]);
|
||||
|
||||
HAL_Timer32_Channel_Disable(timerChannel);
|
||||
HAL_Timer32_Channel_CaptureEdge_Set(timerChannel, 0);
|
||||
HAL_Timer32_Channel_ICR_Clear(timerChannel);
|
||||
|
||||
Reference in new issue
Block a user