在实际项目开发中,为了数据的可靠性,我们一般会引入数据的校验和、数据转义等方式。这里由于用到串口的数据传输,该数据包也包含帧头、帧尾,串口1头文件中有定义。
#define UART_RCV_SIZE (20)
#define UART_BUF_SIZE (20)
#define MTH_WRD_HGH(a) ((u8)((u16)(a) >> 8)) // 获得高字节
#define MTH_WRD_LOW(a) ((u8)((u16)(a) & 0xFF)) // 获得低字节
#define MTH_DWRD_HGH(a) ((u16)((u32)(a) >> 16)) // 获得高2字节
#define MTH_DWRD_LOW(a) ((u16)((u32)(a) & 0xFFFF)) // 获得低2字节
#define MTH_ARR_WRD(arr) (*(arr+0)<< 8) + (*(arr+1)<< 0) // 数组转WORD
#define MTH_ARR_DWRD(arr) (*(arr+0)<<24) + (*(arr+1)<<16) + \
(*(arr+2)<< 8) + (*(arr+3)<< 0) // 数组转DWORD
#define MTH_WRD_ARR(arr, dat) *(arr+0) = (u8)((dat)>>8); \
*(arr+1) = (u8)((dat)>>0); // WORD转数组
#define MTH_DWRD_ARR(arr, dat) *(arr+0) = (u8)((dat)>>24); \
*(arr+1) = (u8)((dat)>>16); \
*(arr+2) = (u8)((dat)>>8); \
*(arr+3) = (u8)((dat)>>0); // DWORD转数组[小端模式]
/***************************************************************
* 接收缓冲
***************************************************************/
typedef struct
{
u8 Buf[UART_RCV_SIZE*2];
u16 WCnt;
u16 RCnt;
} UART_RCV;
#define UART_FRM_SRT (0x01) // 帧头
#define UART_FRM_END (0x03) // 帧尾
typedef enum //UART接口命令集
{
// 手机发送命令
APP_CMD_STA = 0x0030,
APP_CMD_PWM1 = 0x0031,
APP_CMD_PWM2 = 0x0032,
APP_CMD_END = 0x0033,
// 接收命令
UART_CMD_STA = 0x8000,
UART_CMD_PWM1 = 0x8001,
UART_CMD_PWM2 = 0x8002,
UART_CMD_END = 0x8003,
} UART_CMD;
/*******************************************************************************
* UART1 串口号、中断服务函数、中断号重定义
******************************************************************************/
#define BOARD_CONN_UART LPUART1
#define BOARD_CONN_UART_TYPE kSerialPort_Uart
#define BOARD_CONN_UART_BAUDRATE 115200U
#define BOARD_CONN_UART_BASEADDR (uint32_t)LPUART1
#define BOARD_CONN_UART_INSTANCE 1U
#define BOARD_CONN_UART_CLK_FREQ CLOCK_GetIpFreq(kCLOCK_Lpuart1)
#define BOARD_CONN_UART_IRQ LPUART1_IRQn
#define BOARD_CONN_UART_IRQ_HANDLER LPUART1_IRQHandler
/*******************************************************************************
* UART1 串口配置参数定义,默认参数如下:
* .baudRate_Bps = 115200U;
* .parityMode = kLPUART_ParityDisabled;
* .stopBitCount = kLPUART_OneStopBit;
* .txFifoWatermark = 0;
* .rxFifoWatermark = 0;
* .enableTx = false;
* .enableRx = false;
******************************************************************************/
#define BOARD_CONN_UART_BAUDRATE 115200U
#define BOARD_CONN_UART_STOP_BIT kLPUART_OneStopBit
#define BOARD_CONN_UART_ENABLE_SEND true
#define BOARD_CONN_UART_ENABLE_RESIVE true