版本比较
比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
参考资料
- 数据手册:LIS3DH.pdf
- 官方驱动代码:lis3dh与lis3dsh官方驱动及例子.rar
- 其他资料:
调试记录
关于CS脚和I2C地址
CS脚接高时表示使用I2C接口,接低时表示使用SPI接口。
使用I2C接口时,通信地址高6位是0b001100,第7位由SDO/SA0脚决定,接高电平时为1,接低电平时为0,第8位是读写标志位,读取时为1,写入时为0,地址组合关系如下:
测试I2C通信是否成功,可以读取0x0f寄存器,这个是LIS3DH的ID寄存器,值为0x33表示通信成功。
代码块 |
---|
/* * CS=1, use I2C, CS=0, use SPI * on I2C mode, SDO=0, I2C addr is 0x31 & 0x30, SDO=1, addr is 0x33 & 0x323 */ #if 0 #define LIS3DH_I2C_ADD_READ 0x31U #define LIS3DH_I2C_ADD_WRITE 0x30U #else #define LIS3DH_I2C_ADD_READ 0x33U #define LIS3DH_I2C_ADD_WRITE 0x32U #endif #define LIS3DH_WHO_AM_I 0x0FU #define LIS3DH_ID 0x33U |
关于IO模拟I2C的通信过程
参考下代码:
代码块 |
---|
void lis3dh_write_one_byte(uint8_t addr, uint8_t data) { iic_start(); iic_send_byte(LIS3DH_I2C_ADD_WRITE); iic_wait_ack(); iic_send_byte(addr); iic_wait_ack(); iic_send_byte(data); iic_wait_ack(); iic_stop(); delay_ms(10); } uint8_t lis3dh_read_one_byte(uint8_t addr) { iic_start(); iic_send_byte(LIS3DH_I2C_ADD_WRITE); iic_wait_ack(); iic_send_byte(addr); iic_wait_ack(); iic_start(); iic_send_byte(LIS3DH_I2C_ADD_READ); iic_wait_ack(); uint8_t data = iic_read_byte(0); iic_stop(); return data; } |
参考链接
目录 |
---|