Одной из самых популярных конструкций с использованием микроконтроллеров являются часы. Тысячи различных вариантов их можно найти в интернете. В качестве индикаторов в них наиболее часто применяются светодиодные или символьные жидкокристаллические индикаторы. Появление доступных плат с TFT дисплеями, таких как mikromedia, позволило создавать интересные конструкции с огромными возможностями по выводу графики. Естественно, что одним из первых проектов могут стать часы. Возможности графического дисплея позволяют создавать не только цифровые, но и классические аналоговые часы. При этом на циферблате можно расположить различные стрелки и другую информацию. Так как в используемой плате mikromedia стоит процессор STM32F207VG, а на плате запаян часовой кварц, то практически никаких проблем с организацией часов нет. Единственная проблема кроется в особенностях часов микроконтроллера. Модуль часов реального времени в STM32F2xx не имеет возможности сформировать сигнал частотой 1Гц для обновления показаний. В младших и более старших моделях для этого предусмотрено отдельное прерывание. В серии F2xx его нет. Конечно можно использовать функцию таймера с постоянным обновлением, но это как-то не правильно. Единственный выход - использование прерывания для выхода из спящего режима - WakeUP. Его можно настроить на срабатывание с частотой 1Гц. Сами часы не представляют особой сложности, особенно для таких мощных систем как STM32. Для определения направления стрелки используются тригонометрические функции. При этом часовая стрелка изменяет положение не раз в час, а раз в минуту. Ее положение находится в границах часового сектора времени, как и на обычных стрелочных часах. Для менее мощных систем можно поступить проще и заранее рассчитать все координаты стрелок. Применение математики позволило сделать часы настраиваемыми. Можно менять их угол положения, координаты центра и диаметр. В дальнейшем планируется использовать данные часы, например в проекте метеостанции. Некоторую проблему создал механизм настройки времени. Графические библиотеки в mikroC не очень-то поворотливы, поэтому не получилось сделать плавный ручной поворот стрелок. Часовая и минутная стрелки настраиваются отдельно. Программный код написан в среде mikroC. Готовый файл получился объемом чуть более 23 кБайт, что в принципе довольно много, но не критично для STM32. Найти проект можно в библиотеке программ LibStock, развиваемой производителем Mikroelektronika, по ссылке Analog Clock for STM32.
Компилятор mikroC для процессоров ARM представляет собой законченную среду программирования, поддерживающую большое число процессоров Stellaris и STM32. Простота установки и большое количество встроенных библиотек выделяют его из ряда подобных программ. Большим достоинством mikroC является поддержка STLink, что позволяет программировать такие платы как STM32 Discovery. Но при всех достоинствах, mikroC не лишен недостатков. Главный из них не совместимость с библиотеками STMicroectronics. Это не позволяет использовать весь богатый арсенал готовых решений для STM32. Проблема заключается в том, что Mikroelektronika создала свое описание регистров, а прямое подключение стандартных CMSIS не возможно, по причине отсутствия некоторых определений. Конечно можно вручную переопределить все имена регистров, но это достаточно трудоемкая задача. Второй вариант - адаптация CMSIS, требует хороших знаний библиотеки. Попытка решить эту задачу в лоб не прошла. В процессе подключения пока CMSIS были обнаружены следующие проблемы: 1. Отсутствие файла stdint.h, который можно найти в поставке какого-либо другого компилятора. После его записи в папку библиотеки проявилась следующая ошибка. 2. Не определенность константы _I. В microC определено только _IO и _О. Удаление данного типа привело к продолжению компиляции, но вылезли новые ошибки. Далее пока нет сил разбираться и есть большое желание перейти на другой компилятор, что опять же не хорошо. Радует, что разработчики знают о проблеме и обещали выпустить новую версию компилятора до конца года. Правда год уже почти кончился, а результатов пока нет, хотя для других процессоров новые компиляторы появляются. В общем остается пытаться разбираться и ждать.