⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stm32f10x_usart.c

📁 stm32f10xx的中文译文例程
💻 C
📖 第 1 页 / 共 3 页
字号:
* 函数名称: 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 + -