Почему микроконтроллер STM32F4xxx на основе Cortex-M4 мне подходит.

Прежде чем что-то использовать, нужно немного побольше узнать об этом, чтобы потом не было мучительно больно за потерянное время и зря потраченные средства.

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

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


Конечно можно найти аналоги или поставить согласователи уровней, но это уже дополнительные затраты времени и средств. Жалко и то и другое.

Основное, начальное применение микроконтроллера STM32F4 предполагается для обеспечения обмена данными между оборудованием прошлого века (1992 год выпуска) с компьютером. Просто банальный обмен данными и пока всё. В перспективе, возможно, будет предусмотрена диагностика, первичная обработка данных и обеспечение некоторых сервисных функций с вводом команд и выводом информации на подключенный экран. Это возможно будет, но сначала нужно научиться передавать и принимать данные между старым оборудованием и компьютером.

К сожалению, на русском языке не так много информации о микроконтроллерах серии STM32F4xxx и поэтому для ознакомления с STM32 я читал всё что попадалось. Мне нужно было узнать, насколько микроконтроллер будет для меня полезен с учетом имеющихся особенностей.

Особенностью старого оборудования является использование параллельной передачи данных. Параллельная передача данных обеспечивала необходимое быстродействие. В данном случае есть 18-ти разрядная шина адреса/данных и 8 управляющих разрядов. То есть, для организации обмена требуется как минимум 26 разрядов или ножек микроконтроллера. При этом 18 разрядов должны обеспечивать как вывод адреса, так и ввод данных. Если эти функции разделить, то вместо 18 потребуется 36 ножек (пинов) и с учетом 8 управляющих всего получается 44 ножки.

STM32F4 серия выпускается в корпусе, начиная с 64 ножек или 64 пинов, что не вполне достаточно. Если откинуть выводы питания, выводы подключения кварцевого резонатора, выводы, необходимые для обеспечения обмена с компьютером и учитывая возможность подключения экрана, то окажется что для параллельного обмена ножек у микроконтроллера скорее всего не хватит.

Поэтому выбор пал на STM32F407, который имеет 100 ножек и  к тому же используется в отладочной плате STM32F4DISCOVERY. Из этих 100 ножек как выводы порта ввода/вывода можно использовать только 82. Остальные 18 нужны для обеспечения работы микроконтроллера. Эти 18 ножек нужны только для того чтобы подать питание на микроконтроллер и подключить кварцевый резонатор.

Практически все выводы микроконтроллера STM32 могут выполнять альтернативную функцию. Один и тот же вывод может использоваться, например, как вывод порта ввода/вывода, как вывод внешнего прерывания, как ввод аналого-цифрового преобразователя, как вывод порта USB или чего-нибудь ещё. Какую альтернативную функцию будет выполнять вывод микроконтроллера, определяется содержимым специальных регистров. Это позволяет на одном и том же микроконтроллере создавать различные по назначению устройства. Достаточно определиться с конфигурацией и записать её в специальные регистры.

Порты ввода/вывода в микроконтроллере являются 16-ти разрядными и имеют буквенное обозначение PA(15..0) - это GPIO PORT A, PB(15..0) - это GPIO PORT B и т.д. Использовать любой из них не получиться, потому что одни и те же выводы микроконтроллера могут использоваться для разных встроенных устройств и если это устройство используется, то использовать те же ножки для другого уже не рекомендуется, а иногда это и невозможно.

Для меня это означает, что если будет задействован для обмена с компьютером порт USB или какой-нибудь из USART, то мне не желательно использовать соответствующий порт ввода/вывода. Например, USART1 частично использует выводы порта ввода/вывода "А" (GPIO PORT A) и поэтому если я буду использовать USART1, то мне не желательно использовать оставшиеся выводы GPIO PORT A в качестве шины обмена данными. Мне надо минимум 26 разрядов и хорошо, если это будут два свободных порта ввода/вывода (GPIO PORT). Это упростит программирование алгоритма работы.

Возможности микроконтроллера STM32F4xxx и его быстродействие позволяют использовать практически любые наборы выводов для организации обмена данными. Но для этого необходимо будет каждый раз конфигурировать каждый вывод или небольшую группу выводов. Если же использовать выводы одного порта, то изменение конфигурации, на мой взгляд, и опыт программирования микроконтроллера AT91SAM7Х, производить будет проще и легче.

Напряжение питания микроконтроллера STM32F4xxx составляет 3,3 вольта. Старое оборудование питалось в основном от 5 вольт. Это обстоятельство чуть-чуть не заставило меня отказаться от микроконтроллера STM32F4xxx, но оказалось что порты ввода/вывода (GPIO PORT) совместимы или толерантны с напряжением 5В. То есть, здесь препятствий для использования нет. Единственное нужно будет учесть, что выходы старого оборудования работают по схеме открытый коллектор, то есть нужно будет обеспечить нагрузку при приеме данных.

Памяти для программ и ОЗУ для выполнения этих программ вполне достаточно.

Так как программирование будет проводиться на языке СИ и в основном будут использованы стандартные библиотеки от производителя, то в структуру регистров и распределения памяти в микроконтроллере пока не вникаем. Углублять свои знания будем по мере возникшей необходимости.

Для программирования и отладки ARM микроконтроллеров уже есть программное обеспечение как бесплатное, так и за деньги.

На этом первое знакомство с ARM Cortex-M4 микроконтроллером семейства STM32F4xxx компании STMicroelectronics можно считать удачным. Остальные параметры ARM Cortex-M4 микроконтроллера семейства STM32F4 безусловно важны, но в данном случае не настолько.

Описание ARM Cortex-M4 микроконтроллера на русском языке я к сожалению не нашел и поэтому читал ознакомительное руководство по ARM-микроконтроллерам Cortex-M3, которое можно найти на сайте gaw.ru (http://www.gaw.ru/html.cgi/txt/doc/micros/arm/cortex_arh/index.htm). Конечно это не Cortex-M4, но получить понимание, что к чему, вполне возможно.