i2c设置地址计算

I2C总线设备地址:

设备地址标识外设在总线上的唯一性,每一个外设都有唯一的设备地址,设备地址由原理图和芯片手册共同定义!CPU通过设备地址来访问到I2C总线上的某个外设!类似"学生的学号"


例如:
以AT24C02存储器为例:
通过查阅芯片手册发现
设备地址=01010A2A1A0(去掉R/W位,高位补0),硬件将A2A1A0都接地=》设备地址=01010000=0x50
再次得到:
如果CPU读设备,那么读设备地址=设备地址<<1 | 1=>
1010A2A1A01=>10100001=>0xa1
如果CPU写设备,那么写设备地址=设备地址<<1 | 0 = 0xa0


而有些芯片是没有直接给出I2C设备地址的,只有读写设备地址

例如MT9P031 芯片手册

Slave Address
The 8-bit address of a two-wire serial interface device consists of 7 bits of address and 1
bit of direction. A “0” in the LSB (least significant bit) of the address indicates write mode
(0xBA), and a “1” indicates read mode (0xBB).


如此就可以按照上面的方法,倒着推出I2C设备地址。

MT9P031 图像传感器
读0xBB=10111011  
写0xBA=10111010
0101 1101 = 0x5d 
设备地址为 0x5d



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在STM32中,可以通过以下步骤设置I2C1波特率控制: 1. 配置I2C1引脚。在GPIO初始化中配置I2C1的SCL和SDA引脚为复用模式,并设置为开漏输出(ODR高电平时为高阻态)。 2. 初始化I2C1。通过I2C_Init函数初始化I2C1的时钟速率、I2C模式等参数。其中,时钟速率的计算公式为: I2C_Speed = APB1时钟频率 / (I2C时钟周期 * 2) 其中,I2C时钟周期的取值范围为0到15,可以通过I2C_ClockSpeed_TypeDef枚举类型进行设置。 3. 设置I2C1的CCR寄存器。在I2C初始化之后,可以通过I2C_CalculatePEC函数计算实际的I2C时钟速率和CCR寄存器的值。然后,通过I2C_SetCCR函数设置I2C1的CCR寄存器。 下面是一个示例代码片段: ``` GPIO_InitTypeDef GPIO_InitStructure; I2C_InitTypeDef I2C_InitStructure; // 配置I2C1引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化I2C1 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_OwnAddress1 = 0x00; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 100000; // 100KHz I2C_Init(I2C1, &I2C_InitStructure); // 设置I2C1的CCR寄存器 uint32_t I2C_Speed = 0; uint16_t I2C_CCR = 0; I2C_CalculatePEC(I2C1, 100000, &I2C_Speed, &I2C_CCR); I2C_SetCCR(I2C1, I2C_CCR); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值