/*********************************************************************************************************//** * @brief USART SendData from Tx. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param Data: the data to be transmitted. * @retval None ************************************************************************************************************/ void USART_SendData(USART_TypeDef* USARTx, u16 Data) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_DATA(Data)); USARTx->RBR = Data; }
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); /* Transmit Data */ USARTx->DR = (Data & (uint16_t)0x01FF); }
uint32_t usart_tx(usart_dev *dev, const uint8_t *buf, uint32_t len) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); uint32_t tosend = len; uint32_t sent = 0; if (dev->usetxrb) { while (tosend) { if (rb_is_full(dev->txrb)) break; rb_insert(dev->txrb, *buf++); sent++; tosend--; } if (dev->txbusy == 0 && sent > 0) { dev->txbusy = 1; USART_ITConfig(dev->USARTx, USART_IT_TXE, ENABLE); } } else { #if 0 uint32_t rtime; if (dev->use_timeout) stopwatch_reset(); #endif while (tosend) { while (!(dev->USARTx->SR & USART_FLAG_TXE)) { #if 0 if (dev->use_timeout) { rtime = stopwatch_getus(); if (rtime >= dev->tx_timeout) { return sent; } } #endif } dev->USARTx->DR = *buf++; tosend--; sent++; } } return sent; }
void USART_SendData_By_ZZB(USART_TypeDef* USARTx, u16 Data) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); /* Transmit Data */ while(!(USARTx->SR & 0x00000080)); USARTx->DR = (Data & (u16)0x01FF); while(!(USARTx->SR & 0x00000040)); }
uint32_t usart_tx(const usart_dev *dev, const uint8_t *buf, uint32_t len) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_DATA(Data)); uint32_t tosend = len; uint32_t sent = 0; while (tosend) { if (rb_is_full(dev->txrb)) break; rb_insert(dev->txrb, *buf++); sent++; tosend--; } if (dev->state->txbusy == 0 && sent > 0) { dev->state->txbusy = 1; dev->USARTx->CR1 |= USART_MASK_TXEIE; } return sent; }