#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(); }