motor_f103/User/board/board.c

88 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "board.h"
uart_t *uart = NULL;
static void uart_rx_cb(uint8_t uart_index, uint8_t *data, uint16_t len)
{
}
static void uart_init(void)
{
if (uart == NULL)
{
uart = uart_create(USART1, TRUE, UART_RXSIZE, uart_rx_cb, TRUE, UART_TXSIZE, NULL);
uart->uart_index = 0;
uart->dma = DMA1;
uart->dma_rx_channel = LL_DMA_CHANNEL_5;
uart->dma_tx_channel = LL_DMA_CHANNEL_4;
uart_recv_en(uart, FALSE);
}
}
static void motor_init(void)
{
GPIO_RESET(AIN1_GPIO_Port, AIN1_Pin);
GPIO_RESET(AIN2_GPIO_Port, AIN2_Pin);
}
/**
* @brief 设置电机PWM占空比
*
* 根据给定的百分比设置电机的PWM占空比以控制电机的转速。
*
* @param percent PWM占空比百分比范围应在[-100, 100]之间。
* -100%表示反转最大速度0%表示停止100%表示正转最大速度。
*/
void set_motor_pwm(float32 percent)
{
if (percent > 0)
{
GPIO_SET(AIN1_GPIO_Port, AIN1_Pin);
GPIO_RESET(AIN2_GPIO_Port, AIN2_Pin);
}
else
{
GPIO_RESET(AIN1_GPIO_Port, AIN1_Pin);
GPIO_SET(AIN2_GPIO_Port, AIN2_Pin);
}
PWM_SET_DUTY(PWM_TIM, PWM_CHANNEL, ABS(percent));
}
void set_motor_pwm_arr(int16_t arr)
{
if (arr > 0)
{
GPIO_SET(AIN1_GPIO_Port, AIN1_Pin);
GPIO_RESET(AIN2_GPIO_Port, AIN2_Pin);
}
else
{
GPIO_RESET(AIN1_GPIO_Port, AIN1_Pin);
GPIO_SET(AIN2_GPIO_Port, AIN2_Pin);
}
PWM_SET_COMPARE(PWM_TIM, PWM_CHANNEL, ABS(arr));
}
/**
* @brief 通过UART发送数据
*
* 该函数通过UART接口发送指定长度的数据。
*
* @param data 指向要发送数据的指针
* @param len 要发送的数据长度
*/
void uart_send(uint8_t *data, uint16_t len)
{
uart_send_data(uart, data, len);
}
/**
* @brief 初始化显示板
*
*/
void board_init(void)
{
uart_init();
ssd1306_init();
motor_init();
}