📄 stm32f10x_usart.c
字号:
USARTx->CR3 &= CR3_SCEN_Reset;
}
}
/**
* @简述 使能或者失能 NACK 传输.
* @参数 USARTx: x可以为1,2或3以选择USART的外围设备.
* @参数 NewState: NACK 传输的新状态.
* 这个参数可以是: ENABLE 或 DISABLE.
* @注解 这个智能卡模式不能应用于 UART4 和 UART5 .
* @返回 没有
*/
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 检查参数 */
assert_param(IS_USART_123_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通过置位CR3寄存器的NACK位使能NACK传输 */
USARTx->CR3 |= CR3_NACK_Set;
}
else
{
/* 通过清零CR3寄存器的NACK位失能NACK传输 */
USARTx->CR3 &= CR3_NACK_Reset;
}
}
/**
* @简述 使能或者失能 USART 半双工模式.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 NewState: USART 半双工模式的新状态.
* 这个参数可以是: ENABLE 或 DISABLE.
* @返回 没有
*/
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通过置位CR3寄存器的HDSEL位使能Half-Duplex模式 */
USARTx->CR3 |= CR3_HDSEL_Set;
}
else
{
/* 通过清零CR3寄存器的HDSEL位失能Half-Duplex模式 */
USARTx->CR3 &= CR3_HDSEL_Reset;
}
}
/**
* @简述 设置 USART IrDA 模式.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @参数 USART_IrDAMode: 指定 IrDA 模式.
* 这个参数可以是下面的值之一 :
* USART_IrDAMode_LowPower: 低功耗模式
* USART_IrDAMode_Normal : 正常模式
* @返回 没有
*/
void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)
{
/* 检查参数 */
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 IrDA 模式.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
* @参数 NewState: IrDA 模式的新状态.
* 这个参数可以是: ENABLE 或 DISABLE.
* @返回 没有
*/
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* 通过置位CR3寄存器的IREN位使能IrDA模式 */
USARTx->CR3 |= CR3_IREN_Set;
}
else
{
/* 通过清零CR3寄存器的IREN位失能IrDA模式 */
USARTx->CR3 &= CR3_IREN_Reset;
}
}
/**
* @简述 检查指定的 USART 标志位设置与否.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 USART_FLAG: 指定要检测的标记.
* 这个参数可以是下面的值之一 :
* USART_FLAG_CTS: CTS 改变标志 (不能应用于 UART4 和 UART5)
* USART_FLAG_LBD: LIN 间隔侦测标志
* USART_FLAG_TXE: 发送数据寄存器为空标志
* USART_FLAG_TC: 传输完成标志
* USART_FLAG_RXNE: 接收数据寄存器不为空标志
* USART_FLAG_IDLE: 空闲总线标志
* USART_FLAG_ORE: 溢出错误标志
* USART_FLAG_NE: 噪声错误标志
* USART_FLAG_FE: 帧错误标志
* USART_FLAG_PE: 奇偶错误标志
* @retval USART_FLAG 的新状态(SET 或 RESET).
*/
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
FlagStatus bitstatus = RESET;
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_FLAG(USART_FLAG));
/* CTS 标志不能应用于 UART4 和 UART5 */
if (USART_FLAG == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/**
* @简述 清除 USARTx 的待处理标志位.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 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, uint16_t USART_FLAG)
{
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
/* CTS 标志不能应用于 UART4 和 UART5 */
if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
USARTx->SR = (uint16_t)~USART_FLAG;
}
/**
* @简述 检查指定的 USART 中断发生与否.
* @参数 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 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: 空闲总线中断
* USART_IT_ORE: 溢出错误中断
* USART_IT_NE: 噪声错误中断
* USART_IT_FE: 帧错误中断
* USART_IT_PE: 奇偶错误中断
* @返回 USART_IT 的新状态 (SET 或 RESET).
*/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_GET_IT(USART_IT));
/* CTS 中断不能应用于 UART4 和 UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
/* 得到 USART 寄存器引索 */
usartreg = (((uint8_t)USART_IT) >> 0x05);
/*得到中断位置 */
itmask = USART_IT & IT_Mask;
itmask = (uint32_t)0x01 << itmask;
if (usartreg == 0x01) /* The IT is in CR1 register */
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
itmask &= USARTx->CR2;
}
else /* The IT is in CR3 register */
{
itmask &= USARTx->CR3;
}
bitpos = USART_IT >> 0x08;
bitpos = (uint32_t)0x01 << bitpos;
bitpos &= USARTx->SR;
if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}
/**
* @简述 清除 USARTx 的中断待处理位.
* @返回 USARTx: 选择 USART 或者 UART 的外围设备.
* 这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
* @参数 USART_IT: 指定要被清除的中断挂起位.
* 这个参数可以是下面的值之一:
* USART_IT_CTS: CTS 改变中断 (不能应用于 UART4 和 UART5)
* USART_IT_LBD: LIN 间隔侦测中断
* USART_IT_TC: 发送完成中断
* USART_IT_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_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint16_t bitpos = 0x00, itmask = 0x00;
/* 检查参数 */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_CLEAR_IT(USART_IT));
/* CTS 中断不能应用于 UART4 和 UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
bitpos = USART_IT >> 0x08;
itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
USARTx->SR = (uint16_t)~itmask;
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -