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

📄 stm32f10x_usart.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -