📄 stm32f10x_usart.c
字号:
{
u32 usartreg = 0x00, itpos = 0x00, itmask = 0x00;
u32 address = 0x00;
/* Check the parameters */
assert_param(IS_USART_CONFIG_IT(USART_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
/* Get the USART register index */
usartreg = (((u8)USART_IT) >> 0x05);
/* Get the interrupt position */
itpos = USART_IT & USART_IT_Mask;
itmask = (((u32)0x01) << itpos);
address = *(u32*)&(USARTx);
if (usartreg == 0x01) /* The IT is in CR1 register */
{
address += 0x0C;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
address += 0x10;
}
else /* The IT is in CR3 register */
{
address += 0x14;
}
if (NewState != DISABLE)
{
*(u32*)address |= itmask;
}
else
{
*(u32*)address &= ~itmask;
}
}
/*******************************************************************************
* Function Name : USART_DMACmd
* Description : Enables or disables the USART抯 DMA interface.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_DMAReq: specifies the DMA request.
* This parameter can be any combination of the following values:
* - USART_DMAReq_Tx
* - USART_DMAReq_Rx
* - NewState: new state of the DMA Request sources.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void USART_DMACmd(USART_TypeDef* USARTx, u16 USART_DMAReq, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_USART_DMAREQ(USART_DMAReq));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the DMA transfer for selected requests by setting the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 |= USART_DMAReq;
}
else
{
/* Disable the DMA transfer for selected requests by clearing the DMAT and/or
DMAR bits in the USART CR3 register */
USARTx->CR3 &= (u16)~USART_DMAReq;
}
}
/*******************************************************************************
* Function Name : USART_SetAddress
* Description : Sets the address of the USART node.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_Address: Indicates the address of the USART node.
* Output : None
* Return : None
*******************************************************************************/
void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
{
/* Check the parameters */
assert_param(IS_USART_ADDRESS(USART_Address));
/* Clear the USART address */
USARTx->CR2 &= CR2_Address_Mask;
/* Set the USART address node */
USARTx->CR2 |= USART_Address;
}
/*******************************************************************************
* Function Name : USART_WakeUpConfig
* Description : Selects the USART WakeUp method.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_WakeUp: specifies the USART wakeup method.
* This parameter can be one of the following values:
* - USART_WakeUp_IdleLine
* - USART_WakeUp_AddressMark
* Output : None
* Return : None
*******************************************************************************/
void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
{
/* Check the parameters */
assert_param(IS_USART_WAKEUP(USART_WakeUp));
USARTx->CR1 &= CR3_WAKE_Mask;
USARTx->CR1 |= USART_WakeUp;
}
/*******************************************************************************
* Function Name : USART_ReceiverWakeUpCmd
* Description : Determines if the USART is in mute mode or not.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - NewState: new state of the USART mode.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the mute mode USART by setting the RWU bit in the CR1 register */
USARTx->CR1 |= CR1_RWU_Set;
}
else
{
/* Disable the mute mode USART by clearing the RWU bit in the CR1 register */
USARTx->CR1 &= CR1_RWU_Reset;
}
}
/*******************************************************************************
* Function Name : USART_LINBreakDetectLengthConfig
* Description : Sets the USART LIN Break detection length.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_LINBreakDetectLength: specifies the LIN break
* detection length.
* This parameter can be one of the following values:
* - USART_LINBreakDetectLength_10b
* - USART_LINBreakDetectLength_11b
* Output : None
* Return : None
*******************************************************************************/
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, u16 USART_LINBreakDetectLength)
{
/* Check the parameters */
assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
USARTx->CR2 &= CR3_LBDL_Mask;
USARTx->CR2 |= USART_LINBreakDetectLength;
}
/*******************************************************************************
* Function Name : USART_LINCmd
* Description : Enables or disables the USART抯 LIN mode.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - NewState: new state of the USART LIN mode.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the LIN mode by setting the LINE bit in the CR2 register */
USARTx->CR2 |= CR2_LINE_Set;
}
else
{
/* Disable the LIN mode by clearing the LINE bit in the CR2 register */
USARTx->CR2 &= CR2_LINE_Reset;
}
}
/*******************************************************************************
* Function Name : USART_SendData
* Description : Transmits signle data through the USARTx peripheral.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - Data: the data to transmit.
* Output : None
* Return : None
*******************************************************************************/
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
/* Check the parameters */
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (u16)0x01FF);
}
/*******************************************************************************
* Function Name : USART_ReceiveData
* Description : Returns the most recent received data by the USARTx peripheral.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* Output : None
* Return : The received data.
*******************************************************************************/
u16 USART_ReceiveData(USART_TypeDef* USARTx)
{
/* Receive Data */
return (u16)(USARTx->DR & (u16)0x01FF);
}
/*******************************************************************************
* Function Name : USART_SendBreak
* Description : Transmits break characters.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* Output : None
* Return : None
*******************************************************************************/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* Send break characters */
USARTx->CR1 |= CR1_SBK_Set;
}
/*******************************************************************************
* Function Name : USART_SetGuardTime
* Description : Sets the specified USART guard time.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_GuardTime: specifies the guard time.
* Output : None
* Return : None
*******************************************************************************/
void USART_SetGuardTime(USART_TypeDef* USARTx, u8 USART_GuardTime)
{
/* Clear the USART Guard time */
USARTx->GTPR &= GTPR_LSB_Mask;
/* Set the USART guard time */
USARTx->GTPR |= (u16)((u16)USART_GuardTime << 0x08);
}
/*******************************************************************************
* Function Name : USART_SetPrescaler
* Description : Sets the system clock prescaler.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - USART_Prescaler: specifies the prescaler clock.
* Output : None
* Return : None
*******************************************************************************/
void USART_SetPrescaler(USART_TypeDef* USARTx, u8 USART_Prescaler)
{
/* Clear the USART prescaler */
USARTx->GTPR &= GTPR_MSB_Mask;
/* Set the USART prescaler */
USARTx->GTPR |= USART_Prescaler;
}
/*******************************************************************************
* Function Name : USART_SmartCardCmd
* Description : Enables or disables the USART抯 Smart Card mode.
* Input : - USARTx: where x can be 1, 2 or 3 to select the USART
* peripheral.
* - NewState: new state of the Smart Card mode.
* This parameter can be: ENABLE or DISABLE.
* Output : None
* Return : None
*******************************************************************************/
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_FUNCTIONAL_STATE(NewState));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -