📄 stm32f10x_i2c.c
字号:
{
/* Disable the selected I2C peripheral [禁止选择的I2C设备]*/
I2Cx->CR1 &= CR1_PE_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_DMACmd
* 功能描述: 使能(或禁能)特定的I2C的DMA请求.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C部件.
* (2)NewState:I2C的DMA传输的新状态.该参数可为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_DMACmd(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 DMA requests [使能选则的I2C DMA请求]*/
I2Cx->CR2 |= CR2_DMAEN_Set;
}
else
{
/* Disable the selected I2C DMA requests [禁用选则的I2C DMA请求]*/
I2Cx->CR2 &= CR2_DMAEN_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_DMALastTransferCmd
* 功能描述: 指出下一个DMA传输是最后一个.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C部件.
* (2)NewState:I2C的最后DMA传输的新状态.该参数为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Next DMA transfer is the last transfer [下一个传输是最后一个传输]*/
I2Cx->CR2 |= CR2_LAST_Set;
}
else
{
/* Next DMA transfer is not the last transfer [下一个传输不是最后一个传输]*/
I2Cx->CR2 &= CR2_LAST_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_GenerateSTART
* 功能描述: 产生I2C通信的起始条件.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)NewState:I2C起始条件生成的新状态.该参数为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无.
*******************************************************************************/
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Generate a START condition [产生一个起始条件]*/
I2Cx->CR1 |= CR1_START_Set;
}
else
{
/* Disable the START condition generation [禁止一个起始条件产生]*/
I2Cx->CR1 &= CR1_START_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_GenerateSTOP
* 功能描述: 产生I2C通信的停止条件.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)NewState:I2C停止条件生成的新状态.该参数为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无.
*******************************************************************************/
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Generate a STOP condition [产生一个停止条件]*/
I2Cx->CR1 |= CR1_STOP_Set;
}
else
{
/* Disable the STOP condition generation [禁止一个停止条件产生]*/
I2Cx->CR1 &= CR1_STOP_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_AcknowledgeConfig
* 功能描述: 使能(或禁能)特定的I2C的确认特性.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)NewState:I2C确认特性的新状态。该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无.
*******************************************************************************/
void I2C_AcknowledgeConfig(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 acknowledgement [允许确认]*/
I2Cx->CR1 |= CR1_ACK_Set;
}
else
{
/* Disable the acknowledgement [禁止确认]*/
I2Cx->CR1 &= CR1_ACK_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_OwnAddress2Config
* 功能描述: 配置特定的I2C自地址2.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)地址:确认7位I2C自地址2.
* 输出参数: 无
* 返回参数: 无.
*******************************************************************************/
void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address)
{
u16 tmpreg = 0;
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
/* Get the old register value [取得旧的寄存器值]*/
tmpreg = I2Cx->OAR2;
/* Reset I2Cx Own address2 bit [7:1] [复位I2Cx自己地址位[7:1]]*/
tmpreg &= OAR2_ADD2_Reset;
/* Set I2Cx Own address2 [设置I2Cx自己地址]*/
tmpreg |= (u16)(Address & (u16)0x00FE);
/* Store the new register value [保存新的寄存器值]*/
I2Cx->OAR2 = tmpreg;
}
/*******************************************************************************
* 函数名称: I2C_DualAddressCmd
* 功能描述: 使能(或禁能)特定的I2C双重地址模式.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)NewState:I2C双重地址模式的新状态。该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_DualAddressCmd(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 dual addressing mode [允许双地址模式]*/
I2Cx->OAR2 |= OAR2_ENDUAL_Set;
}
else
{
/* Disable dual addressing mode [禁止双地址模式]*/
I2Cx->OAR2 &= OAR2_ENDUAL_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_GeneralCallCmd
* 功能描述: 使能(或禁能)特定I2C的通用调用特性.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)NewState:I2C通用调用的新状态。该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_GeneralCallCmd(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 generall call [允许通用调用]*/
I2Cx->CR1 |= CR1_ENGC_Set;
}
else
{
/* Disable generall call [禁止通用调用]*/
I2Cx->CR1 &= CR1_ENGC_Reset;
}
}
/*******************************************************************************
* 函数名称: I2C_ITConfig
* 功能描述: 使能(或禁能)特定的I2C中断.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)I2C_IT:需要使能(或禁能)的I2C中断源。.
* 这个参数可以是下面任意值得组合:
* - I2C_IT_BUF: 缓冲区中断屏蔽
* - I2C_IT_EVT: 事件中断屏蔽
* - I2C_IT_ERR: 错误中断屏蔽
* (3)NewState:指定的I2C中断的新状态。该参数为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_ITConfig(I2C_TypeDef* I2Cx, u16 I2C_IT, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
assert_param(IS_I2C_CONFIG_IT(I2C_IT));
if (NewState != DISABLE)
{
/* Enable the selected I2C interrupts [使能选择的I2C中断]*/
I2Cx->CR2 |= I2C_IT;
}
else
{
/* Disable the selected I2C interrupts [禁止选择的I2C中断]*/
I2Cx->CR2 &= (u16)~I2C_IT;
}
}
/*******************************************************************************
* 函数名称: I2C_SendData
* 功能描述: 通过I2C发送一字节数据.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)Data:需要传送的字节.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void I2C_SendData(I2C_TypeDef* I2Cx, u8 Data)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
/* Write in the DR register the data to be sent [写发送的数据到DR寄存器]*/
I2Cx->DR = Data;
}
/*******************************************************************************
* 函数名称: I2C_ReceiveData
* 功能描述: 返回I2Cx外设最近接收的数据.
* 输入参数: I2Cx:x可为1或2来选择I2C外设.
* 输出参数: 无
* 返回参数: 接收数据值.
*******************************************************************************/
u8 I2C_ReceiveData(I2C_TypeDef* I2Cx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
/* Return the data in the DR register [返回DR寄存器的数据]*/
return (u8)I2Cx->DR;
}
/*******************************************************************************
* 函数名称: I2C_Send7bitAddress
* 功能描述: 传输地址字节来选择从设备.
* 输入参数: (1)I2Cx:x可为1或2来选择I2C外设.
* (2)Address:将要被发送的从设备地址
* (3)I2C_Direction:确定I2C设备为主设备或从设备.
* 这个参数可以是下面的值之一
* - I2C_Direction_Transmitter: 选择发送模式
* - I2C_Direction_Receiver: 选择接收模式
* 输出参数: 无
* 返回参数: 无.
*******************************************************************************/
void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, u8 Address, u8 I2C_Direction)
{
/* Check the parameters [检查参数]*/
assert_param(IS_I2C_ALL_PERIPH(I2Cx));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -