【DigiKey&NXP】NXP FRDM-K32L3A6开发板-FreeRTOS系统篇(三)

在实际项目开发中,为了数据的可靠性,我们一般会引入数据的校验和、数据转义等方式。这里由于用到串口的数据传输,该数据包也包含帧头、帧尾,串口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