Люблю Visual Studio за механизм, позволяющий инкрементировать версию собранного проекта, и также сильно ненавижу Keil за отсутствие таковой возможности .
Для чего это нужно? Представим ситуацию, когда очень много устройств, а ПО всё время дорабатывается, или же прошивкой новой версии занимается другой человек, ... много может быть причин, но не всегда можно отследить в каком устройстве какая версия зашита. Да и не всегда при сборки проекта вспоминаешь что нужно увеличить номер версии.
Стало интересно?
Данная заметка это некий свод советов по оформлению кода, которые помогут легче читать и поддерживать код, а также спасут от некоторых ошибок, своего рода компиляция многих источников которые были прочитаны за время профессиональной деятельности и некоторых своих домысливаний.
Моя реализация библиотеки для дисплея 16х2 под управлением HD44780.
Описывать протокол и особенности управления, пайки и настройки не буду.
Краткие возможности:
- управление отображением курсора;
- вкл/выкл дисплея;
- вывод текста в любое место;
- поддержка специальных символов \n и \t;
- вывод числа с преобразованием его в строку;
- и др.
Решено написать эту маленькую заметку, ибо уже несколько раз мне задавали вопрос, что это и зачем. Помню и сам не знал этого, хотя вполне себе мог писать простенькие программы.
Что такое указатели и как их готовить вы наверное уже в курсе, если нет, то быстренько объясню.
Указатель - это переменная, которая содержит в себе адрес другой переменной, на которую указывает. Если проводить грубую аналогию с файловой системой в Windows, то указатель - это ярлык, а файл на который он указывает - переменная, размышляя дальше можно сказать что функция - это программа на компьютере, а ярлык для запуска программы - указатель на функцию.
Объявляются указатели следующим образом:
uint16_t *pointer_ui16 = &variable;
void *pointer_Void
char *str = "Строка";
Данная статья носит характер небольшой заметки, а не учебного пособия.
Одной из особенностей микроконтроллеров Миландр серии 9х (точно знаю о 92, 93 с которыми работаю), на мой взгляд, это не совсем продуманная организации управления портами ввода вывода, а именно отсутствие привычных для пользователей stm32 регистров BRR и BSRR, которые позволяют атомарно устанавливать и сбрасывать их состояние. Соответственно необходимо выполнять команды чтение-модификация-запись, что в принципе приемлемо, но...
На этот раз рассмотрим подключение к микроконтроллеру STM32F205 (на остальных аналогично) энкодер.
Есть несколько вариантов считывания информации с энкодера. Но так как микроконтроллер у нас имеет таймеры работающие в режиме захвата и способные обрабатывать сигналы с энкодера, будем пользоваться именно ими.
Подключение выполним к выводам 6 и 7 порта A (это входы/выходы таймера TIM3) вот по схеме на рисунке выше.