/*********************************************************************************************************//** * @brief Get Modem status. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @return The current status of Modem Status Register. ************************************************************************************************************/ u8 USART_GetModemStatus(USART_TypeDef* USARTx) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); return (u8)USARTx->MSR; }
/*********************************************************************************************************//** * @brief USART ReceiveData from Rx. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @return The received data. ************************************************************************************************************/ u16 USART_ReceiveData(USART_TypeDef* USARTx) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); return (u16)USARTx->RBR; }
/*********************************************************************************************************//** * @brief Get Interrupt ID value. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @retval The interrupt ID of USART. * @arg USART_IID_RLS * @arg USART_IID_RDA * @arg USART_IID_CTI * @arg USART_IID_THRE * @arg USART_IID_MS * @arg USART_IID_NON ************************************************************************************************************/ u8 USART_GetIntID(USART_TypeDef* USARTx) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); return (u8)USARTx->IIR; }
/*********************************************************************************************************//** * @brief Initialize the USARTx peripheral according to the specified parameters in the USART_InitStruct. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_InitStructure: pointer to a USART_InitTypeDef structure that contains the configuration information * for the specified USART peripheral. * @retval None ************************************************************************************************************/ void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStructure) { u32 tmpreg = 0x00; CKCU_ClocksTypeDef Clocks; /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_BAUDRATE(USART_InitStructure->USART_BaudRate)); Assert_Param(IS_USART_WORD_LENGTH(USART_InitStructure->USART_WordLength)); Assert_Param(IS_USART_STOPBITS(USART_InitStructure->USART_StopBits)); Assert_Param(IS_USART_PARITY(USART_InitStructure->USART_Parity)); Assert_Param(IS_USART_MODE(USART_InitStructure->USART_Mode)); /*---------------------------- USART LCR Configuration ---------------------------------------------------*/ tmpreg = USARTx->LCR & LCR_CLEAR_Mask; tmpreg |= USART_InitStructure->USART_StopBits | USART_InitStructure->USART_WordLength | USART_InitStructure->USART_Parity; USARTx->LCR = tmpreg; /*---------------------------- USART MDR Configuration ---------------------------------------------------*/ tmpreg = USARTx->MDR & MDR_CLEAR_Mask; tmpreg |= USART_InitStructure->USART_Mode; USARTx->MDR = tmpreg; /*---------------------------- USART BaudRate Configuration ----------------------------------------------*/ CKCU_GetClocksFrequency(&Clocks); tmpreg = (Clocks.USART_Freq/(u32)USART_InitStructure->USART_BaudRate); USARTx->DLR = tmpreg; }
/*********************************************************************************************************//** * @brief Deinitialize registers of the USART peripheral by resetting USART. * @param USARTx: where USARTx is USART to select the USART peripheral. * @retval None ************************************************************************************************************/ void USART_DeInit(USART_TypeDef* USARTx) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); RSTCU_APBPerip0Reset(RSTCU_APBRST0_USART, ENABLE); }
/*********************************************************************************************************//** * @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; }
/*********************************************************************************************************//** * @brief Clear both the write and read point in Tx FIFO or Rx FIFO. * @param USARTx: where USARTx is the selected USART from the USART peripheral, x can be 0 or 1. * @param USART_FIFODirection: Determine TX FIFO or Rx FIFO that is to be reset. * This parameter can be any combination of the following values: * @arg USART_FIFO_TX : Tx FIFO is to be reset * @arg USART_FIFO_RX : Rx FIFO is to be reset * @retval None ************************************************************************************************************/ void USART_FIFOReset(USART_TypeDef* USARTx, u32 USART_FIFODirection) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_FIFO_DIRECTION(USART_FIFODirection)); USARTx->FCR |= USART_FIFODirection; }
/*********************************************************************************************************//** * @brief Set the value of USART FIFO Time Out. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_TimeOut: Specify the value of Time Out. * @retval None ************************************************************************************************************/ void USART_SetTimeOutValue(USART_TypeDef* USARTx, u32 USART_TimeOut) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_TIMEOUT(USART_TimeOut)); /* Set the USART time out */ USARTx->TPR = (USARTx->TPR & TPR_RTOIC_Mask) | USART_TimeOut; }
/*********************************************************************************************************//** * @brief Set the specified USART guard time. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_GuardTime: Specify the guard time. * @retval None ************************************************************************************************************/ void USART_SetGuardTime(USART_TypeDef* USARTx, u32 USART_GuardTime) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_GUARD_TIME(USART_GuardTime)); /* Set the USART guard time */ USARTx->TPR = (USARTx->TPR & TPR_TG_Mask) | (USART_GuardTime << 0x08); }
/*********************************************************************************************************//** * @brief Set the specified USART IrDA prescaler. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_IrDAPrescaler: Specify the USART IrDA prescaler. * @retval None ************************************************************************************************************/ void USART_SetIrDAPrescaler(USART_TypeDef* USARTx, u32 USART_IrDAPrescaler) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_IRDA_PRESCALER(USART_IrDAPrescaler)); /* Set the USART IrDA prescaler */ USARTx->ICR = (USARTx->ICR & RCR_ILPDVSR_Mask) | (USART_IrDAPrescaler << 0x08); }
/*********************************************************************************************************//** * @brief Set the specified USART RS485 address match value. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_AddressMatchValue: specify the RS485 address match value. * @retval None ************************************************************************************************************/ void USART_SetAddressMatchValue(USART_TypeDef* USARTx, u32 USART_AddressMatchValue) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_ADDRESS_MATCH_VALUE(USART_AddressMatchValue)); /* Set the USART guard time */ USARTx->RCR = (USARTx->RCR & RS485CR_ADDM_Mask) | (u32)(USART_AddressMatchValue<<0x08); }
/*********************************************************************************************************//** * @brief Configure the Tx FIFO Interrupt Trigger Level. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_TFITL: Specify the USART Tx FIFO interrupt trigger level. * This parameter can be one of the following values: * @arg USART_TFITL_00 * @arg USART_TFITL_02 * @arg USART_TFITL_04 * @arg USART_TFITL_08 * @retval None ************************************************************************************************************/ void USART_TFITLConfig(USART_TypeDef* USARTx, u32 USART_TFITL) { u32 tmpreg = 0x00; /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_TFITL(USART_TFITL)); tmpreg = USARTx->FCR & FCR_TFITL_CLEAR_Mask; /* Set the USART TFITL */ USARTx->FCR = tmpreg | USART_TFITL; }
/*********************************************************************************************************//** * @brief Deinitialize registers of the USART peripheral by resetting USART. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @retval None ************************************************************************************************************/ void USART_DeInit(USART_TypeDef* USARTx) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); if(USARTx == USART0) { RSTCU_APBPerip0Reset(RSTCU_APBRST0_USART0, ENABLE); } else { RSTCU_APBPerip0Reset(RSTCU_APBRST0_USART1, ENABLE); } }
/*********************************************************************************************************//** * @brief Enable the IrDA transmitter or receiver. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_IrDADirection: Specify the USART IrDA direction select. * This parameter can be one of the following values: * @arg USART_IRDA_TX * @arg USART_IRDA_RX * @retval None ************************************************************************************************************/ void USART_IrDADirectionConfig(USART_TypeDef* USARTx, u32 USART_IrDADirection) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_IRDA_DIRECTION(USART_IrDADirection)); if (USART_IrDADirection != USART_IRDA_RX) { USARTx->ICR |= USART_IRDA_TX; } else { USARTx->ICR &= USART_IRDA_RX; } }
/*********************************************************************************************************//** * @brief Enable or Disable inverting serial input function of IrDA on the specified USART. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param NewState: new state of the inverting serial input. * This parameter can be: ENABLE or DISABLE. * @retval None ************************************************************************************************************/ void USART_IrDAInvtInputCmd(USART_TypeDef* USARTx, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { USARTx->ICR |= USART_RXINV_ON; } else { USARTx->ICR &= USART_RXINV_OFF; } }
/*********************************************************************************************************//** * @brief Configure stick parity value of the USART. * @param USARTx: where USARTx is the selected USART from the USART peripheral, x can be 0 or 1. * @param USART_StickParity: Specify stick parity of the USART. * This parameter can be one of the following values * @arg USART_STICK_LOW * @arg USART_STICK_HIGH * @retval None ************************************************************************************************************/ void USART_StickParityConfig(USART_TypeDef * USARTx, u32 USART_StickParity) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_STICK_PARITY(USART_StickParity)); if (USART_StickParity != USART_STICK_HIGH) { USARTx->LCR |= USART_STICK_LOW; } else { USARTx->LCR &= USART_STICK_HIGH; } }
/*********************************************************************************************************//** * @brief Enable or Disable the USART stick parity function. * @param USARTx: where USARTx is the selected USART from the USART peripheral, x can be 0 or 1. * @param NewState: new state of the stick parity. * This parameter can be: ENABLE or DISABLE * @retval None ************************************************************************************************************/ void USART_StickParityCmd(USART_TypeDef* USARTx, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { USARTx->LCR |= USART_SPE_ON; } else { USARTx->LCR &= USART_SPE_OFF; } }
/*********************************************************************************************************//** * @brief Enable or Disable time out interrupt of the USART. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param NewState: new state of the time out interrupt. * This parameter can be: ENABLE or DISABLE. * @retval None ************************************************************************************************************/ void USART_TimeOutIntConfig(USART_TypeDef* USARTx, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { USARTx->TPR |= USART_TIMEOUT_ON; } else { USARTx->TPR &= USART_TIMEOUT_OFF; } }
/*********************************************************************************************************//** * @brief Enable or Disable the USART interrupts. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_IER: Specify if the USART interrupt source to be enabled or disabled. * This parameter can be one of the following values: * @arg USART_IER_MSIE * @arg USART_IER_RLSIE * @arg USART_IER_THREIE * @arg USART_IER_RDAIE * @arg USART_IER_ENON * @param NewState: new state of the USART interrupts. * This parameter can be: ENABLE or DISABLE. * @retval None ************************************************************************************************************/ void USART_IntConfig(USART_TypeDef* USARTx, u32 USART_IER, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { USARTx->IER |= USART_IER; } else { USARTx->IER &= ~USART_IER; } }
/*********************************************************************************************************//** * @brief Configure the polarity of RS485 transmitter enable signal. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_RS485Polarity: Specify the polarity of USART RS485 Tx enable signal. * This parameter can be one of the following values: * @arg USART_RS485POL_LOW * @arg USART_RS485POL_HIGH * @retval None ************************************************************************************************************/ void USART_RS485TxEnablePolarityConfig(USART_TypeDef* USARTx, u32 USART_RS485Polarity) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_RS485_POLARITY(USART_RS485Polarity)); if (USART_RS485Polarity != USART_RS485POLARITY_HIGH) { USARTx->RCR |= USART_RS485POLARITY_LOW; } else { USARTx->RCR &= USART_RS485POLARITY_HIGH; } }
/*********************************************************************************************************//** * @brief Configure the USART IrDA interface. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_IrDAMode: Specify the USART IrDA mode. * This parameter can be one of the following values: * @arg USART_IRDA_LOWPOWER * @arg USART_IRDA_NORMAL * @retval None ************************************************************************************************************/ void USART_IrDAConfig(USART_TypeDef* USARTx, u32 USART_IrDAMode) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_IRDA_MODE(USART_IrDAMode)); if (USART_IrDAMode != USART_IRDA_NORMAL) { USARTx->ICR |= USART_IRDA_LOWPOWER; } else { USARTx->ICR &= USART_IRDA_NORMAL; } }
/*********************************************************************************************************//** * @brief Force pin DTR/RTS to low or high state. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_ModemPin: Specify the USART modem pin to be forced. * This parameter can be one of the following values: * @arg USART_MODEM_DTR * @arg USART_MODEM_RTS * @param USART_ModemState: the USART modem pin state. * This parameter can be one of the following values: * @arg USART_MODEMSTATE_HIGH * @arg USART_MODEMSTATE_LOW * @return None ************************************************************************************************************/ void USART_ForceModemPinState(USART_TypeDef* USARTx, u32 USART_ModemPin, u32 USART_ModemState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_MODEM_PIN(USART_ModemPin)); Assert_Param(IS_USART_MODEM_STATE(USART_ModemState)); if (USART_ModemState != USART_MODEMSTATE_HIGH) { USARTx->MCR |= USART_MODEMSTATE_LOW << USART_ModemPin; } else { USARTx->MCR &= ~(USART_MODEMSTATE_HIGH << USART_ModemPin); } }
/*********************************************************************************************************//** * @brief Enable or Disable the USART RS485 normal multi-drop operation mode. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param NewState: new state of the USART RS485 AAD. * This parameter can be: ENABLE or DISABLE. * @retval None ************************************************************************************************************/ void USART_RS485AADCmd(USART_TypeDef* USARTx, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { /* Enable the hardware flow control by setting the HFCEN bit in the FCR register */ USARTx->RCR |= USART_RS485AAD_ON; } else { /* Disable the hardware flow control by clearing the TXEN bit in the HFCEN register */ USARTx->RCR &= USART_RS485AAD_OFF; } }
/*********************************************************************************************************//** * @brief Enable or Disable the USART Rx. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param NewState: new state of the USART Rx. * This parameter can be: ENABLE or DISABLE. * @retval None ************************************************************************************************************/ void USART_RxCmd(USART_TypeDef* USARTx, ControlStatus NewState) { /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_CONTROL_STATUS(NewState)); if (NewState != DISABLE) { /* Enable the Rx by setting the RXEN bit in the FCR register */ USARTx->FCR |= USART_RXEN_ON; } else { /* Disable the Rx by clearing the RXEN bit in the FCR register */ USARTx->FCR &= USART_RXEN_OFF; } }
/*********************************************************************************************************//** * @brief Get LINE Status flags. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_FLAG: Specify the flag to check. * This parameter can be one of the following values: * @arg USART_LSR_RFDR * @arg USART_LSR_OEI * @arg USART_LSR_PEI * @arg USART_LSR_FEI * @arg USART_LSR_BII * @arg USART_LSR_THRE * @arg USART_LSR_TE * @arg USART_LSR_ERR * @arg USART_LSR_RSADDEF * @return The new state of USART_FLAG (SET or RESET). ************************************************************************************************************/ FlagStatus USART_GetLineStatus(USART_TypeDef* USARTx, u32 USART_FLAG) { FlagStatus bitstatus = RESET; /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_LSR_FLAG(USART_FLAG)); if ((USARTx->LSR & USART_FLAG) != (u32)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; }
/*********************************************************************************************************//** * @brief Return the status of specified USART FIFO. * @param USARTx: where USARTx is the selected USART from the USART peripherals, x can be 0 or 1. * @param USART_FIFODirection: specify the FIFO that is to be check. * This parameter can be one of the following values: * @arg USART_FIFO_TX : USART Tx FIFO * @arg USART_FIFO_RX : USART Rx FIFO * @retval The number of data in Tx FIFO or Rx FIFO. ************************************************************************************************************/ u8 USART_GetFIFOStatus(USART_TypeDef* USARTx, u32 USART_FIFODirection) { u32 tmpreg; /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_FIFO_DIRECTION(USART_FIFODirection)); if (USART_FIFODirection == USART_FIFO_TX) { tmpreg = USARTx->FSR & 0x1f; } else { tmpreg = (USARTx->FSR & 0x1f00) >> 8; } return (u8)tmpreg; }
/*********************************************************************************************************//** * @brief Initialize Clock of the USARTx peripheral according to the specified parameters * in the USART_ClockInitStruct. * @param USARTx: where USARTx is USART to select the USART peripheral, x can be 0 or 1. * @param USART_SynClock_InitStruct: pointer to a USART_SynClock_InitTypeDef structure that contains * the configuration information for the specified USART peripheral. * @retval None ************************************************************************************************************/ void USART_SynClockInit(USART_TypeDef* USARTx, USART_SynClock_InitTypeDef* USART_SynClock_InitStruct) { u32 tmpreg = 0x00; /* Check the parameters */ Assert_Param(IS_USART(USARTx)); Assert_Param(IS_USART_SYNCHRONOUS_CLOCK(USART_SynClock_InitStruct->USART_ClockEnable)); Assert_Param(IS_USART_SYNCHRONOUS_PHASE(USART_SynClock_InitStruct->USART_ClockPhase)); Assert_Param(IS_USART_SYNCHRONOUS_POLARITY(USART_SynClock_InitStruct->USART_ClockPolarity)); Assert_Param(IS_USART_TRANSFER_MODE(USART_SynClock_InitStruct->USART_TransferSelectMode)); /*---------------------------- USART SCR Configuration -----------------------*/ /* Configure the USART CLKEN, LBCP, CPS and CPO ------------*/ /* Set CLKEN bit according to USART_ClockEnable value */ /* Set CPS bit according to USART_ClockPhase value */ /* Set CPO bit according to USART_ClockPolarity value */ USARTx->SCR = USART_SynClock_InitStruct->USART_ClockEnable | USART_SynClock_InitStruct->USART_ClockPhase | USART_SynClock_InitStruct->USART_ClockPolarity; /* Set TRSM bit according to USART_TransferSelectMode value */ tmpreg = USARTx->MDR & TRSM_CLEAR_Mask; tmpreg |= USART_SynClock_InitStruct->USART_TransferSelectMode; USARTx->MDR = tmpreg; }