在线时间216 小时
UID2029919
ST金币0
蝴蝶豆0
注册时间2013-7-31
金牌会员
- 最后登录
- 2020-7-18
|
a0a.1 32b0c
最近看到好多网友说ST的硬件I2C一直卡死,发表一下自己调硬件I2C的心得吧!TMP275和其他的I2C器件不同,它的器件地址有8位,最低位为0是器件的写地址,为1的是器件的读地址,所以读写的时候就要注意地址!
void TMP275_Init(void)
{
I2C_GPIO_Init();
I2C_Mode_Init();
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_AcknowledgeConfig(I2C1, ENABLE);
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0X90, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, 0X01);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1, 0XFE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1, ENABLE);
}
这是TMP275的初始化函数,主要配置寄存器,主要操作步骤为:
1.检测SDA是否空闲
2.发起始信号
3.发器件地址(写模式)
4.发寄存器地址
5.发要写入的数据
6.发送结束信号
注意每次操作之后都要检查对应的“事件”是否成功!
uint8_t I2c_Buf[2];
void I2C_Read_TMP275(void)
{
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
I2C_AcknowledgeConfig(I2C1, ENABLE);
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x90, I2C_Direction_Transmitter);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1, 0X00);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1, ENABLE);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1, 0x91, I2C_Direction_Receiver);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
I2c_Buf[0]= I2C_ReceiveData(I2C1);
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
I2c_Buf[1]= I2C_ReceiveData(I2C1);
I2C_AcknowledgeConfig(I2C1, DISABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
这是TMP275的读取数据函数,数据存放在I2c_Buf中,主要步骤为:
1.检测SDA是否空闲
2.发起始信号
3.发器件地址(写模式)
4.发寄存器地址
5.发器件地址(读模式)
6.读取数据
7.发送结束信号
同样每次操作之后都要检查对应的“事件”是否成功,在函数里面我为了防止接收不到应答信号,重新使能了几次应答
|
-
-
609.01 KB, 下载次数: 193, 下载积分: ST金币 -1
|