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

📄 stm32f10x_usart.c

📁 中文固件库.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
  * @参数  NewState: 指定的 USARTx 中断的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @返回  没有
  */
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
{
  uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
  uint32_t usartxbase = 0x00;
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CONFIG_IT(USART_IT));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  /* CTS 中断不能应用于 UART4 和 UART5 */
  if (USART_IT == USART_IT_CTS)
  {
    assert_param(IS_USART_123_PERIPH(USARTx));
  }   
  
  usartxbase = (uint32_t)USARTx;

  /* 得到 USART 寄存器变址 */
  usartreg = (((uint8_t)USART_IT) >> 0x05);

  /* 得到中断位置 */
  itpos = USART_IT & IT_Mask;
  itmask = (((uint32_t)0x01) << itpos);
    
  if (usartreg == 0x01) /* The IT is in CR1 register */
  {
    usartxbase += 0x0C;
  }
  else if (usartreg == 0x02) /* The IT is in CR2 register */
  {
    usartxbase += 0x10;
  }
  else /* The IT is in CR3 register */
  {
    usartxbase += 0x14; 
  }
  if (NewState != DISABLE)
  {
    *(__IO uint32_t*)usartxbase  |= itmask;
  }
  else
  {
    *(__IO uint32_t*)usartxbase &= ~itmask;
  }
}

/**
  * @简述  使能或者失能指定 USART 的 DMA 请求.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3 or UART4.  
  * @参数  USART_DMAReq:指定 DMA 请求.
  *          这个参数可以是下面任意值的组合:
  *          USART_DMAReq_Tx: USART DMA 传输请求
  *          USART_DMAReq_Rx: USART DMA 接收请求
  * @参数  NewState: DMA 请求源的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @注解  DMA 模式不能应用于 UART5.  
  * @返回  没有
  */
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_USART_1234_PERIPH(USARTx));
  assert_param(IS_USART_DMAREQ(USART_DMAReq));  
  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
  if (NewState != DISABLE)
  {
    /* 通过设置USART CR3 寄存器的DMAT、DMAT位组合,来使能选择DMA传输请求 */
    USARTx->CR3 |= USART_DMAReq;
  }
  else
  {
    /* 通过设置USART CR3 寄存器的DMAT、DMAT位组合,来失能选择DMA传输请求 */
    USARTx->CR3 &= (uint16_t)~USART_DMAReq;
  }
}

/**
  * @简述  设置 USART 节点的地址.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
  * @参数  USART_Address: 设置 USART 节点的地址.
  * @返回  没有
  */ 
void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_ADDRESS(USART_Address)); 
    
  /* 清除 USART 地址 */
  USARTx->CR2 &= CR2_Address_Mask;
  /* 设置 USART 节点的地址 */
  USARTx->CR2 |= USART_Address;
}

/**
  * @简述  选择 USART 的唤醒方式.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
  * @参数  USART_WakeUp: 指定 USART 的唤醒方式.
  *          这个参数可以是下面的值之一 :
  *          USART_WakeUp_IdleLine:    空闲总线唤醒
  *          USART_WakeUp_AddressMark: 地址标记唤醒
  * @返回  没有
  */
void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_WAKEUP(USART_WakeUp));
  
  USARTx->CR1 &= CR1_WAKE_Mask;
  USARTx->CR1 |= USART_WakeUp;
}

/**
  * @简述  检查 USART 是否处于静默模式.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
  * @参数  NewState: USART 静默模式的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.
  * @返回  没有
  */
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState)); 
  
  if (NewState != DISABLE)
  {
    /* 通过置位CR1寄存器的RWU位使能USART静音模式 */
    USARTx->CR1 |= CR1_RWU_Set;
  }
  else
  {
    /* 通过清零CR1寄存器的RWU位失能USART静音模式 */
    USARTx->CR1 &= CR1_RWU_Reset;
  }
}

/**
  * @简述  设置 USART LIN 中断检测长度.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
  * @参数  USART_LINBreakDetectLength: LIN 中断检测长度.
  *          这个参数可以是下面的值之一 :
  *          USART_LINBreakDetectLength_10b: 10位间断检测
  *          USART_LINBreakDetectLength_11b: 11位间断检测
  * @返回  没有
  */
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)
{
  /* 检查参数 */
  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;  
}

/**
  * @简述  使能或者失能 USARTx 的 LIN 模式.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
  * @参数  NewState: USART LIN 模式的新状态.
  *                  这个参数可以是: ENABLE or DISABLE.
  * @返回  没有
  */
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  
  if (NewState != DISABLE)
  {
    /* 通过置位CR2寄存器的LINEN位使能LIN模式 */
    USARTx->CR2 |= CR2_LINEN_Set;
  }
  else
  {
    /* 通过清零CR2寄存器的LINEN位失能LIN模式 */
    USARTx->CR2 &= CR2_LINEN_Reset;
  }
}

/**
  * @简述  通过外设 USARTx 发送单个数据.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备.
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
  * @参数  Data: 要发送的数据.
  * @返回  没有
  */
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data)); 
    
  /* 发送数据 */
  USARTx->DR = (Data & (uint16_t)0x01FF);
}

/**
  * @简述  返回 USARTx 最近接收到的数据.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备.
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
  * @返回  接收数据.
  */
uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* 接收数据 */
  return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
}

/**
  * @简述  发送中断字.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 或 UART5.
  * @返回  没有
  */
void USART_SendBreak(USART_TypeDef* USARTx)
{
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* 发送中断字 */
  USARTx->CR1 |= CR1_SBK_Set;
}

/**
  * @简述  设置指定的 USART 保护时间.
  * @参数  USARTx: x可以为1,2或3以选择USART的外围设备.
  * @参数  USART_GuardTime: 指定的保护时间.
  * @注解  这个保护时间位不能应用于 UART4 和 UART5.   
  * @返回  没有
  */
void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)
{    
  /* 检查参数 */
  assert_param(IS_USART_123_PERIPH(USARTx));
  
  /* 清除 USART 保护时间 */
  USARTx->GTPR &= GTPR_LSB_Mask;
  /* 设置 USART 保护时间 */
  USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);
}

/**
  * @简述  设置 USART 时钟预分频.
  * @参数  USARTx: 选择 USART 或者 UART 的外围设备. 
  *                这个参数可以是下面的值之一 : USART1, USART2, USART3, UART4 or UART5.
  * @参数  USART_Prescaler: 指定预分频器.  
  * @注解  这个函数是用于 UART4 和 UART5 的 IrDA 模式.
  * @返回  没有
  */
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)
{ 
  /* 检查参数 */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* 清除 USART 预分频器 */
  USARTx->GTPR &= GTPR_MSB_Mask;
  /* 设置 USART 预分频器 */
  USARTx->GTPR |= USART_Prescaler;
}

/**
  * @简述  使能或者失能指定 USART 的智能卡模式.
  * @参数  USARTx: x可以为1,2或3以选择USART的外围设备.
  * @参数  NewState: USART 智能卡模式的新状态.
  *                  这个参数可以是: ENABLE 或 DISABLE.     
  * @注解  这个智能卡模式不能应用于 UART4 和 UART5 . 
  * @返回  没有
  */
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
{
  /* 检查参数 */
  assert_param(IS_USART_123_PERIPH(USARTx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));
  if (NewState != DISABLE)
  {
    /* 通过置位CR3寄存器的SCEN位使能SC模式 */
    USARTx->CR3 |= CR3_SCEN_Set;
  }
  else
  {
    /* 通过清零CR3寄存器的SCEN位失能SC模式 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -