第7章 STM32CUBE I2C配置和AT24C02的读写

前言

硬件的配置由前面的工程递增,会根据目的修改部分控制代码
由于本人较懒,记录主要是过程,原理性的东西网上一大把,我就不赘述了,由于懒,主要由图片和代码加少量文字组成
源码地址https://gitcode.com/qq_36517072/stm32,第x章为cx文件夹


一、STM32CUBE配置I2C

由原理图可知对应的IO
alt text
正点原子采用的时软件模拟,出于学习考虑这里用硬件I2C,听说硬件I2C稳定性欠佳,在项目中还是使用软件模拟较好
CUBE配置对应的引脚
alt text
CUBE配置I2C1
alt text
ctrl+s保存generate code

二、代码和测试

本次测试的设备为AT24C02,读地址为0xa1,写地址为0xa0
main函数里添加读写代码,本来想放到freertos任务中,但有一个任务会在运行时卡死,也尝试进行连续写,发现超过8个字节便会出问题,连续读这么点字节看起来没啥问题,如需要这些问题后续可能会查

  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
	HAL_Delay(10);
	HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
	HAL_Delay(10);
	uint8_t i;
	uint8_t readbuf[256];
	uint8_t writebuf[]=		"hello world,hello peter";
	HAL_I2C_Mem_Read(&hi2c1, 0xa1, 0, I2C_MEMADD_SIZE_8BIT, readbuf, sizeof(writebuf), 100);
	printf("readbuf:%s\r\n",readbuf);
	HAL_Delay(10);
#if 1
	HAL_I2C_Mem_Write(&hi2c1, 0xa0, 0, I2C_MEMADD_SIZE_8BIT, writebuf,  8, 100);
	HAL_I2C_Mem_Write(&hi2c1, 0xa0, 8, I2C_MEMADD_SIZE_8BIT, writebuf,  sizeof(writebuf)-8, 100);
	HAL_Delay(100);
#else
	for(i=0;i<sizeof(writebuf);i++){
		HAL_I2C_Mem_Write(&hi2c1, 0xa0, i, I2C_MEMADD_SIZE_8BIT, &writebuf[i], 1, 100);
		HAL_Delay(5);
	}
#endif
	HAL_I2C_Mem_Read(&hi2c1, 0xa1, 0, I2C_MEMADD_SIZE_8BIT, readbuf,  sizeof(writebuf), 100);
	printf("readbuf:%s\r\n",readbuf);
  /* USER CODE END 2 */

连接好烧录器编译并烧录
打印信息如下,第一行的打印信息是改动前的
alt text


总结

主要介绍了STM32CUBE下I2C的配置和AT24C02的读写

参考

posted @ 2025-09-08 17:26  夏影~  阅读(76)  评论(0)    收藏  举报