官方的数据手册介绍,该I2C可以工作在3个通信速度上分别为100K、400K、1M。
本次使用三个不同的速度来驱动OLED屏,使用OLED的FPS来测试效果:
【配置】
1、IO选取开发板上的D15(PB8)——SLC,D14(PB9)——SDA,为引脚输出。
2、创建以开发板为基础的STM32CubeIDE工程,配置好引脚为PB8、PB9:
6、测FPS的函数:
void ssd1306_TestFPS() {
ssd1306_Fill(White);
uint32_t start = HAL_GetTick();
uint32_t end = start;
int fps = 0;
char message[] = "ABCDEFGHIJK";
ssd1306_SetCursor(2,0);
ssd1306_WriteString("Testing...", Font_11x18, Black);
ssd1306_SetCursor(2, 18*2);
ssd1306_WriteString("0123456789A", Font_11x18, Black);
do {
ssd1306_SetCursor(2, 18);
ssd1306_WriteString(message, Font_11x18, Black);
ssd1306_UpdateScreen();
char ch = message[0];
memmove(message, message+1, sizeof(message)-2);
message[sizeof(message)-2] = ch;
fps++;
end = HAL_GetTick();
} while((end - start) < 5000);
HAL_Delay(5000);
char buff[64];
fps = (float)fps / ((end - start) / 1000.0);
snprintf(buff, sizeof(buff), "~%d FPS", fps);
ssd1306_Fill(White);
ssd1306_SetCursor(2, 2);
ssd1306_WriteString(buff, Font_11x18, Black);
ssd1306_UpdateScreen();
}
6、测试效果分别如下:
100K——9FPS
400K——29FPS
1M—— 49FPS
【总结】
通过三个不同速度的对比,配置不同的速度,在相同的主频下,可以提升非常高的效果。
我已经把工源源码上传到了这里。