【体验目的】点亮OLED屏,学习使用I2C外设
【实验器材】
- MIN-F5333开发板
- OLED显示屏
- 复制原来的模版工程,重命名为MM32F5330_OLED
2、打开工程清理不需要的模块驱动:
3、新建OLED文件夹,拷贝一份其它工程中使用的OLED驱动到工程,工程中新建OLED分组,并把OLED.c添回进分组,同时把头文件包含到工程中:
3、添加进来后,首先把main.h加入到字库以及头文件中。在oled.c中引入hal_i2c.h头文件。
4、添加i2c初始化函数:
void I2C_Configure(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
I2C_DeInit(I2C2);
I2C_StructInit(&I2C_InitStruct);
I2C_InitStruct.I2C_Mode = I2C_MODE_MASTER;
I2C_InitStruct.I2C_OwnAddress = I2C_OWN_ADDRESS;
I2C_InitStruct.I2C_ClockSpeed = 400000;
I2C_Init(I2C2, &I2C_InitStruct);
I2C_TargetAddressConfig(I2C2, OLED_I2C_ADDRESS);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_4);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_4);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOC, &GPIO_InitStruct);
I2C_Cmd(I2C2, ENABLE);
}
复制代码5、修改写入命令与数据命令:
/**************************************************************
Prototype : void WriteCmd(uint8_t IIC_Command)
Parameters : IIC_Command
return : none
Description : 写命令
***************************************************************/
void WriteCmd(uint8_t IIC_Command)
{
uint8_t dat;
dat = IIC_Command;
I2C_SendData(I2C2, 0x00);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
I2C_SendData(I2C2, dat);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
I2C_GenerateSTOP(I2C2, ENABLE);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
}
/**************************************************************
Prototype : void WriteDat(uint8_t IIC_Data)
Parameters : IIC_Data
return : none
Description : 写数据
***************************************************************/
void WriteDat(uint8_t IIC_Data)
{
uint8_t dat;
dat = IIC_Data;
I2C_SendData(I2C2, 0x40);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
I2C_SendData(I2C2, dat);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
I2C_GenerateSTOP(I2C2, ENABLE);
while (RESET == I2C_GetFlagStatus(I2C2, I2C_STATUS_FLAG_TFE))
{
}
}
复制代码这样就修改好了写命令与写数据
6、在main.c中写入测试函数,下达到开发板就可以成功的驱动OLED屏了。
【总结】
这次我测试的摸拟的i2c最高只能达到45Khz,但是使用硬件i2c,配置为400K的速度,可以达到350K的速度,单刷一屏的速度非的快。
附驱动代码,需要的自取:
全部回复 0
暂无评论,快来抢沙发吧