Подключение дисплея 128x64 SSD1306 к STM32F103

Февраль 2017 г.

Дисплей подключен при помощи программного i2c (SCL -> B10, SDA -> B11).
Частота SCL задана 330 кГц (дисплей держит до 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
        }
}

Текст программы (AKA "скетч", "прошивка")

  • Display_SSD1306_I2C.c— Дисплей и i2c. Инициализация и функции.
  • Font_Verter_10x15.h— Уникальный шрифт "Вертер".
Скачать исходный код

 

 

Среда разработки: КуКокс. (www.coocox.org/software/coide.php)

 

Если у вас есть комментарий по существу — присылайте.

Микроконтроллеры   1999-2017 © Advertising and Research