📄 stm32f10x_usart.c
字号:
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_IT:指明要使能或禁用的USART中断源。
* 这个参数可以是下面的值之一 :
* - USART_IT_CTS: CTS 改变中断 (对于UART4和UART5无法使用)
* - USART_IT_LBD: LIN 间隔侦测中断
* - USART_IT_TXE: 发送寄存器空中断
* - USART_IT_TC: 发送完成中断
* - USART_IT_RXNE: 接收寄存器全满中断
* - USART_IT_IDLE: IDLE线性中断
* - USART_IT_PE: 奇偶错误中断
* - USART_IT_ERR: 错误中断(桢错误, 噪声错误, 超速错误)
* (3)指定USARTx中断的新状态.这个参数能够取:ENABLE或者DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
{
u32 usartreg = 0x00, itpos = 0x00, itmask = 0x00;
u32 usartxbase = 0x00;
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CONFIG_IT(USART_IT));
assert_param(IS_USART_PERIPH_IT(USARTx, USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 [CTS中断对于UART4和UART5无法使用]*/
assert_param(IS_FUNCTIONAL_STATE(NewState));
usartxbase = (*(u32*)&(USARTx));
/* Get the USART register index [取得USART寄存器变址]*/
usartreg = (((u8)USART_IT) >> 0x05);
/* Get the interrupt position [取得中断位置]*/
itpos = USART_IT & IT_Mask;
itmask = (((u32)0x01) << itpos);
if (usartreg == 0x01) /* The IT is in CR1 register [中断在CR1寄存器中]*/
{
usartxbase += 0x0C;
}
else if (usartreg == 0x02) /* The IT is in CR2 register [中断在CR2寄存器中]*/
{
usartxbase += 0x10;
}
else /* The IT is in CR3 register [中断在CR3寄存器中]*/
{
usartxbase += 0x14;
}
if (NewState != DISABLE)
{
*(vu32*)usartxbase |= itmask;
}
else
{
*(vu32*)usartxbase &= ~itmask;
}
}
/*******************************************************************************
* 函数名称: USART_DMACmd
* 功能描述: 使能或禁用特定的USART DMA接口.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3 or UART4.
* 注意: 这个DMA不能用于UART5.
* (2)USART_DMAReq: 指定DMA请求.
* 这个参数可以是下面任意值的组合:
* - USART_DMAReq_Tx: USART DMA 传输请求
* - USART_DMAReq_Rx: USART DMA 接收请求
* (3)NewState: DMA请求源的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_DMACmd(USART_TypeDef* USARTx, u16 USART_DMAReq, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_1234_PERIPH(USARTx));
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 [通过设置USART CR3 寄存器的DMAT、DMAT位组合,来使能选择DMA传输请求]*/
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 [通过设置USART CR3 寄存器的DMAT、DMAT位组合,来禁止选择DMA传输请求]*/
USARTx->CR3 &= (u16)~USART_DMAReq;
}
}
/*******************************************************************************
* 函数名称: USART_SetAddress
* 功能描述: 设置USART节点的地址
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_Address:指出了USART节点的地址
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_ADDRESS(USART_Address));
/* Clear the USART address [清除 USART地址]*/
USARTx->CR2 &= CR2_Address_Mask;
/* Set the USART address node [设置USART地址]*/
USARTx->CR2 |= USART_Address;
}
/*******************************************************************************
* 函数名称: USART_WakeUpConfig
* 功能描述: 选择USART的唤醒方法.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_WakeUp:指明了USART的唤醒方法.
* 这个参数可以是下面的值之一 :
* - USART_WakeUp_IdleLine: IDLE线路唤醒
* - USART_WakeUp_AddressMark: 地址标记唤醒
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_WAKEUP(USART_WakeUp));
USARTx->CR1 &= CR1_WAKE_Mask;
USARTx->CR1 |= USART_WakeUp;
}
/*******************************************************************************
* 函数名称: USART_ReceiverWakeUpCmd
* 功能描述: 决定USART是否在无声模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)Newstate:USART模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the USART mute mode by setting the RWU bit in the CR1 register [通过置位CR1寄存器的RWU位使能USART静音模式]*/
USARTx->CR1 |= CR1_RWU_Set;
}
else
{
/* Disable the USART mute mode by clearing the RWU bit in the CR1 register [通过清零CR1寄存器的RWU位禁止USART静音模式]*/
USARTx->CR1 &= CR1_RWU_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_LINBreakDetectLengthConfig
* 功能描述: 设置USART LIN间隔检波长度.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_LINBreakDetectLength指明了LIN间断检测长度.
* 这个参数可以是下面的值之一 :
* - USART_LINBreakDetectLength_10b: 10位间断检测
* - USART_LINBreakDetectLength_11b: 11位间断检测
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, u16 USART_LINBreakDetectLength)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
USARTx->CR2 &= CR2_LBDL_Mask;
USARTx->CR2 |= USART_LINBreakDetectLength;
}
/*******************************************************************************
* 函数名称: USART_LINCmd
* 功能描述: 使能或禁用USART LIN模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)Newstate:USART LIN模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the LIN mode by setting the LINEN bit in the CR2 register [通过置位CR2寄存器的LINEN位使能LIN模式]*/
USARTx->CR2 |= CR2_LINEN_Set;
}
else
{
/* Disable the LIN mode by clearing the LINEN bit in the CR2 register [通过清零CR2寄存器的LINEN位禁止LIN模式]*/
USARTx->CR2 &= CR2_LINEN_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_SendData
* 功能描述: 传输单个数据通过USARTx外围设备.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)Data:要被传输的数据.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_DATA(Data));
/* Transmit Data */
USARTx->DR = (Data & (u16)0x01FF);
}
/*******************************************************************************
* 函数名称: USART_ReceiveData
* 功能描述: 返回最近由USARTx外围设备接收的数据.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* 输出参数: 无
* 返回参数: 接收的数据.
*******************************************************************************/
u16 USART_ReceiveData(USART_TypeDef* USARTx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Receive Data */
return (u16)(USARTx->DR & (u16)0x01FF);
}
/*******************************************************************************
* 函数名称: USART_SendBreak
* 功能描述: 传输间断符.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SendBreak(USART_TypeDef* USARTx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Send break characters [发送间断字符]*/
USARTx->CR1 |= CR1_SBK_Set;
}
/*******************************************************************************
* 函数名称: USART_SetGuardTime
* 功能描述: 设置指定的USART保护时间.
* 输入参数: (1)USARTx:x可以为1,2或3以选择USART的外围设备.
* 注意: 这个保护时间位不能用于UART4和UART5.
* (2)USART_GuardTime:指定保护时间.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetGuardTime(USART_TypeDef* USARTx, u8 USART_GuardTime)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_123_PERIPH(USARTx));
/* Clear the USART Guard time [清除USART保护时间]*/
USARTx->GTPR &= GTPR_LSB_Mask;
/* Set the USART guard time [设置USART保护时间*/
USARTx->GTPR |= (u16)((u16)USART_GuardTime << 0x08);
}
/*******************************************************************************
* 函数名称: USART_SetPrescaler
* 功能描述: 设置USART时钟预分频器.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* 注意:这个函数是用于UART4和UART5的IrDA模式 .
* (2)USART_Prescaler:指明预分频器.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetPrescaler(USART_TypeDef* USARTx, u8 USART_Prescaler)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
/* Clear the USART prescaler [清除USART预分频器]*/
USARTx->GTPR &= GTPR_MSB_Mask;
/* Set the USART prescaler [设置USART预分频器]*/
USARTx->GTPR |= USART_Prescaler;
}
/*******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -