Февраль 2017 г.
Дисплей подключен при помощи программного i2c (SCL → B10, SDA → B11).
Частота SCL задана 330 кГц.
Если уменьшить задержку I2CSWM_DELAY с 6 до 4, SCL возрастёт до 500 кГц.
Дисплей, в соответствии с дадашитом, держит до 400 кГц.
#include "stdio.h"
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "Display_SSD1306_I2C.c"
/*
Определения из файла Display_SSD1306_I2C.c (для справки)
#define I2C_PORT GPIOB
#define I2C_SCL_PIN 10
#define I2C_SDA_PIN 11
volatile uint8_t sMessage[16] = {0};
volatile uint8_t SSD1306_Buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8] = {0};
*/
int main(void) {
int16_t i = 0;
// Включаем тактирование шины B
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Delay(10); // Ждём пока включится дисплей
I2C_Init(); // И инициализируем его
for(i=0; i<1024; i++) *(SSD1306_Buffer + i) = 0; // Очистка буфера экрана
// Координаты отсчитываются от левого верхнего угла
sprintf((char *)sMessage, "123456789012");
PutString(0, 0, sMessage, 1); // Параметры: X, Y, строка, цвет (1 - белый, 0 - чёрный)
DrawLine(6, 22, 20, 36, 1); // Параметры: X1, Y1, X2, Y2, цвет (0/1)
DrawLine(20, 36, 34, 22, 1);
DrawLine(20, 36, 20, 60, 1);
DrawCircle(64, 42, 20, 1); // X, Y, R, цвет (0/1)
SetPixel(64, 42, 1); // Параметры: X, Y, цвет (0/1)
UpdateScreen(); // Переносим рисунок из буфера в дисплей
Delay(900);
for(i=0; i<1024; i++) *(SSD1306_Buffer + i) = 0; // Очистка буфера экрана
UpdateScreen();
while(1) {
ScreenSaver(); // Скринсейвер в стиле DOS
}
}
Среда разработки: КуКокс. (www.coocox.org/software/coide.php)
Если у вас есть комментарий по существу — присылайте.