Высказывания и цитаты:

Мы многое из книжек узнаём,
А истины передают изустно:
«Пророков нет в отечестве своём», -
Да и в других отечествах - не густо.

  • 30Ноя

    Урок №2. Доброго времени суток!

    Итак, мы купили с сайта aliexpress.com платы разработчика Hy-Mini STM32 (электрическая схема в формате pdf MiniSTM32V-Schematic.rar ) или Hy-Smart STM32, установили среду разработки Keil, посмотрели с диска все примеры и поняли, что они из себя представляют. Это совсем небольшой список возможностей того, что было в демо-прошивке. Исходные коды являются результатом чьей-то интеллектуальной работы, на которую были затрачены время и деньги, и поэтому просто так выкладывать современные работы не каждый производитель захочет. Но и на основе этих примеров мы разберемся что к чему, и сделаем то, что нас интересует.

    Для того, чтобы приступить к работе, возьмем один из стандартных примеров для Hy-Mini STM32 на диске TouchPanel.rar . Если Вы посмотрите его в работе, то увидите, что он предлагает сделать калибровку экрана по трем точкам, а после  — появится черный экран, на котором можно рисовать стилусом. Этот пример не имеет пока ничего лишнего, поэтому с ним проще разобраться — с него мы и начнем.

    Открываем проект TouchPanel->MDK-ARM-> Project.uvproj и компилируем.

    Хочу обратить внимание, что по-умолчанию в Windows расширения файлов не отображаются, что не совсем удобно для работы программиста – визуально мы не можем определить тип файла и поменять расширение не можем тоже. Рекомендую включить эту опцию. В WindowsXP делается так: открываем любую папку, в самом верху папки выбираем Сервис->Свойства папки->Вид. И убираем галочку Скрывать расширения для зарегистрированных типов файлов. В Windows7 также открываем любую папку, нажимаем кнопку на клавиатуре Alt, у нас появляется меню, из которого выбираем Сервис->Параметры папок->Вид. И убираем галочку Скрывать расширения для зарегистрированных типов файлов.

    Теперь посмотрим как работает программный симулятор. Для этого надо посмотреть, настроен ли он. Нам нужен пункт меню Project->Options for target… . В открывшемся окне Options for target на вкладке Debug должно стоять: Use simulator – использовать программный симулятор. Жмем ОК. Открываем меню Debug->Start/Stop Debug Session. Появилась желтая стрелка, показывающая текущий шаг выполнения программы. Я думаю, что изучение любой программы лучше начинать с запуска отладчика в режиме программного симулятора, чтобы легче было уловить алгоритм работы программы и взаимосвязь файлов в проекте. Дело в том, что в STM32 их слишком много. И, не будь такой совершенной среды разработки, в этих файлах можно было бы запутаться.

    simulyator1

    На рисунке видно, что над окошком main.c появился ассемблерный код – этот код нам необходим лишь для просмотра — дело в том, что это необходимо для понимания процесса работы внутри микроконтроллера, то есть отладки. На языке ассемблера программы для STM32 никто не пишет, но ассемблерные вставки делать можно. Одновременно появилось меню работы отладчика – кнопки Reset, Run, Stop, пошаговый режим и другие режимы.otlad

    Теперь понажимаем на кнопку Step one line (пошаговый режим F11),  и желтая стрелка начнет прыгать по строкам программы. При выполнении арифметических действий значения переменных можно смотреть в окне Locals, а регистров в Registers. Надеюсь, в этом разберетесь сами, и после нескольких часов у Вас всё будет получаться автоматически. Закрываем отладку Debug->Start/Stop Debug Session.

    Теперь выбираем файл main.c и смотрим, что там написано. Первое что мы видим /** текст**/ это комментарии, компилятор их просто игнорирует. Далее идут строки типа #include “stm32f10x.h” – здесь подключаются заголовочные файлы проекта и другие файлы в проекте. В заголовочных файлах могут быть прописаны определения имен, параметров, прототипы функций. Заголовочный файл может подключать другие файлы, например *.c или *.h. Таким образом создается целое дерево проекта. А в конце проекта обычно идет функция main.

    int main(void)
    {
    LCD_Initializtion();
    LCD_BackLight_Init();  // функция управляет подсветкой дисплея
    delay_init();
    TP_Init();
    TouchPanel_Calibrate(); // функция калибровки экрана
    /* Infinite loop */
    while (1)
    {
    getDisplayPoint(&display, Read_Ads7846(), &matrix ) ;
    TP_DrawPoint(display.x,display.y);
    }
    }
    Нажмите правой кнопкой мыши на строке LCD_Initialization(); и выберете go to Definition of “LCD_Initialization”. Откроется функция LCD_Initialization() из другого файла. Если она не открылась и появилась ошибка, значит надо сделать предварительно компиляцию Project->Rebuild all target files, чтобы Keil знал расположение всех элементов проекта. Таким образом мы всегда можем найти, в каком месте находится нужная нам функция, не роясь в дереве проекта слева, что позволяет экономить время.

    В функции LCD_Initialization() видим, что вызывается другая функция LCD_Configuration(), где происходит настройка всех модулей контроллера, а далее настройка дисплея HY32D (SSD1289). Значения всех посылок, которые посылает микроконтроллер для настройки дисплея я распишу в другой статье, сейчас лишь скажу, что микроконтроллер общается с дисплеем через специальный интерфейс FSMC, который предназначен для аппаратного обмена данными, то есть нагрузка на ядро микроконтроллера уменьшается, а во время этого микроконтроллер может быть занят другой работой.

    TouchPanel_Calibrate() – функция калибровки экрана. В этой функции вызывается другая GUI_Text(10,10,»Touch crosshair to calibrate»,0xffff,Black);  которая реализует вывод текста на экран. Продолжение читайте в уроке №3.

1 комментарий

WP_Cloudy
  • Александр пишет:

    Извините, не могу понять систему линков на Уроки (интересует STM32)

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: