📄 stm32f10x_usart.c
字号:
* 函数名称: USART_SmartCardCmd
* 功能描述: 使能或禁用USART智能卡模式.
* 输入参数: (1)USARTx:x可以为1,2或3以选择USART的外围设备.
* 注意:这个智能卡模式不能用于UART4和UART5.
* (2)Newstate:智能卡模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the SC mode by setting the SCEN bit in the CR3 register [通过置位CR3寄存器的SCEN位使能SC模式]*/
USARTx->CR3 |= CR3_SCEN_Set;
}
else
{
/* Disable the SC mode by clearing the SCEN bit in the CR3 register [通过清零CR3寄存器的SCEN位禁止SC模式]*/
USARTx->CR3 &= CR3_SCEN_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_SmartCardNACKCmd
* 功能描述: 使能或禁用NACK传输.
* 输入参数: (1)USARTx:x可以为1,2或3以选择USART的外围设备.
* 注意:这个智能卡模式不能用于UART4和UART5.
* (2)Newstate:NACK传输的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the NACK transmission by setting the NACK bit in the CR3 register [通过置位CR3寄存器的NACK位使能NACK传输]*/
USARTx->CR3 |= CR3_NACK_Set;
}
else
{
/* Disable the NACK transmission by clearing the NACK bit in the CR3 register [通过清零CR3寄存器的NACK位禁止NACK传输]*/
USARTx->CR3 &= CR3_NACK_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_HalfDuplexCmd
* 功能描述: 使能或禁用USART半双工模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)Newstate:半双工模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_HalfDuplexCmd(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 Half-Duplex mode by setting the HDSEL bit in the CR3 register [通过置位CR3寄存器的HDSEL位使能Half-Duplex模式]*/
USARTx->CR3 |= CR3_HDSEL_Set;
}
else
{
/* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register [通过清零CR3寄存器的HDSEL位禁止Half-Duplex模式]*/
USARTx->CR3 &= CR3_HDSEL_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_IrDAConfig
* 功能描述: 配置USART IrDA模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_IrDAMode:指定IrDA模式.
* 这个参数可以是下面的值之一 :
* - USART_IrDAMode_LowPower
* - USART_IrDAMode_Normal
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_IrDAConfig(USART_TypeDef* USARTx, u16 USART_IrDAMode)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
USARTx->CR3 &= CR3_IRLP_Mask;
USARTx->CR3 |= USART_IrDAMode;
}
/*******************************************************************************
* 函数名称: USART_IrDACmd
* 功能描述: 使能或禁用USART IrDA接口.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)Newstate:IrDA模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_IrDACmd(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 IrDA mode by setting the IREN bit in the CR3 register [通过置位CR3寄存器的IREN位使能IrDA模式]*/
USARTx->CR3 |= CR3_IREN_Set;
}
else
{
/* Disable the IrDA mode by clearing the IREN bit in the CR3 register [通过清零CR3寄存器的IREN位禁止IrDA模式]*/
USARTx->CR3 &= CR3_IREN_Reset;
}
}
/*******************************************************************************
* 函数名称: USART_GetFlagStatus
* 功能描述: 检测指明的USART标记是否被置位.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_FLAG:指明要检测的标记.
* 这个参数可以是下面的值之一 :
* - USART_FLAG_CTS: CTS 改变标志 (对于UART4和UART5无法使用)
* - USART_FLAG_LBD: LIN 间隔侦测标志
* - USART_FLAG_TXE: 发送寄存器空标志
* - USART_FLAG_TC: 发送完成标志
* - USART_FLAG_RXNE: 接收寄存器全满标志
* - USART_FLAG_IDLE: IDLE线性标志
* - USART_FLAG_ORE: 过速错误标志
* - USART_FLAG_NE: 噪声错误标志
* - USART_FLAG_FE: 成帧误差标志
* - USART_FLAG_PE: 奇偶错误标志
* 输出参数: 无
* 返回参数: USART_FLAG新状态.这个参数能够取:ENABLE或者DISABLE.
*******************************************************************************/
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, u16 USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* 着个CTS标志不能用于UART4和UART5 */
if ((USARTx->SR & USART_FLAG) != (u16)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/*******************************************************************************
* 函数名称: USART_ClearFlag
* 功能描述: 清除USARTx挂起标记.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_FLAG:指定要被清除的标记.
* 这个参数可以是下面的值的任意组合:
* - USART_FLAG_CTS: CTS 改变标志 (对于UART4和UART5无法使用).
* - USART_FLAG_LBD: LIN 间隔侦测标志.
* - USART_FLAG_TC: 发送完成标志.
* - USART_FLAG_RXNE: 接收寄存器全满标志.
*
* 注意:
* - PE (奇偶校验错误), FE (桢错误), NE (噪声错误),
* ORE (过速错误) 和 IDLE (找到空闲线) 标志标志被软件按顺序清除:
* 一个读USART_SR寄存器操作(USART_GetFlagStatus())
* 接着一个读USART_DR寄存器操作(USART_ReceiveData()).
* - RXNE标志也可以被一个读USART_DR寄存器操作清除(USART_ReceiveData()).
* - TC标志标志被软件按顺序清除: 一个读USART_SR寄存器操作(USART_GetFlagStatus())
* 接着一个读USART_DR寄存器操作(USART_ReceiveData()).
* - TXE标志只能靠写USART_DR寄存器清除(USART_SendData()).
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ClearFlag(USART_TypeDef* USARTx, u16 USART_FLAG)
{
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 [CTS 改变中断 对于UART4和UART5无法使用]*/
USARTx->SR = (u16)~USART_FLAG;
}
/*******************************************************************************
* 函数名称: USART_GetITStatus
* 功能描述: 检测指定的USART中断是否发生.
* 输入参数: (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_ORE: 超速错误中断
* - USART_IT_NE: 噪声错误中断
* - USART_IT_FE: 桢错误中断
* - USART_IT_PE: 奇偶错误中断
* 输出参数: 无
* 返回参数: The new state of USART_IT (SET or RESET).
*******************************************************************************/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, u16 USART_IT)
{
u32 bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_GET_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无法使用]*/
/* Get the USART register index [取得USART寄存器引索]*/
usartreg = (((u8)USART_IT) >> 0x05);
/* Get the interrupt position [取得中断位置]*/
itmask = USART_IT & IT_Mask;
itmask = (u32)0x01 << itmask;
if (usartreg == 0x01) /* The IT is in CR1 register [CR1寄存器内的中断]*/
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02) /* The IT is in CR2 register [CR2寄存器内的中断]*/
{
itmask &= USARTx->CR2;
}
else /* The IT is in CR3 register [CR3寄存器内的中断]*/
{
itmask &= USARTx->CR3;
}
bitpos = USART_IT >> 0x08;
bitpos = (u32)0x01 << bitpos;
bitpos &= USARTx->SR;
if ((itmask != (u16)RESET)&&(bitpos != (u16)RESET))
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/*******************************************************************************
* 函数名称: USART_ClearITPendingBit
* 功能描述: 清除USARTx中断挂起位
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
* 这个参数可以是下面的值之一 :
* - USART1, USART2, USART3, UART4 or UART5.
* (2)USART_IT:指明要被清除的中断挂起位.
* 这个参数可以是下面的值之一:
* - USART_IT_CTS: CTS 改变中断 (对于UART4和UART5无法使用)
* - USART_IT_LBD: LIN 间隔侦测中断
* - USART_IT_TC: 发送完成中断.
* - USART_IT_RXNE: 接收寄存器全满中断.
*
* Notes:
* - PE (奇偶校验错误), FE (桢错误), NE (噪声错误),
* ORE (过速错误) 和 IDLE (找到空闲线)挂起位
* 被软件按顺序清除: 一个读USART_SR寄存器操作(USART_GetFlagStatus())
* 接着一个读USART_DR寄存器操作(USART_ReceiveData()).
* - RXNE挂起位也可以被一个读USART_DR寄存器操作清除(USART_ReceiveData()).
* - TC挂起位也可以被软件按顺序清除: 一个读USART_SR寄存器操作(USART_GetFlagStatus())
* 接着一个读USART_DR寄存器操作(USART_ReceiveData()).
* - TXE挂起位置可以被一个写USART_DR寄存器清除(USART_SendData()).
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ClearITPendingBit(USART_TypeDef* USARTx, u16 USART_IT)
{
u16 bitpos = 0x00, itmask = 0x00;
/* Check the parameters [检查参数]*/
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_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无法使用]*/
bitpos = USART_IT >> 0x08;
itmask = (u16)((u16)0x01 << bitpos);
USARTx->SR = (u16)~itmask;
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -