| 
在线时间6 小时
UID3588702
注册时间2020-9-29
NXP金币0 
 TA的每日心情|  | 开心 2021-1-25 11:21
 | 
|---|
 签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 注册会员 
 
 
	积分53 
最后登录2021-8-27 | 
 
 发表于 2021-1-4 10:55:24
|
显示全部楼层 
| 本帖最后由 helloomryang 于 2021-1-4 11:47 编辑 
 参考手册以下章节
 14.4.8  UARTn Line Status Register
 
 这个寄存器的 bit 6,可以用它来判断一个字节是否发送完成
 
 Transmitter Empty(TEMT)
 TEMT is set when both UnTHR and UnTSR are empty; TEMT is cleared when
 either the UnTSR or the UnTHR contain valid data.
 
 0     UnTHR and/or the UnTSR contains valid data.
 1     UnTHR and the UnTSR are empty.
 
 
 
 
 我就是这样用的,前提是fifo设置为1个字节
 
 /*********************************************************************//**
 * Macro defines for Macro defines for UART line status register
 **********************************************************************/
 /** Line status register: Receive data ready*/
 #define UART_LSR_RDR        ((uint8_t)(1<<0))
 /** Line status register: Overrun error*/
 #define UART_LSR_OE         ((uint8_t)(1<<1))
 /** Line status register: Parity error*/
 #define UART_LSR_PE         ((uint8_t)(1<<2))
 /** Line status register: Framing error*/
 #define UART_LSR_FE         ((uint8_t)(1<<3))
 /** Line status register: Break interrupt*/
 #define UART_LSR_BI         ((uint8_t)(1<<4))
 /** Line status register: Transmit holding register empty*/
 #define UART_LSR_THRE       ((uint8_t)(1<<5))
 /** Line status register: Transmitter empty*/
 #define UART_LSR_TEMT       ((uint8_t)(1<<6))
 /** Error in RX FIFO*/
 #define UART_LSR_RXFE       ((uint8_t)(1<<7))
 /** UART Line status bit mask */
 #define UART_LSR_BITMASK    ((uint8_t)(0xFF))
 
 
 /*********************************************************************//**
 * @brief       Check whether if UART is busy or not
 * @param[in]   UARTx   UART peripheral selected, should be:
 *              - LPC_UART0: UART0 peripheral
 *              - LPC_UART1: UART1 peripheral
 *              - LPC_UART2: UART2 peripheral
 *              - LPC_UART3: UART3 peripheral
 * @return      RESET if UART is not busy, otherwise return SET.
 **********************************************************************/
 FlagStatus UART_CheckBusy(LPC_UART_TypeDef *UARTx)
 {
 if (UARTx->LSR & UART_LSR_TEMT)
 {
 return RESET;
 }
 else
 {
 return SET;
 }
 }
 
 以上两个是库里面的东西
 下面这个是自己写的
 
 void sys_uart2_send_byte(uint8_t tmep_data)
 {
 UART_SendByte(LPC_UART2,tmep_data);
 while(SET == UART_CheckBusy(LPC_UART2));//wait busy
 }
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |