try to fix submodule
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
|
||||
#include "./STM32PWMInput.h"
|
||||
|
||||
#if defined(_STM32_DEF_)
|
||||
|
||||
|
||||
|
||||
STM32PWMInput::STM32PWMInput(int pin){
|
||||
_pin = digitalPinToPinName(pin);
|
||||
};
|
||||
|
||||
|
||||
STM32PWMInput::~STM32PWMInput(){};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int STM32PWMInput::initialize(){
|
||||
pinmap_pinout(_pin, PinMap_TIM);
|
||||
uint32_t channel = STM_PIN_CHANNEL(pinmap_function(_pin, PinMap_TIM));
|
||||
timer.Instance = (TIM_TypeDef *)pinmap_peripheral(_pin, PinMap_TIM);
|
||||
timer.Init.Prescaler = 0;
|
||||
timer.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
timer.Init.Period = 4.294967295E9; // TODO max period, depends on which timer is used - 32 bits or 16 bits
|
||||
timer.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
timer.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
if (channel!=1 && channel!=2) // only channels 1 & 2 supported
|
||||
return -10;
|
||||
useChannel2 = (channel==2);// remember the channel
|
||||
if (HAL_TIM_Base_Init(&timer) != HAL_OK) {
|
||||
return -1;
|
||||
}
|
||||
TIM_ClockConfigTypeDef clkCfg = { .ClockSource=TIM_CLOCKSOURCE_INTERNAL };
|
||||
if (HAL_TIM_ConfigClockSource(&timer, &clkCfg) != HAL_OK) {
|
||||
return -2;
|
||||
}
|
||||
if (HAL_TIM_IC_Init(&timer) != HAL_OK) {
|
||||
return -3;
|
||||
}
|
||||
|
||||
TIM_SlaveConfigTypeDef slCfg = {
|
||||
.SlaveMode = TIM_SLAVEMODE_RESET,
|
||||
.InputTrigger = (channel==1)?TIM_TS_TI1FP1:TIM_TS_TI2FP2,
|
||||
.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_RISING,
|
||||
.TriggerPrescaler = TIM_ICPSC_DIV1,
|
||||
.TriggerFilter = 0
|
||||
};
|
||||
if (HAL_TIM_SlaveConfigSynchro(&timer, &slCfg) != HAL_OK) {
|
||||
return -4;
|
||||
}
|
||||
TIM_IC_InitTypeDef icCfg = {
|
||||
.ICPolarity = (channel==1)?TIM_INPUTCHANNELPOLARITY_RISING:TIM_INPUTCHANNELPOLARITY_FALLING,
|
||||
.ICSelection = (channel==1)?TIM_ICSELECTION_DIRECTTI:TIM_ICSELECTION_INDIRECTTI,
|
||||
.ICPrescaler = TIM_ICPSC_DIV1,
|
||||
.ICFilter = 0
|
||||
};
|
||||
if (HAL_TIM_IC_ConfigChannel(&timer, &icCfg, TIM_CHANNEL_1) != HAL_OK) {
|
||||
return -5;
|
||||
}
|
||||
icCfg.ICPolarity = (channel==1)?TIM_INPUTCHANNELPOLARITY_FALLING:TIM_INPUTCHANNELPOLARITY_RISING;
|
||||
icCfg.ICSelection = (channel==1)?TIM_ICSELECTION_INDIRECTTI:TIM_ICSELECTION_DIRECTTI;
|
||||
if (HAL_TIM_IC_ConfigChannel(&timer, &icCfg, TIM_CHANNEL_2) != HAL_OK) {
|
||||
return -6;
|
||||
}
|
||||
TIM_MasterConfigTypeDef mCfg = {
|
||||
.MasterOutputTrigger = TIM_TRGO_RESET,
|
||||
.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE
|
||||
};
|
||||
if (HAL_TIMEx_MasterConfigSynchronization(&timer, &mCfg) != HAL_OK) {
|
||||
return -7;
|
||||
}
|
||||
if (HAL_TIM_IC_Start(&timer, TIM_CHANNEL_1)!=HAL_OK) {
|
||||
return -8;
|
||||
}
|
||||
if (HAL_TIM_IC_Start(&timer, TIM_CHANNEL_2)!=HAL_OK) {
|
||||
return -9;
|
||||
}
|
||||
timer.Instance->CR1 |= TIM_CR1_CEN;
|
||||
return 0;
|
||||
};
|
||||
|
||||
|
||||
float STM32PWMInput::getDutyCyclePercent(){
|
||||
uint32_t period = getPeriodTicks();
|
||||
if (period<1) return 0.0f;
|
||||
return getDutyCycleTicks() / (float)period * 100.0f;
|
||||
};
|
||||
|
||||
|
||||
uint32_t STM32PWMInput::getDutyCycleTicks(){
|
||||
if (useChannel2)
|
||||
return timer.Instance->CCR1;
|
||||
else
|
||||
return timer.Instance->CCR2;
|
||||
};
|
||||
|
||||
|
||||
uint32_t STM32PWMInput::getPeriodTicks(){
|
||||
if (useChannel2)
|
||||
return timer.Instance->CCR2;
|
||||
else
|
||||
return timer.Instance->CCR1;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user