STM32 HAL I2c读写24c02测试

STM32 DK45 0评论

使用hal库来读写24c02还是很简单的。下面列一下具体步骤。

测试硬件:stm32F0 Discovery开发板,24c02我借用wzt51开发板上面的。

先用cubemx进行配置打开I2c

20170320142810

接下来配置具体I2c的一些参数:

20170320143112

我没有使用中断模式,也不用从模式,所以也就红圈圈起来的地方我配置了个速度,其他大部分都是默认。这样就可以

生成代码。

 

int main(void)
{

  /* USER CODE BEGIN 1 */
	uint8_t sbuf[]={0x09,0x06};
  uint8_t rbuf[5];
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		HAL_I2C_Mem_Write(&hi2c1, 0XA0,1,I2C_MEMADD_SIZE_8BIT,sbuf,1,0xff);
		HAL_Delay(5);
		HAL_I2C_Mem_Read(&hi2c1, 0xA0, 1, I2C_MEMADD_SIZE_8BIT, rbuf, 1,0xfff);
		
		HAL_Delay(1000);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

接下来就是写主函数,st官方HAL库里面有直接的mem读写操作接口,也可以直接操作24c02。

不过这里有几个要注意的地方:

第一:读和写之间要加延时,要不然容易出现收不到应答的情况

第二:I2C_MEMADD_SIZE_8BIT   这个地方不要直接写数字,这也是我调试时候卡了我半天的地方

现在用逻辑分析仪抓取就没有问题了:

写操作

20170320144524

读操作:

20170320144601

 

 

喜欢 (10)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址