#define I2C1_SDA_PIN GPIO_Pin_7 /* I2C1的SDA所接的GPIO引脚 */ #define I2C1_SCL_SOURCE GPIO_PinSource6 /* I2C1的SCL所接的GPIO引脚序号 */ #define I2C1_SDA_SOURCE GPIO_PinSource7 /* I2C1的SDA所接的GPIO引脚序号 */ #define I2C1_GPIO_AF GPIO_AF_I2C1 /* I2C1的SDA、SCL的GPIO引...
效率更高,写代码会相对简单,只要调用 IIC 的控制函数即可,不需要用代码去控制 SCL、SDA 的各种高低电平变化来实现 IIC 协议,只需要将 IIC 协议中的可变部分(如:从设备地址、传输数据等等)通过函数传参给控制器,控制器自动按照I2C协议实现传输,但是如果出现问题,就只能通过示波器看波形找问题...
MyI2C_Stop();//11 returndata; } 这里是芯片的写寄存器函数 voidMPU6050_WriteReg(uint8_treg_addr,uint8_tdata){ MyI2C_Start();//1 MyI2C_SendByte(MPU6050_WRITE_ADDR);//2 MyI2C_ReceiveACK();//3 MyI2C_SendByte(reg_addr);//4 MyI2C_ReceiveACK();//5 MyI2C_SendByte(data);//6 MyI...
I2C总线设备地址设置方法通常是一个7位或10位的数字,用于标识总线上的每个设备。在7位寻址模式下,地址范围是0x00到0x7F,而在10位寻址模式下,地址范围是0x000到0x3FF。I2C地址的最低位(LSB)通常用于指示读/写操作。 硬件地址设置1. 地址引脚配置 许多I2C设备都提供了用于地址设置...
19.1 关于I2C 19.1.1 I2C 协议 I²C(Inter-Integrated Circuit),常读作“I方C”,它是一种多主从架构串行通信总线。在1980年由飞利浦公司设计,用于让主板、嵌入式系统或手机连接低速周边设备。如今在嵌入式领域是非常常见通信协议,常用于MPU/MCU与外部设备连接通信、数据传输。
首先看i2c.h:#include "stm32f10x.h"#include "delay.h"//应答信号extern u8 ack;//初始化函数externvoidI2c_Init(void);//起动总线函数externvoidStart_I2c(void);//结束总线函数 externvoidStop_I2c(void);//应答子函数externvoidAck_I2c(u8 a);//字节数据发送函数externvoidSendByte(unsignedchar c)...
I2C_GenerateSTART(EEPROM_I2C, ENABLE); while(I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_MODE_SELECT) == ERROR); // EV5事件被检测到,发送设备地址(直接填入EEPROM的设备地址:EEPROM_ADDR) I2C_Send7bitAddress(EEPROM_I2C, EEPROM_ADDR, I2C_Direction_Transmitter); ...
//初始化I2C总线,使之成为空闲状态 IIC_SCL=1; IIC_SDA=1; } 2.开始状态:当SCL为高电平时,SDA从高电平到低电平进行跳变,然后SCL跳变为低电平,时刻装备接收数据 按照上图实现如下代码 :(注意:SDA有输入,输出两种状态) void IIC_start()
由于这个I2C代码是以前用过的,代码应该没问题,并且读用户寄存器仅调用了I2C_Start()和I2C_WriteByte(uint8_t Data)函数就收不到ACK了,不会是对HTU21D的操作不符合它本身的指令和数据顺序的原因。考虑到之前遇到过I2C设备本身有故障,折腾了很久才发现,怀疑这个HTU21D是坏的。于是联系卖家,卖家说不会坏,于是发给...