STM32 HAL I2c读写24c02测试
使用hal库来读写24c02还是很简单的。下面列一下具体步骤。
测试硬件:stm32F0 Discovery开发板,24c02我借用wzt51开发板上面的。
先用cubemx进行配置打开I2c:
接下来配置具体I2c的一些参数:
我没有使用中断模式,也不用从模式,所以也就红圈圈起来的地方我配置了个速度,其他大部分都是默认。这样就可以
生成代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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 这个地方不要直接写数字,这也是我调试时候卡了我半天的地方
现在用逻辑分析仪抓取就没有问题了:
写操作
读操作: