1 #ifndef __SWM341_UART_H__ 2 #define __SWM341_UART_H__ 3 4 typedef struct { 5 uint32_t Baudrate; 6 7 uint8_t DataBits; //数据位位数,可取值UART_DATA_8BIT、UART_DATA_9BIT 8 9 uint8_t Parity; //奇偶校验位,可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、UART_PARITY_ZERO 10 11 uint8_t StopBits; //停止位位数,可取值UART_STOP_1BIT、UART_STOP_2BIT 12 13 uint8_t RXThreshold; //取值0--7 14 uint8_t RXThresholdIEn; //当RX FIFO中数据个数 > RXThreshold时触发中断 15 16 uint8_t TXThreshold; //取值0--7 17 uint8_t TXThresholdIEn; //当TX FIFO中数据个数 <= TXThreshold时触发中断 18 19 uint8_t TimeoutTime; //超时时长 = TimeoutTime/(Baudrate/10) 秒 20 uint8_t TimeoutIEn; //超时中断,超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据时触发中断 21 } UART_InitStructure; 22 23 24 #define UART_DATA_8BIT 0 25 #define UART_DATA_9BIT 1 26 27 #define UART_PARITY_NONE 0 28 #define UART_PARITY_ODD 1 29 #define UART_PARITY_EVEN 3 30 #define UART_PARITY_ONE 5 31 #define UART_PARITY_ZERO 7 32 33 #define UART_STOP_1BIT 0 34 #define UART_STOP_2BIT 1 35 36 #define UART_RTS_1BYTE 0 37 #define UART_RTS_2BYTE 1 38 #define UART_RTS_4BYTE 2 39 #define UART_RTS_6BYTE 3 40 41 #define UART_ABR_RES_OK 1 42 #define UART_ABR_RES_ERR 2 43 44 #define UART_ERR_FRAME 1 45 #define UART_ERR_PARITY 2 46 #define UART_ERR_NOISE 3 47 48 49 /* Interrupt Type */ 50 #define UART_IT_RX_THR (1 << UART_CTRL_RXIE_Pos) //RX FIFO Threshold, RX FIFO中数据个数 > RXThreshold 51 #define UART_IT_RX_TOUT (1 << UART_CTRL_TOIE_Pos) //RX Timeout, 超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据 52 #define UART_IT_TX_THR (1 << UART_CTRL_TXIE_Pos) //TX FIFO Threshold, TX FIFO中数据个数 <= TXThreshold 53 #define UART_IT_TX_DONE (1 << UART_CTRL_TXDOIE_Pos) //TX Done, 发送FIFO空且发送发送移位寄存器已将最后一位发送出去 54 55 56 57 void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct); //UART串口初始化 58 void UART_Open(UART_TypeDef * UARTx); 59 void UART_Close(UART_TypeDef * UARTx); 60 61 void UART_WriteByte(UART_TypeDef * UARTx, uint8_t data); //发送一个字节数据 62 uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data); //读取一个字节数据,并指出数据是否Valid 63 64 uint32_t UART_IsTXBusy(UART_TypeDef * UARTx); 65 uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx); //接收FIFO是否空,如果不空则可以继续UART_ReadByte() 66 uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx); //发送FIFO是否满,如果不满则可以继续UART_WriteByte() 67 68 69 void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate); //设置波特率 70 uint32_t UART_GetBaudrate(UART_TypeDef * UARTx); //获取当前使用的波特率 71 72 void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity); 73 uint32_t UART_CTSLineState(UART_TypeDef * UARTx); 74 75 void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold); 76 uint32_t UART_RTSLineState(UART_TypeDef * UARTx); 77 78 void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedLen, uint32_t detectedIEn, uint32_t generatedLen, uint32_t generatedIEn); 79 void UART_LINGenerate(UART_TypeDef * UARTx); 80 uint32_t UART_LINIsDetected(UART_TypeDef * UARTx); 81 uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx); 82 83 void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar); 84 uint32_t UART_ABRIsDone(UART_TypeDef * UARTx); 85 86 void UART_INTEn(UART_TypeDef * UARTx, uint32_t it); 87 void UART_INTDis(UART_TypeDef * UARTx, uint32_t it); 88 void UART_INTClr(UART_TypeDef * UARTx, uint32_t it); 89 uint32_t UART_INTStat(UART_TypeDef * UARTx, uint32_t it); 90 91 92 #endif //__SWM341_UART_H__ 93