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.

  /* I2C Init */
  I2C_Master_Init();
  
  /* I2C Test (mpu6050) */ 
  uint8_t i2c_tmp = 0;
  
  // Reset device.
  i2c_tmp = 0x80;
  I2C_Write(0xD0, 0x6B, &i2c_tmp, 0x01);
  
  // Delay some time
  for(int i=0; i<2000; i++){__asm("nop");}      
  
  // Wake up chip.
  i2c_tmp = 0x00;
  I2C_Write(0xD0, 0x6B, &i2c_tmp, 0x01);
  
  // Read chip id
  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.)

沒有留言:

張貼留言