2016年1月26日 星期二

STM32F0_F3 I2C Master Driver Code

1. STM32F0週邊的架構和F3非常相似, 因此許多的Driver幾乎都是可以共用的, 底下要介紹的是
    I2C Master Driver Code.

2. 測試的硬體是使用STM32F072B Discovery Board + MPU6050 Sensor Board, I2C Clock =
    400KHz.

3. 首先下載i2c_master.c & i2c_master.h, 並把它加入專案內.




4. 加入後, 接著就可以進行i2c init 和 read/write測試了, 如下面程式碼所示, 使用i2c write 對
    mpu6050 初始化, 接著再使用i2c read 讀取 mpu6050 chip id.

  1. /* I2C Init */
  2. I2C_Master_Init();
  3. /* I2C Test (mpu6050) */
  4. uint8_t i2c_tmp = 0;
  5. // Reset device.
  6. i2c_tmp = 0x80;
  7. I2C_Write(0xD0, 0x6B, &i2c_tmp, 0x01);
  8. // Delay some time
  9. for(int i=0; i<2000; i++){__asm("nop");}
  10. // Wake up chip.
  11. i2c_tmp = 0x00;
  12. I2C_Write(0xD0, 0x6B, &i2c_tmp, 0x01);
  13. // Read chip id
  14. I2C_Read(0xD0, 0x75, &i2c_tmp, 0x01);

5. 可以從MPU6050 Datasheet看到, mpu6050 chip id的位址在0x75, 且chip id固定為0x68, 因此代表 i2c init 及 read chip id皆正常.

6. Logic analyzer 波形圖:
  • I2C Write: (Reset device.)
  • I2C Write: (Wake up chip.)
  • I2C Read: (Read chip id.)

沒有留言:

張貼留言