【体验目的】点亮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
暂无评论,快来抢沙发吧