IIC
IIC
1.IIC的地址问题
IIC中的器件地址
DEV_ADDRESS
是7位地址,但C语言中没有7bit的数据类型,所以你只能传uint8_t
的数据进去。HAL库会把这个变量的高7位提取出来作为地址,根据实际情况对最后一个读写位set或reset。通常数据手册在表述地址的时候,地址是在一个8位二进制数的低7位,比如6050就是0x68=0110 1000,但HAL库IIC传进去的地址在一个8位二进制数的高7位,就变成了
0xD0(写)或者0xD1(读)
这点要注意。HAL库你在传地址的时候不需要自己考虑第8位是0还是1,它那个函数内部会自动根据你调用的是IIC读还是IIC写来对那一位进行运算。不过你要是非要传第8位已经写0或1的地址进去也行,因为运算结果不会变,只要你不写反就行了
2. IIC的数据传输
IIC一般根据从机寄存器的位数来确定一次传几个字节的数据。通过以下函数中的 Size参数可以设定传输数据的字节数
1 | HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, |
就行了。
- 比如OLED里一次传一个字节的数据
1 | HAL_I2C_Mem_Write(&hi2c2,OLED0561_ADD,COM,I2C_MEMADD_SIZE_8BIT, |
- MPU6050封装的一次写指定长度的数据
1 | //IIC写一个字节 |
- 如何取出多字节的数据呢?
1 | u8 buf[6],res; |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.