- Лоботрясы

Поиск
Перейти к контенту

Главное меню:

Библиотеки для STM32

Читать в Яндекс.Подписках



     Библиотека дисплея с системой команд HD44780 для микроконтроллеров STM32
Просмотров: 5608
     А вот и первая моя библиотека для STM32. Скажу сразу, выкладывать её сначала не хотел, ибо изначально заточена она у меня была под AVR, а такого добра в интернете пруд-пруди, а во-вторых, не видел никакого смысла (и сейчас не вижу) описывать принцип работы алфавитно-символьного жидкокристаллического индикатора. Но вот, портируя свои старые проверенные AVR-овские библиотеки под изучаемые (и быстро полюбившиеся) букашки STM32, одновременно сравнивая архитектуру и настройки периферии 0-го и 4-го семейств, решил выдать на-гора результат своих усилий. Помимо обычных (ничем не лучше, но и ничем не хуже) функций инициализации, записи команд, данных и тд. и т.п. в библиотеке имеется пара полезных плюшек в виде функций построения горизонтальной и вертикальной гистограммы (т.е. представление числа от 0 до 100 в виде горизонтального или вертикального графика).
     Данная библиотека специально сделана как можно проще и доступней для понимания, поэтому в ней отсутствует возможность опроса (чтения) состояния LCD-индикатора, а также возможность подключения к любым выводам любого порта микроконтроллера. Однако она позволяет выбрать 4-х или 8-ми битный режим передачи данных, имеет свои функции отсчёта паузы в мс и мкс (приблизительно, но с относительно неплохой точностью - сам проверял) и имеет всего один файл .h для подключения к вашему проекту.
     В интернете вы можете прочесть 1000 и 1 статью про данные дисплеи (они же - WH0802, WH1602, WH1604), поэтому я остановлюсь только на рассмотрении имеющегося рабочего функционала своей библиотеки. Ну а если у кого-то всё-таки возникли вопросы по подкдючению, можете посмотреть практический пример работы дисплея в одной из моих предыдущих статей.
     Как я уже упоминал выше, библиотека рассчитана на микроконтроллеры STM32F0xx и STM32F4xx (как появятся отладочные платы остальных типов - обязательно добавлю их тоже и удостоверюсь в работе библиотеки) и проверена в работе на чипах STM32F050F4P6 и STM32F407VGT6. 
В начале библиотеки вам предлагается выбрать тип микроконтроллера и частоту работы портов GPIO (для работы данной библиотеки ОБЯЗАТЕЛЬНО выбрать в Репозитории CooCoxа библиотеку GPIO!):
#define STM32F   0 //0 для STM32F0 и 4 для STM32F4
#define GPIOSPEED   GPIO_Speed_2MHz /*Для STM32F0: GPIO_Speed_2MHz
                                                                             GPIO_Speed_10MHz
                                                         для STM32F4: GPIO_Speed_2MHz
                                                                             GPIO_Speed_25MHz
                                                      */
     Далее, для работы функций выдержки времени delay_us() и delay_ms(), которые есть в составе библиотеки, необходимо прописать значение системной тактовой частоты (частота ядра мк) SYSCLK, которое можно найти в файле system_stm32f0xx_temp.c (для STM32F0xx) или system_stm32f4xx.c  (для STM32F4xx). Находятся эти файлы в папке cmsis_boot вашего проекта.
#define SYSCLK   48 //Частота SYSCLK в МГц. Необходима для работы функций delay_us() и delay_ms()

     Библиотека поддерживает 4-х или 8-ми разрадную шину данных:
//#define _USE_8_DATA_BUS //Если закомментировано - 4-х разрядная шина данных
//***************************************************************

     Теперь о плюшках. Установив значения 1 или 2 в макросе GRAPH вы подключаете функцию построения горизонтального или вертикального графиков. Удобная вещь для получения наглядной картинки изменения какого-нибудь параметра (или параметров) в диапазоне ои 0 до 100.
#define GRAPH    1 //Если 1 или 2 - используется функция вывода гистограммы LCD_hor_graph() или
                            //LCD_vert_graph() соответственно, 0 - библиотека не используется
     Если вы хотите использовать горизонтальный график, то найдите чуть далее такое объявление, и установите число, о скольки столбцов ваш LCD.
#define COLUMN    20 //Число столбцов в LCD (8, 16 или 20)
     А если выбрали вертикальный график - то установите его высоту:
#define HEIGHT    4 // 1, 2, 3 или 4 - из скольки вертикальных ячеек состоит график
     А теперь эти страшные графики собственной персоной:
     И конечно же, самое главное - установка выводов подключения к LCD!
     В зависимости от выбранного типа контроллера установите в макросах тип порта GPIO и шину, на которой этот порт сидит. Шину управления и шину данных можно подключить к разным портам. 
// Порт и номера выводов, к которым подключены управляющие выводы ЖКИ
#define LCD_CONT_PORT       GPIOA // GPIOB, GPIOC, GPIOD, GPIOE...
#if STM32F==0
#define RCC_LCD_CONT_PORT     RCC_AHBPeriph_GPIOA // RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC...
#elif STM32F==4
#define RCC_LCD_CONT_PORT      RCC_AHB1Periph_GPIOA // RCC_AHB1Periph_GPIOB, RCC_AHB1Periph_GPIOC...
#endif

#define RS     GPIO_Pin_0 // Вывод команда/данные
#define EN     GPIO_Pin_1 // Вывод синхронизации
//***************************************************************
// Порт и номера выводов, к которым подключена шина данных
#define LCD_DAT_PORT     GPIOA
#if STM32F==0
#define RCC_LCD_DAT_PORT     RCC_AHBPeriph_GPIOA // RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC...
#elif STM32F==4
#define RCC_LCD_DAT_PORT     RCC_AHB1Periph_GPIOA // RCC_AHB1Periph_GPIOB, RCC_AHB1Periph_GPIOC...
#endif

#ifdef _USE_8_DATA_BUS
#define DB0     GPIO_Pin_n
#define DB1     GPIO_Pin_n
#define DB2     GPIO_Pin_n
#define DB3     GPIO_Pin_n
#endif
#define DB4     GPIO_Pin_2
#define DB5     GPIO_Pin_3
#define DB6     GPIO_Pin_4
#define DB7     GPIO_Pin_5
//***************************************************************

     А теперь - основной функционал библиотеки:
//**************************************************************
//                                           ФУНКЦИИ
//************************************************************** 
//Инициализация дисплея
void LCD_init(void);
//Передача команды
void LCD_com(unsigned char data);
//Передача байта данных
void LCD_dat(unsigned char data);
// Вывод строки
void LCD_puts(char *p);
// Установка позиции курсора
void LCD_gotoxy(int row, char col);
// Очистка дисплея
void LCD_clear(void);
// Функция прорисовки горизонтального графика 0-100%
void LCD_hor_graph(float value, char row);
где value - значение от 0 до 100, row - номер строки дисплея, на которой будет выводиться график
// Функция прорисовки вертикального графика 0-100%
void LCD_vert_graph(char value, char row, char col);
col - номер столбца, с которого будет строится график (сверху-вниз).

     Функция LCD_hor_graph() рассчитана на более точное представление числа value в графическом виде чем функция LCD_vert_graph(). Сделано это так потому, что по горизонтали намного больше ячеек 5*8, позволяющих повысить эту точность.
     Как теперь подключить данную библиотеку к вашему проекту в CooCox? Да легко! В левой нижней части программы, там где показаны все файлы проекта, нажмите правую кнопку мыши, выберите Add files и добавьте библиотеку в проект (естественно, предварительно кинув её в папку с вашим проектом), а после этого включите в ваш исходник директивой #include.
     Ну, если после этого ещё остались вопросы по работе с библиотекой, прошу внимательно почитать сию статью.

     Скачать:

Опубликовано 20.11.2014
© Igoryosha, 2014
 
 
Назад к содержимому | Назад к главному меню