添加device-uart模板

This commit is contained in:
RB 2025-04-28 15:40:52 +08:00
parent 05b2c1387d
commit 2dc317f5ce
5 changed files with 116 additions and 13 deletions

5
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"uart.h": "c"
}
}

View File

@ -10,11 +10,10 @@ static void (*UART_Callback[BSP_UART_NUM][BSP_UART_CB_NUM])(void);
/* Private function -------------------------------------------------------- */ /* Private function -------------------------------------------------------- */
static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) { static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) {
if (huart->Instance == USART1) if (huart->Instance == USART1)
return BSP_UART_UART1; return BSP_UART_PC;
else if (huart->Instance == USART2)
return BSP_UART_UART2; /*else */
else if (huart->Instance == USART3)
return BSP_UART_UART3;
else else
return BSP_UART_ERR; return BSP_UART_ERR;
} }
@ -103,12 +102,8 @@ void BSP_UART_IRQHandler(UART_HandleTypeDef *huart) {
UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) {
switch (uart) { switch (uart) {
case BSP_UART_USART1: case BSP_UART_PC:
return &huart1; return &huart1;
case BSP_UART_USART2:
return &huart2;
case BSP_UART_USART3:
return &huart3;
default: default:
return NULL; return NULL;
} }

View File

@ -17,9 +17,8 @@ extern "C" {
/* UART实体枚举与设备对应 */ /* UART实体枚举与设备对应 */
typedef enum { typedef enum {
BSP_UART_USART1, BSP_UART_PC,
BSP_UART_USART2, /*BSP_UART_??*/
BSP_UART_USART3,
BSP_UART_NUM, BSP_UART_NUM,
BSP_UART_ERR, BSP_UART_ERR,
} BSP_UART_t; } BSP_UART_t;

54
User/device/uart_pc.c Normal file
View File

@ -0,0 +1,54 @@
/* Includes ----------------------------------------------------------------- */
#include "uart.h"
#include <string.h>
#include "bsp\uart.h"
#include "device.h"
#define AI_LEN_RX_BUFF (sizeof(UART_RxData_t))
static bool rx_flag = false;
static uint8_t rxbuf[AI_LEN_RX_BUFF];
static void UART_RxCpltCallback(void) { rx_flag = true; }
int UART_Init(UART_t *huart)
{
UNUSED(huart);
HAL_UART_Receive_DMA(&BSP_UART_PC, rxbuf, AI_LEN_RX_BUFF);
return DEVICE_OK
}
int UART_StartReceive(UART_t *huart)
{
UNUSED(huart);
HAL_UART_Receive_DMA(&BSP_UART_PC, rxbuf, AI_LEN_RX_BUFF);
return DEVICE_OK;
}
bool UART_IsReceiveComplete(void)
{
return rx_flag;
}
int8_t UART_ParseData(UART_t *huart)
{
memcpy(&huart->rx_data, rxbuf, sizeof(UART_RxData_t));
}
void UART_PackTx(UART_t *huart, UART_TxData_t *tx_data)
{
memcpy(tx_data, huart->tx_data, sizeof(UART_TxData_t));
}
int8_t UART_StartSend(UART_t *huart)
{
if (HAL_UART_Transmit_DMA(&BSP_UART_PC, huart->tx_data, sizeof(UART_TxData_t)) == HAL_OK)
{
return DEVICE_OK
}
return DEVICE_ERROR;
}

50
User/device/uart_pc.h Normal file
View File

@ -0,0 +1,50 @@
/*
UART通讯模板
*/
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
/* Includes ----------------------------------------------------------------- */
#include <stdbool.h>
#include <stdint.h>
/* Exported constants ------------------------------------------------------- */
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */
typedef struct
{
uint8_t head;
uint8_t data;
uint8_t crc;
} UART_RxData_t;
typedef struct
{
uint8_t head;
uint8_t data;
uint8_t crc;
} UART_TxData_t;
typedef struct
{
UART_RxData_t rx_data; // Received data buffer
UART_TxData_t tx_data; // Transmit data buffer
} UART_t;
/* Exported functions prototypes -------------------------------------------- */
int UART_Init(UART_t *huart);
int UART_StartReceive(UART_t *huart);
bool UART_IsReceiveComplete(void);
int8_t UART_ParseData(UART_t *huart);
void UART_PackTx(UART_t *huart, UART_TxData_t *tx_data);
int8_t UART_StartSend(UART_t *huart);
#ifdef __cplusplus
}
#endif