diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7b8de78 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "uart.h": "c" + } +} \ No newline at end of file diff --git a/User/bsp/uart.c b/User/bsp/uart.c index c1fecb7..205b135 100644 --- a/User/bsp/uart.c +++ b/User/bsp/uart.c @@ -10,11 +10,10 @@ static void (*UART_Callback[BSP_UART_NUM][BSP_UART_CB_NUM])(void); /* Private function -------------------------------------------------------- */ static BSP_UART_t UART_Get(UART_HandleTypeDef *huart) { if (huart->Instance == USART1) - return BSP_UART_UART1; - else if (huart->Instance == USART2) - return BSP_UART_UART2; - else if (huart->Instance == USART3) - return BSP_UART_UART3; + return BSP_UART_PC; + + /*else */ + else return BSP_UART_ERR; } @@ -103,12 +102,8 @@ void BSP_UART_IRQHandler(UART_HandleTypeDef *huart) { UART_HandleTypeDef *BSP_UART_GetHandle(BSP_UART_t uart) { switch (uart) { - case BSP_UART_USART1: + case BSP_UART_PC: return &huart1; - case BSP_UART_USART2: - return &huart2; - case BSP_UART_USART3: - return &huart3; default: return NULL; } diff --git a/User/bsp/uart.h b/User/bsp/uart.h index 63446ad..975ef8f 100644 --- a/User/bsp/uart.h +++ b/User/bsp/uart.h @@ -17,9 +17,8 @@ extern "C" { /* UART实体枚举,与设备对应 */ typedef enum { - BSP_UART_USART1, - BSP_UART_USART2, - BSP_UART_USART3, + BSP_UART_PC, + /*BSP_UART_??*/ BSP_UART_NUM, BSP_UART_ERR, } BSP_UART_t; diff --git a/User/device/uart_pc.c b/User/device/uart_pc.c new file mode 100644 index 0000000..8fd5241 --- /dev/null +++ b/User/device/uart_pc.c @@ -0,0 +1,54 @@ +/* Includes ----------------------------------------------------------------- */ +#include "uart.h" + +#include + +#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; +} \ No newline at end of file diff --git a/User/device/uart_pc.h b/User/device/uart_pc.h new file mode 100644 index 0000000..bfa6c18 --- /dev/null +++ b/User/device/uart_pc.h @@ -0,0 +1,50 @@ +/* + UART通讯模板 +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Includes ----------------------------------------------------------------- */ +#include +#include + + /* 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