Библиотека ssd1306.h представляет собой библиотеку для работы с дисплеем SSD1306, который является графическим 128×64 или 128×32 монохромным OLED дисплеем. Данная библиотека обеспечивает простой и удобный интерфейс для работы с этим дисплеем на микроконтроллерах STM32.
Библиотека ssd1306.h позволяет осуществлять различные операции с дисплеем, такие как вывод текста, графики, рисование фигур и прочее. Она упрощает взаимодействие с дисплеем и позволяет создавать разнообразные графические интерфейсы.
Библиотека fonts.h содержит различные шрифты, которые могут быть использованы для вывода текста на дисплей SSD1306. Шрифты в этой библиотеке представлены в виде массивов битовых данных, соответствующих каждому символу или знаку. Использование различных шрифтов позволяет изменять стиль и размер текста на дисплее, делая вывод информации более гибким и креативным.
Схема подключения SSD1306 к STM32
Для SSD1306 нужно необходимо подключить пины SDA и SCL STM32 в соответствующие пины SSD1306. В качестве примера использую микроконтроллер STM32F401.
№ | SSD1306 | STM32F401 |
---|---|---|
1 | SDA | PB8 |
2 | SCL | PB9 |
3 | VCC | 3.3V |
4 | GND | GND |
Простой Код STM32 для управления SSD1306
Написанный код проводит предварительную калибровой для вывода слов «DocsTech Help You!» на черном экране белыми буквами с продолжительностью 1 секунды. Затем циклический вывод текста «Ready :» и цифрой равной числу повторений с интервалом 500 мс.
Итак, для начала вам нужно создать новый проект в STM32Cube IDE для STM32F401. Убедитесь, что в проекте корректно настроены пины I2C для работы с экраном SSD1306 и частота I2C установлена на 4 МГц. После чего создайте файлы
дл
Не забудьте подключить файлы
с н
Возможно, вам придется дополнить код функциями работы с экраном и шрифтами в соответствии с вашими требованиями.
Сложный Код STM32 для управления SSD1306 без использования библиотек ssd1306.h и fonts.h
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_i2c.h"
#define SSD1306_ADDR 0x3C
#define SSD1306_WIDTH 128
#define SSD1306_HEIGHT 64
#define SSD1306_REG_CONTROL 0x00
#define SSD1306_REG_DATA 0x40
I2C_HandleTypeDef hi2c;
void SSD1306_WriteCommand(uint8_t command) {
uint8_t data[2];
data[0] = SSD1306_REG_CONTROL;
data[1] = command;
HAL_I2C_Master_Transmit(&hi2c, SSD1306_ADDR, data, 2, HAL_MAX_DELAY);
}
void SSD1306_WriteData(uint8_t* data, uint16_t size) {
uint8_t buffer[17];
buffer[0] = SSD1306_REG_DATA;
for (uint16_t i = 0; i < size; i++) {
buffer[i + 1] = data[i];
if (((i + 1) % 16) == 0 || i == (size - 1)) {
HAL_I2C_Master_Transmit(&hi2c, SSD1306_ADDR, buffer, i + 2, HAL_MAX_DELAY);
}
}
}
void SSD1306_Init() {
uint8_t init_data[] = {
0xAE, // Display off
0xD5, 0x80, // Clock divide ratio
0xA8, 0x3F, // Set MUX ratio
0xD3, 0x00, // Display offset
0x40, // Start line
0x8D, 0x14, // Charge pump
0x20, 0x00, // Memory mode (horizontal)
0xA0, // Segment remap
0xC0, // Scan direction
0xDA, 0x12, // COM pins
0x81, 0xCF, // Contrast control
0xD9, 0xF1, // Precharge
0xDB, 0x40, // Vcomh
0xA4, // Entire display on
0xA6, // Normal display
0xAF // Display on
};
SSD1306_WriteData(init_data, sizeof(init_data));
}
void SSD1306_PrintText(const char* text, uint8_t size, uint8_t x, uint8_t y) {
uint16_t text_len = strlen(text);
uint8_t data[6 + text_len * size];
data[0] = 0x22; // Data mode
data[1] = x; // Column start address
data[2] = x; // Column end address
data[3] = 0x3F; // Page start address
data[4] = 0x3F; // Page end address
for (uint16_t i = 0; i < text_len; i++) {
for (uint8_t j = 0; j < size; j++) {
data[5 + i * size + j] = fonts[(text[i] - 32) * size + j];
}
}
SSD1306_WriteData(data, 6 + text_len * size);
}
void HAL_Delay(uint32_t ms) {
for (uint32_t i = 0; i < ms * 1000; i++) {
__NOP();
}
}
void HAL_MspInit(void) {
__HAL_RCC_SYSCFG_CLK_ENABLE();
__HAL_RCC_PWR_CLK_ENABLE();
}
int main(void) {
HAL_Init();
SystemClock_Config();
hi2c.Instance = I2Cx;
hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c.Init.ClockSpeed = 400000; // 400 kHz
SSD1306_Init();
while (1) {
SSD1306_PrintText("DocsTech Help You!", 1, 10, 10);
HAL_Delay(1000);
for (int i = 0; i < 20; i++) {
char buffer[50];
sprintf(buffer, "Ready : %d", i);
SSD1306_PrintText(buffer, 1, 10, 30);
HAL_Delay(500);
}
}
}
Этот код представляет пример программы для работы с дисплеем SSD1306 по I2C на микроконтроллере STM32F401 с частотой 4 МГц. Вам также придется добавить файлы шрифтов в ваш проект. Убедитесь, что все необходимые библиотеки, файлы шрифтов и настройки I2C правильно добавлены в вашем проекте.