盼盼_dRglQm · 6 天前

【Mini-F5265-OB开发板试用测评】3、I2C读写EEPROM以及例程建议

【前言】
IIC是常用的外设,他以需要的的IO少,通讯速度相比快等优秀性能,可以实现同一个IIC外接多个器件等,受收工程师的喜爱。官方提供了多个示例供学习。这篇文章以偿试体验EEPROM来体验IIC的读写。
【步聚】
1、打开示例工程LibSamples_MM32F5260_V0.10.2\Samples\LibSamples\I2C\I2C_Master_EEPROM_Polling\MDK-ARM
2、修改printf重定向函数
`void PLATFORM_InitConsole(uint32_t Baudrate)
{

GPIO_InitTypeDef GPIO_InitStruct;
UART_InitTypeDef UART_InitStruct;

RCC_APB1PeriphClockCmd(DEBUG_UART_RCC, ENABLE);

UART_StructInit(&UART_InitStruct);
UART_InitStruct.BaudRate      = Baudrate;
UART_InitStruct.WordLength    = UART_WordLength_8b;
UART_InitStruct.StopBits      = UART_StopBits_1;
UART_InitStruct.Parity        = UART_Parity_No;
UART_InitStruct.HWFlowControl = UART_HWFlowControl_None;
UART_InitStruct.Mode          = UART_Mode_Tx;
UART_Init(DEBUG_UART, &UART_InitStruct);

UART_Cmd(DEBUG_UART, ENABLE);

RCC_AHBPeriphClockCmd(DEBUG_UART_TX_GPIO_RCC, ENABLE);

GPIO_PinAFConfig(DEBUG_UART_TX_PORT, DEBUG_UART_TX_PIN_SOURC, DEBUG_UART_GPIO_AF);

GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin   = DEBUG_UART_TX_PIN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_PP;
GPIO_Init(DEBUG_UART_TX_PORT, &GPIO_InitStruct);

}`

`int fputc(int ch, FILE *f)
{

UART_SendData(DEBUG_UART, (uint8_t)ch);

while (RESET == UART_GetFlagStatus(DEBUG_UART, UART_FLAG_TXC))
{
}

return (ch);

}
`
3、从开发板的原理图上看到,连接EEPROM的为IIC1,SDA与SCL连接到了PC6、PC7上。
image.png
因此我们需要修改示例中的IIC初始化,以及替换掉IIC的编号。
`void I2C_Configure(void)
{

GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef  I2C_InitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

I2C_DeInit(I2C1);

I2C_StructInit(&I2C_InitStruct);
I2C_InitStruct.I2C_Mode       = I2C_MODE_MASTER;
I2C_InitStruct.I2C_OwnAddress = I2C_OWN_ADDRESS;
I2C_InitStruct.I2C_ClockSpeed = 100000;
I2C_Init(I2C1, &I2C_InitStruct);

I2C_TargetAddressConfig(I2C1, EEPROM_I2C_ADDRESS);

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_4);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_4);

GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AF_OD;
GPIO_Init(GPIOC, &GPIO_InitStruct);

I2C_Cmd(I2C1, ENABLE);

}`
将原来示例工程中的i2c2替换为i2c1
image.png

【测试效果】
image.png
【试用体验】
在示例中,由于测试函数,在写入之后需要稍作延时,才能进行读取,要不然会出现读取数据错误的问题。

推荐阅读
关注数
0
文章数
8
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息