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

📄 stm32f10x_usart.c

📁 stm32f10xx的中文译文例程
💻 C
📖 第 1 页 / 共 3 页
字号:
* 输入参数: (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_PE:   奇偶错误中断
*                       - USART_IT_ERR:  错误中断(桢错误, 噪声错误, 超速错误)
*           (3)指定USARTx中断的新状态.这个参数能够取:ENABLE或者DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ITConfig(USART_TypeDef* USARTx, u16 USART_IT, FunctionalState NewState)
{
  u32 usartreg = 0x00, itpos = 0x00, itmask = 0x00;
  u32 usartxbase = 0x00;

  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CONFIG_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无法使用]*/     
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  usartxbase = (*(u32*)&(USARTx));

  /* Get the USART register index [取得USART寄存器变址]*/
  usartreg = (((u8)USART_IT) >> 0x05);

  /* Get the interrupt position [取得中断位置]*/
  itpos = USART_IT & IT_Mask;

  itmask = (((u32)0x01) << itpos);
    
  if (usartreg == 0x01) /* The IT is in CR1 register [中断在CR1寄存器中]*/
  {
    usartxbase += 0x0C;
  }
  else if (usartreg == 0x02) /* The IT is in CR2 register [中断在CR2寄存器中]*/
  {
    usartxbase += 0x10;
  }
  else /* The IT is in CR3 register [中断在CR3寄存器中]*/
  {
    usartxbase += 0x14; 
  }
  if (NewState != DISABLE)
  {
    *(vu32*)usartxbase  |= itmask;
  }
  else
  {
    *(vu32*)usartxbase &= ~itmask;
  }
}

/*******************************************************************************
* 函数名称: USART_DMACmd
* 功能描述: 使能或禁用特定的USART DMA接口.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3 or UART4.
*                    注意: 这个DMA不能用于UART5.
*           (2)USART_DMAReq: 指定DMA请求.
*                    这个参数可以是下面任意值的组合:
*                       - USART_DMAReq_Tx: USART DMA 传输请求
*                       - USART_DMAReq_Rx: USART DMA 接收请求
*           (3)NewState: DMA请求源的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_DMACmd(USART_TypeDef* USARTx, u16 USART_DMAReq, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_1234_PERIPH(USARTx));
  assert_param(IS_USART_DMAREQ(USART_DMAReq));  
  assert_param(IS_FUNCTIONAL_STATE(NewState)); 

  if (NewState != DISABLE)
  {
    /* Enable the DMA transfer for selected requests by setting the DMAT and/or
       DMAR bits in the USART CR3 register [通过设置USART CR3 寄存器的DMAT、DMAT位组合,来使能选择DMA传输请求]*/
    USARTx->CR3 |= USART_DMAReq;
  }
  else
  {
    /* Disable the DMA transfer for selected requests by clearing the DMAT and/or
       DMAR bits in the USART CR3 register [通过设置USART CR3 寄存器的DMAT、DMAT位组合,来禁止选择DMA传输请求]*/
    USARTx->CR3 &= (u16)~USART_DMAReq;
  }
}

/*******************************************************************************
* 函数名称: USART_SetAddress
* 功能描述: 设置USART节点的地址
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)USART_Address:指出了USART节点的地址
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetAddress(USART_TypeDef* USARTx, u8 USART_Address)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_ADDRESS(USART_Address)); 
    
  /* Clear the USART address [清除 USART地址]*/
  USARTx->CR2 &= CR2_Address_Mask;
  /* Set the USART address node [设置USART地址]*/
  USARTx->CR2 |= USART_Address;
}

/*******************************************************************************
* 函数名称: USART_WakeUpConfig
* 功能描述: 选择USART的唤醒方法.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)USART_WakeUp:指明了USART的唤醒方法.
*                    这个参数可以是下面的值之一 :
*                        - USART_WakeUp_IdleLine: IDLE线路唤醒
*                        - USART_WakeUp_AddressMark: 地址标记唤醒
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_WakeUpConfig(USART_TypeDef* USARTx, u16 USART_WakeUp)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_WAKEUP(USART_WakeUp));
  
  USARTx->CR1 &= CR1_WAKE_Mask;
  USARTx->CR1 |= USART_WakeUp;
}

/*******************************************************************************
* 函数名称: USART_ReceiverWakeUpCmd
* 功能描述: 决定USART是否在无声模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)Newstate:USART模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_ReceiverWakeUpCmd(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 USART mute mode  by setting the RWU bit in the CR1 register [通过置位CR1寄存器的RWU位使能USART静音模式]*/
    USARTx->CR1 |= CR1_RWU_Set;
  }
  else
  {
    /* Disable the USART mute mode by clearing the RWU bit in the CR1 register [通过清零CR1寄存器的RWU位禁止USART静音模式]*/
    USARTx->CR1 &= CR1_RWU_Reset;
  }
}

/*******************************************************************************
* 函数名称: USART_LINBreakDetectLengthConfig
* 功能描述: 设置USART LIN间隔检波长度.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)USART_LINBreakDetectLength指明了LIN间断检测长度.
*                    这个参数可以是下面的值之一 :
*                       - USART_LINBreakDetectLength_10b: 10位间断检测
*                       - USART_LINBreakDetectLength_11b: 11位间断检测
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, u16 USART_LINBreakDetectLength)
{
  /* Check the parameters [检查参数]*/
  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;  
}

/*******************************************************************************
* 函数名称: USART_LINCmd
* 功能描述: 使能或禁用USART LIN模式.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)Newstate:USART LIN模式的新状态.这个参数能够取:ENABLE或者DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_LINCmd(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 LIN mode by setting the LINEN bit in the CR2 register [通过置位CR2寄存器的LINEN位使能LIN模式]*/
    USARTx->CR2 |= CR2_LINEN_Set;
  }
  else
  {
    /* Disable the LIN mode by clearing the LINEN bit in the CR2 register [通过清零CR2寄存器的LINEN位禁止LIN模式]*/
    USARTx->CR2 &= CR2_LINEN_Reset;
  }
}

/*******************************************************************************
* 函数名称: USART_SendData
* 功能描述: 传输单个数据通过USARTx外围设备.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*           (2)Data:要被传输的数据.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SendData(USART_TypeDef* USARTx, u16 Data)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_DATA(Data)); 
    
  /* Transmit Data */
  USARTx->DR = (Data & (u16)0x01FF);
}

/*******************************************************************************
* 函数名称: USART_ReceiveData
* 功能描述: 返回最近由USARTx外围设备接收的数据.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
* 输出参数: 无
* 返回参数: 接收的数据.
*******************************************************************************/
u16 USART_ReceiveData(USART_TypeDef* USARTx)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* Receive Data */
  return (u16)(USARTx->DR & (u16)0x01FF);
}

/*******************************************************************************
* 函数名称: USART_SendBreak
* 功能描述: 传输间断符.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SendBreak(USART_TypeDef* USARTx)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* Send break characters [发送间断字符]*/
  USARTx->CR1 |= CR1_SBK_Set;
}

/*******************************************************************************
* 函数名称: USART_SetGuardTime
* 功能描述: 设置指定的USART保护时间.
* 输入参数: (1)USARTx:x可以为1,2或3以选择USART的外围设备.
*                  注意: 这个保护时间位不能用于UART4和UART5.
*           (2)USART_GuardTime:指定保护时间.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetGuardTime(USART_TypeDef* USARTx, u8 USART_GuardTime)
{    
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_123_PERIPH(USARTx));
  
  /* Clear the USART Guard time [清除USART保护时间]*/
  USARTx->GTPR &= GTPR_LSB_Mask;
  /* Set the USART guard time [设置USART保护时间*/
  USARTx->GTPR |= (u16)((u16)USART_GuardTime << 0x08);
}

/*******************************************************************************
* 函数名称: USART_SetPrescaler
* 功能描述: 设置USART时钟预分频器.
* 输入参数: (1)USARTx: 选择 USART 或者 UART的外围设备.
*                    这个参数可以是下面的值之一 :
*                     - USART1, USART2, USART3, UART4 or UART5.
*                  注意:这个函数是用于UART4和UART5的IrDA模式 .
*           (2)USART_Prescaler:指明预分频器.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void USART_SetPrescaler(USART_TypeDef* USARTx, u8 USART_Prescaler)
{ 
  /* Check the parameters [检查参数]*/
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  
  /* Clear the USART prescaler [清除USART预分频器]*/
  USARTx->GTPR &= GTPR_MSB_Mask;
  /* Set the USART prescaler [设置USART预分频器]*/
  USARTx->GTPR |= USART_Prescaler;
}

/*******************************************************************************

⌨️ 快捷键说明

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