Files
Frame-rate-optimization/Bsp/bsp_moto.c
2026-04-09 10:14:20 +08:00

63 lines
1.9 KiB
C

#include "bsp_moto.h"
void bsp_moto_init(uint16_t div, uint16_t period)
{
gpio_init_type gpio_init_struct;
tmr_output_config_type tmr_output_struct;
/* enable tmr1/gpioa/gpiob clock */
crm_periph_clock_enable(CRM_TMR4_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOB, &gpio_init_struct);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE6, GPIO_MUX_2);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_2);
tmr_reset(TMR4);
tmr_base_init(TMR4, period, div);
tmr_cnt_dir_set(TMR4, TMR_COUNT_UP);
tmr_output_default_para_init(&tmr_output_struct);
tmr_output_struct.oc_mode = TMR_OUTPUT_CONTROL_PWM_MODE_A;
tmr_output_struct.oc_output_state = TRUE;
tmr_output_struct.oc_polarity = TMR_OUTPUT_ACTIVE_HIGH;
tmr_output_struct.oc_idle_state = FALSE;
/* channel 1 */
tmr_output_channel_config(TMR4, TMR_SELECT_CHANNEL_1, &tmr_output_struct);
tmr_output_channel_buffer_enable(TMR4, TMR_SELECT_CHANNEL_1, TRUE);
/* channel 2 */
tmr_output_channel_config(TMR4, TMR_SELECT_CHANNEL_2, &tmr_output_struct);
tmr_output_channel_buffer_enable(TMR4, TMR_SELECT_CHANNEL_2, TRUE);
tmr_period_buffer_enable(TMR4, TRUE);
/* enable tmr1 */
tmr_counter_enable(TMR4, TRUE);
}
void set_moto_out(uint8_t dir, uint32_t speed)
{
if( dir == 1 )
{
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_1, 0);
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_2, speed);
}
else
{
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_1, speed);
tmr_channel_value_set(TMR4, TMR_SELECT_CHANNEL_2, 0);
}
}