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

正点原子采用的时软件模拟,出于学习考虑这里用硬件I2C,听说硬件I2C稳定性欠佳,在项目中还是使用软件模拟较好
CUBE配置对应的引脚

CUBE配置I2C1

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 */
连接好烧录器编译并烧录
打印信息如下,第一行的打印信息是改动前的

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

浙公网安备 33010602011771号