完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。
这里使用的是G071RB开发板,已经自带有24C08A芯片,是一个8K的EEPROM芯片,使用I2C总线来控制这个芯片,写入数据。 实验步骤 1、CubeMx中芯片选择STM32G071RBTx,新建工程 2、开启SWD调试、HSE 3、开启USART1 ,设置波特率115200、8bit、None(无奇偶检验)、停止位1 4、 设置PB5为推挽输出模式,默认上拉,用于控制eeprom的WP引脚 5、 选择PB7引脚,设置为I2C1_SDA,PB6设置为I2C_SCL,再激活I2C1,I2C Speed Moed选择:Standard Mode(标准模式),其他保持默认参数 6、设置时钟树,HCLK=64MHz 7、在工程管理里面,设置好参数,生成代码使用MDK打开。 代码部分 1、在Debug选项卡中,Flash Download勾上“Reset and Run” 2、添加printf打印代码,在usart.c文件添加如下代码 /* USER CODE BEGIN 0 */ #include 《stdio.h》 /* USER CODE BEGIN 0 */ #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker-》Libraries-》Small printf set to ‘Yes’) calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ /** * @brief Retargets the C library printf function to the USART. * @param None * @retval None */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); return ch; } /* USER CODE END 0 */ 3、设置24C08A的地址 这里用的是8K的芯片,所以有P1,P0位( ),有4个块区域,每个区域有256字节。 ,这就是8K芯片。A0表示第一块256字节的设备地址,A2表示第二块256字节的设备地址,A4表示第三块256字节的设备地址,A6表示第四块256字节的设备地址 在i2c.h文件中添加如下代码 /* USER CODE BEGIN Includes */ #define ADDR_24LC08_WRITE 0XA0 //设备地址和写指令 #define ADDR_24LC08_READ 0XA1 //设备地址和读指令 #define BufferSize 15 /* USER CODE END Includes */ 4、在main.c文件中添加如下代码 /* USER CODE BEGIN Includes */ #include 《stdio.h》 #include 《string.h》 uint16_t i; /* USER CODE END Includes */ int main(void) { * * * /* USER CODE BEGIN 2 */ uint8_t writerbuff[BufferSize]=“This is a test.”; uint8_t readbuff[BufferSize]; HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET); //下拉引脚,激活eeprom芯片 if(HAL_I2C_Mem_Write(&hi2c1,ADDR_24LC08_WRITE,0,I2C_MEMADD_SIZE_8BIT,writerbuff,BufferSize,0x10)==HAL_OK) printf(“Write succeeded.rn”); else printf(“Write failed.rn”); HAL_Delay(5); //等待芯片写周期完成 HAL_I2C_Mem_Read(&hi2c1,ADDR_24LC08_READ,0,I2C_MEMADD_SIZE_8BIT,readbuff,BufferSize,0x10); printf(“The data in the chip is as follows:rn”); for(i=0;i《BufferSize;i++) //读取的数据通过串口打印出来 { printf(“%c”,readbuff[i]); } if(memcmp(writerbuff,readbuff,BufferSize)==0) //对比写入数据与读取数据是否一致 printf(“rnVerification succeeded.rn”); else printf(“rnVerification failed.rn”); * * * } 5、编译好固件后,烧录进去芯片。串口输出如下 |
|
|
|
只有小组成员才能发言,加入小组>>
4274个成员聚集在这个小组
加入小组3275 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4216 浏览 1 评论
4221 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 18:10 , Processed in 0.780174 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号