In uhal_pwm.c
void uhal_rak3172_pwm_init(udrv_pwm_port port, uint8_t prescaler, uint32_t pin) {
if (pin == 0 || pin == 1 || pin == 15) {
htim.Instance = TIM2;
} else {
htim.Instance = TIM1;
}
htim.Init.Prescaler = prescaler;
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = 3;
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim.Init.RepetitionCounter = 0;
htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
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;
switch (pin) {
case 0:
case 15:
if (HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
break;
case 1:
case 9:
if (HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
{
Error_Handler();
}
break;
case 10:
if (HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
break;
case 8:
if (HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
{
Error_Handler();
}
break;
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.BreakAFMode = TIM_BREAK_AFMODE_INPUT;
sBreakDeadTimeConfig.Break2State = TIM_BREAK2_DISABLE;
sBreakDeadTimeConfig.Break2Polarity = TIM_BREAK2POLARITY_HIGH;
sBreakDeadTimeConfig.Break2Filter = 0;
sBreakDeadTimeConfig.Break2AFMode = TIM_BREAK_AFMODE_INPUT;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim, &sBreakDeadTimeConfig) != HAL_OK)
{
Error_Handler();
}
uhal_pwm_pin_init(pin);
}
int32_t uhal_rak3172_pwm_set_duty(udrv_pwm_port port, uint8_t prescaler, uint32_t duty) {
pwm_disable(port);
pwm_deinit(port);
sConfigOC.Pulse = duty;
uhal_rak3172_pwm_init(port, prescaler, pwm_status[port].pin);
pwm_enable(port);
}
in uhal_pwm.h
void uhal_rak3172_pwm_init(udrv_pwm_port port, uint8_t prescaler, uint32_t pin);
int32_t uhal_rak3172_pwm_set_duty(udrv_pwm_port port, uint8_t prescaler, uint32_t duty);
in wiringTone.cpp (rak_rui\hardware\stm32\4.2.0\cores\STM32WLE\component\rui_v3_api)
void RAK3172_pwm_write(uint8_t pin, uint8_t prescaler)
{
int i;
for(i=0;i<UDRV_PWM_MAX;i++)
{
if(used_pwm_ports.pins[i] == pin || used_pwm_ports.pins[i] ==0)
{
used_pwm_ports.cur_port = i;
used_pwm_ports.pins[i] = pin;
break;
}
if(i == UDRV_PWM_MAX-1)
{
used_pwm_ports.cur_port = 0;
used_pwm_ports.pins[0] = pin;
}
}
udrv_pwm_disable((udrv_pwm_port)used_pwm_ports.cur_port);
udrv_pwm_deinit((udrv_pwm_port)used_pwm_ports.cur_port);
udrv_rak3172_pwm((udrv_pwm_port)used_pwm_ports.cur_port, prescaler, pin);
udrv_pwm_enable((udrv_pwm_port)used_pwm_ports.cur_port, PWM_NO_TIMEOUT);
udrv_rak3172_pwm_set_duty((udrv_pwm_port)used_pwm_ports.cur_port, prescaler, 2);
}
in ruiTop.h
void RAK3172_pwm_write(uint8_t pin, uint8_t prescaler);
in udrv_pwm.c (rak_rui\hardware\stm32\4.2.0\cores\STM32WLE\component\udrv\pwm)
void udrv_rak3172_pwm(udrv_pwm_port port, uint8_t prescaler, uint32_t pin) {
uhal_rak3172_pwm_init(port, prescaler, pin);
}
int32_t udrv_rak3172_pwm_set_duty(udrv_pwm_port port, uint8_t prescaler, uint32_t duty) {
return uhal_rak3172_pwm_set_duty(port, prescaler, duty);
}
in udrv_pwm.h (rak_rui\hardware\stm32\4.2.0\cores\STM32WLE\component\udrv\pwm)
void udrv_rak3172_pwm(udrv_pwm_port port, uint8_t prescaler, uint32_t pin);
int32_t udrv_rak3172_pwm_set_duty(udrv_pwm_port port, uint8_t prescaler, uint32_t duty);