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

📄 stm32f10x_i2c.c

📁 stm32f10xx的中文译文例程
💻 C
📖 第 1 页 / 共 4 页
字号:
  assert_param(IS_I2C_DIRECTION(I2C_Direction));

  /* Test on the direction to set/reset the read/write bit [测试读/写位的状态是置位还是复位]*/
  if (I2C_Direction != I2C_Direction_Transmitter)
  {
    /* Set the address bit0 for read [置位地址位的0位到读状态]*/
    Address |= OAR1_ADD0_Set;
  }
  else
  {
    /* Reset the address bit0 for write [复位地址位的0位到写状态]*/
    Address &= OAR1_ADD0_Reset;
  }
  /* Send the address [发送地址]*/
  I2Cx->DR = Address;
}

/*******************************************************************************
* 函数名称: I2C_ReadRegister
* 功能描述: 读取特定的I2C寄存器并返回其值.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C部件
*           (2)I2C_Register:将要读取的寄存器.
*                    这个参数可以是下面的值之一:
*                       - I2C_Register_CR1:  CR1 寄存器.
*                       - I2C_Register_CR2:   CR2 寄存器.
*                       - I2C_Register_OAR1:  OAR1 寄存器.
*                       - I2C_Register_OAR2:  OAR2 寄存器.
*                       - I2C_Register_DR:    DR 寄存器.
*                       - I2C_Register_SR1:   SR1 寄存器.
*                       - I2C_Register_SR2:   SR2 寄存器.
*                       - I2C_Register_CCR:   CCR 寄存器.
*                       - I2C_Register_TRISE: TRISE 寄存器.
* 输出参数: 无
* 返回参数: 选择寄存器的值.
*******************************************************************************/
u16 I2C_ReadRegister(I2C_TypeDef* I2Cx, u8 I2C_Register)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_I2C_REGISTER(I2C_Register));

  /* Return the selected register value [返回选择寄存器的值]*/
  return (*(vu16 *)(*((vu32 *)&I2Cx) + I2C_Register));
}

/*******************************************************************************
* 函数名称: I2C_SoftwareResetCmd
* 功能描述: 使能(或禁止)特定I2C软件复位.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)NewState:I2C软件复位的新状态.
*                    该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Peripheral under reset [外设下复位]*/
    I2Cx->CR1 |= CR1_SWRST_Set;
  }
  else
  {
    /* Peripheral not under reset [外设不下复位]*/
    I2Cx->CR1 &= CR1_SWRST_Reset;
  }
}

/*******************************************************************************
* 函数名称: I2C_SMBusAlertConfig
* 功能描述: 为特定的I2C驱动SMBAlert引脚为高或低.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)I2C_SMBusAlert:SMBusAlert引脚电平。 
*                    这个参数可以是下面的值之一:
*                       - I2C_SMBusAlert_Low: SMBusAlert引脚驱动为低
*                       - I2C_SMBusAlert_High: SMBusAlert引脚驱动为高
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, u16 I2C_SMBusAlert)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_I2C_SMBUS_ALERT(I2C_SMBusAlert));

  if (I2C_SMBusAlert == I2C_SMBusAlert_Low)
  {
    /* Drive the SMBusAlert pin Low [驱动SMBusAlert引脚为低]*/
    I2Cx->CR1 |= I2C_SMBusAlert_Low;
  }
  else
  {
    /* Drive the SMBusAlert pin High  [驱动SMBusAlert引脚为高]*/
    I2Cx->CR1 &= I2C_SMBusAlert_High;
  }
}

/*******************************************************************************
* 函数名称: I2C_TransmitPEC
* 功能描述: 使能(或禁止)特定I2C的PEC传输
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)NewState:I2C的PEC传输的新状态.
*                    该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected I2C PEC transmission [使能选择I2C的PEC传输]*/
    I2Cx->CR1 |= CR1_PEC_Set;
  }
  else
  {
    /* Disable the selected I2C PEC transmission [禁止选择I2C的PEC传输]*/
    I2Cx->CR1 &= CR1_PEC_Reset;
  }
}

/*******************************************************************************
* 函数名称: I2C_PECPositionConfig
* 功能描述: 选择特定的I2C的PEC位置.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)I2C_PECPosition:PEC位置. 
*                    这个参数可以是下面的值之一:
*                       - I2C_PECPosition_Next: 下一字节就是PEC
*                       - I2C_PECPosition_Current: 当前字节就是PEC
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, u16 I2C_PECPosition)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_I2C_PEC_POSITION(I2C_PECPosition));

  if (I2C_PECPosition == I2C_PECPosition_Next)
  {
    /* Next byte in shift register is PEC [在移位寄存器中的下一个字节是PEC]*/
    I2Cx->CR1 |= I2C_PECPosition_Next;
  }
  else
  {
    /* Current byte in shift register is PEC [在移位寄存器中的当前字节是PEC]*/
    I2Cx->CR1 &= I2C_PECPosition_Current;
  }
}

/*******************************************************************************
* 函数名称: I2C_CalculatePEC
* 功能描述: 使能(或禁止)已传输字节的PEC计算值.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)NewState:PEC计算值的新状态. 该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected I2C PEC calculation [使能选择的I2C PEC计算值]*/
    I2Cx->CR1 |= CR1_ENPEC_Set;
  }
  else
  {
    /* Disable the selected I2C PEC calculation [禁止选择的I2C PEC计算值]*/
    I2Cx->CR1 &= CR1_ENPEC_Reset;
  }
}

/*******************************************************************************
* 函数名称: I2C_GetPEC
* 功能描述: 为特定I2C接口返回PEC值.
* 输入参数: I2Cx:x可为1或2来选择I2C外设.
* 输出参数: 无
* 返回参数: PEC值.
*******************************************************************************/
u8 I2C_GetPEC(I2C_TypeDef* I2Cx)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));

  /* Return the selected I2C PEC value [返回选择的I2C PEC值]*/
  return ((I2Cx->SR2) >> 8);
}

/*******************************************************************************
* 函数名称: I2C_ARPCmd
* 功能描述: 使能(或禁止)特定的I2C的ARP
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)NewState:I2Cx的ARP的新状态.该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState != DISABLE)
  {
    /* Enable the selected I2C ARP [使能选择的I2C ARP]*/
    I2Cx->CR1 |= CR1_ENARP_Set;
  }
  else
  {
    /* Disable the selected I2C ARP [禁止选择的I2C ARP]*/
    I2Cx->CR1 &= CR1_ENARP_Reset;
  }
}

/*******************************************************************************
* 函数名称: I2C_StretchClockCmd
* 功能描述: 使能(或禁止)特定的I2C时钟扩展
* 输入参数: I(1)2Cx:x可为1或2来选择I2C外设.
*           (2)NewState:时钟伸展的新状态.该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_FUNCTIONAL_STATE(NewState));

  if (NewState == DISABLE)
  {
    /* Enable the selected I2C Clock stretching [使能选择的I2C时钟扩展]*/
    I2Cx->CR1 |= CR1_NOSTRETCH_Set;
  }
  else
  {
    /* Disable the selected I2C Clock stretching [禁止选择的I2C时钟扩展]*/
    I2Cx->CR1 &= CR1_NOSTRETCH_Reset;
  }
}

/*******************************************************************************
* 函数名称: I2C_FastModeDutyCycleConfig
* 功能描述: 选择特定I2C的快速模式占空周期.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
*           (2)I2C_DutyCycle:快速模式下占空周期。
*                    这个参数可以是下面的值之一:
*                       - I2C_DutyCycle_2: I2C快模式Tlow/Thigh=2
*                       - I2C_DutyCycle_16_9: I2C快模式Tlow/Thigh=16/9
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, u16 I2C_DutyCycle)
{
  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));
  assert_param(IS_I2C_DUTY_CYCLE(I2C_DutyCycle));

  if (I2C_DutyCycle != I2C_DutyCycle_16_9)
  {
    /* I2C fast mode Tlow/Thigh=2 [I2C快模式Tlow/Thigh=2]*/
    I2Cx->CCR &= I2C_DutyCycle_2;
  }
  else
  {
    /* I2C fast mode Tlow/Thigh=16/9 [I2C快模式Tlow/Thigh=16/9]*/
    I2Cx->CCR |= I2C_DutyCycle_16_9;
  }
}

/*******************************************************************************
* 函数名称: I2C_GetLastEvent
* 功能描述: 返回最近I2Cx事件.
* 输入参数: I2Cx:x可为1或2来选择I2C外设.
* 输出参数: 无
* 返回参数: 最近的I2Cx事件
*******************************************************************************/
u32 I2C_GetLastEvent(I2C_TypeDef* I2Cx)
{
  u32 lastevent = 0;
  u32 flag1 = 0, flag2 = 0;

  /* Check the parameters [检查参数]*/
  assert_param(IS_I2C_ALL_PERIPH(I2Cx));

⌨️ 快捷键说明

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