73 lines
1.6 KiB
C
73 lines
1.6 KiB
C
#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));
|
||
}
|
||
|
||
/**
|
||
* @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();
|
||
}
|