Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/targets/f7/furi_hal/furi_hal_pwm.c')
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_pwm.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/firmware/targets/f7/furi_hal/furi_hal_pwm.c b/firmware/targets/f7/furi_hal/furi_hal_pwm.c
new file mode 100644
index 00000000..1be4738d
--- /dev/null
+++ b/firmware/targets/f7/furi_hal/furi_hal_pwm.c
@@ -0,0 +1,49 @@
+#include "furi_hal_pwm.h"
+
+void hal_pwm_set(float value, float freq, TIM_HandleTypeDef* tim, uint32_t channel) {
+ tim->Init.CounterMode = TIM_COUNTERMODE_UP;
+ tim->Init.Period = (uint32_t)((SystemCoreClock / (tim->Init.Prescaler + 1)) / freq) - 1;
+ tim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ tim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ HAL_TIM_PWM_Init(tim);
+
+ TIM_OC_InitTypeDef sConfigOC;
+
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = (uint16_t)(tim->Init.Period * value);
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ HAL_TIM_PWM_ConfigChannel(tim, &sConfigOC, channel);
+ HAL_TIM_PWM_Start(tim, channel);
+}
+
+void hal_pwmn_set(float value, float freq, TIM_HandleTypeDef* tim, uint32_t channel) {
+ tim->Init.CounterMode = TIM_COUNTERMODE_UP;
+ tim->Init.Period = (uint32_t)((SystemCoreClock / (tim->Init.Prescaler + 1)) / freq) - 1;
+ tim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ tim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+ HAL_TIM_PWM_Init(tim);
+
+ TIM_OC_InitTypeDef sConfigOC;
+
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = (uint16_t)(tim->Init.Period * value);
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
+ sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
+ HAL_TIM_PWM_ConfigChannel(tim, &sConfigOC, channel);
+ HAL_TIMEx_PWMN_Start(tim, channel);
+}
+
+void hal_pwm_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
+ HAL_TIM_PWM_Stop(tim, channel);
+}
+
+void hal_pwmn_stop(TIM_HandleTypeDef* tim, uint32_t channel) {
+ HAL_TIMEx_PWMN_Stop(tim, channel);
+}