**STM32_OLED**

#### Введение

На основе STM32 — 12864 OLED-драйвер:  

* Перенос удобен, конфигурация интерфейса нижнего уровня удобна (можно выбрать SPI и IIC).  

* Конфигурация размера шрифта и т. д. использует табличный режим управления, добавление/изменение/удаление удобно и быстро, поддерживается смешанный ввод и вывод китайских и английских символов (китайское кодирование GB2312).  

* Поддерживает различные методы выборки, можно выбрать разные методы выборки в соответствии с шириной шрифта для уменьшения занимаемого пространства точечной матрицы.  

* Поддержка обрезки набора символов ASCII, в зависимости от конкретных потребностей можно установить сохранение только части данных точечной матрицы набора символов ASCII для уменьшения занимаемой памяти.  

* OLED использует двойной буферный механизм, который отделяет операции на экране OLED от функций отображения, сокращает время операций на экране и синхронизирует экран по времени (обновляется с частотой, приемлемой для человеческого глаза).  

* Подобно функции printf, реализуется форматированный вывод, поддерживается функция оконного printf (поддерживается операция возврата каретки и перевода строки), реализуется прокручиваемый вывод (размер окна и шрифт настраиваются).  

* Код хорошо прокомментирован, стиль унифицирован, что облегчает чтение и использование.

#### Архитектура программного обеспечения

##### Файлы

* oled.c и oled.h — реализация конкретных функций, предоставление внешних API-интерфейсов функций.  

* oledio.c и oledio.h — функции аппаратного интерфейса, реализация функций связи SPI или IIC; требуется модификация при переносе.  

* oledconf.c и oledconf.h — конфигурация шрифта, графическая конфигурация и другие функции конфигурации.  

* fontxxx.h и bmp.h — используются для хранения данных точечных матриц шрифтов и графических BMP.

#### Использование

1. При переносе необходимо изменить соответствующие функции аппаратного интерфейса в oledio.c; выберите тип интерфейса через макроопределение "_DRIVE_INTERFACE_TYPE".  

2. Перед использованием вызовите функцию инициализации OLED_Init, также можно использовать OLED_Clear для немедленной очистки экрана.  

3. Вызывайте функцию OLED_ShowTask периодически, чтобы синхронизировать содержимое экрана (то есть данные буфера синхронизируются с отображением на OLED).  

4. Можно определить макрос "_USE_OLED_PRINTF", чтобы включить функцию форматированного вывода OLED, аналогичную функции printf.  

5. В исходном файле можно настроить требуемый шрифт, необходимо синхронно изменить определение перечисления `efontSize` в заголовочном файле.  
```c
/** Шрифтовая таблица конфигурации */
static fontConfig_t sg_tFontCfgTable[FONT_MAX_NUM] =
{
    {FONT_MODE_COLUMN_BY_ROW, 6, 12, 12, ' ', '~', ASCII_6X12_DATA, FONT_12X12_IDX, FONT_12X12_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 8, 16, 16, ' ', '~', ASCII_8X16_DATA, FONT_16X16_IDX, FONT_16X16_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 12, 24, 24, ' ', '~', ASCII_12X24_DATA, FONT_24X24_IDX, FONT_24X24_DATA},
    {FONT_MODE_COLUMN_BY_ROW, 16, 32, 32, ' ', '~', ASCII_16X32_DATA, FONT_32X32_IDX, FONT_32X32_DATA}
};
```

6. В исходном файле можно настроить необходимую графику, необходимо синхронно изменять определение перечисления `efontSize` в заголовочном файле.  
```c
/** Графическая таблица конфигурации */
static graphicConfig_t sg_tGraphicTable[OLED_GRAPHIC_NUM] =
{
    {FONT_MODE_PROGRESSIVE, 86, 64, "bootLog", LOG_BMP}
};
```

#### Об авторе

1. Блог CSDN [大橙子疯](https://blog.csdn.net/qq_24130227?spm=1010.2135.3001.5343).  

2. Электронная почта const_zpc@163.com.  

3. Чтобы узнать больше, подпишитесь на официальный аккаунт WeChat.