Классификация и структура микроконтроллеров 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Классификация и структура микроконтроллеров



Лекция 1,2.

                                                         Введение

В процессе миниатюризации функциональные блоки, которые в обычных компьютерных системах размещались в отдельных интегральных схемах (процессор, память, порты ввода \ вывода, таймеры, контроллеры прерываний и пр.) стали объединять на одном кристалле. Так появились микроконтроллеры или, как их принято называть в отечественной литературе, однокристальные ЭВМ. Такой подход позволил значительно сократить не только размеры встроенных систем, но также сложность и сроки их разработки, а, следовательно, и стоимость. Сокращение числа компонентов повлекло за собой повышение надежности готовых устройств. В некоторых случаях для построения полноценной встроенной системы достаточно одной микросхемы – микроконтроллера.

Основные требования, которые потребители предъявляют к управляющим блокам приборов (микроконтроллерам) можно сформулировать следующим образом:

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

В отличие от универсальных компьютеров к управляющим контроллерам, как правило, не предъявляются высокие требования к производительности и программной совместимости.

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

Память программ

Память программ представляет собой электрически стираемое ППЗУ (FLASH) и может поддерживать команды с разрядностью больше 8 бит. В некоторых микроконтроллерах память программ разделена на 2 секции:

· секцию загрузчика (Boot Program);

· секцию прикладных программ (Application Program).

Память программ чаще всего является электрически перепрограммируемой, количество циклов перезаписи превышает 10 тысяч.

 

Большинство микроконтроллеров поддерживают внутрисхемное программирование, т. е. загрузку программы в микроконтроллер можно осуществлять после монтажа на плату посредством специального разъема программирования.

Для адресации памяти программ используется счетчик команд (Program Counter – PC).

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

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

В некоторых случаях память программ может использоваться не только для хранения кода программы, но и для хранения различных констант.

Оперативная память

Оперативная память, как правило, содержит 3 области:

· регистры общего назначения;

· служебные регистры;

· память для хранения данных.

Регистры общего назначения (РОН) находятся в непосредственной близости к АЛУ. Однако в микроконтроллерах некоторых фирм (в частности, PIC фирмы Microchip) имеется только один рабочий регистр, играющий роль одного из операндов в командах.

Применение набора регистров общего назначения в сочетании с конвейерной обработкой позволяет АЛУ выполнять одну операцию (извлечение операндов из набора регистров, выполнение команды и запись результата обратно в регистр) за один такт.

 

Служебные регистры имеют свои имя, адрес и назначение. Они предназначены для конфигурации и обслуживания периферийных узлов микроконтроллера. Краткая характеристика служебных регистров должна быть приведена в руководстве по использованию микроконтроллера (Data Sheet).

Среди служебных регистров есть, как правило, один регистр, используемый наиболее часто в процессе выполнения программ. Это регистр состояния. Он содержит набор флагов, показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавливаются в «1» или сбрасываются в «0» при наступлении определенных событий (в соответствии с результатом выполнения команд). Все биты этого регистра доступны как для чтения, так и для записи. Эта информация анализируется при выполнении условных переходов. При возникновении прерываний содержимое регистра состояния необходимо сохранять программно (чаще всего это является «заботой» компилятора).

Остальная часть оперативной памяти предназначена для хранения пользовательских данных.

Этапы разработки программ

 

 

                                                       Рис.11

 

Курс будет касаться серии STM32-F4. Это Cortex-M4, который является прямым наследником Cortex-M3(STM32- L1, F1, F2) и отличается от него главным образом ядром с наличием DSP (цифрового сигнального процессора) и FPU (модуля операций с плавающей запятой).

Регистры GPIO

В соответствии с пунктом 8.1 GPIO introduction у нас есть 10 регистров для каждого порта. Разобьём их на типы:

· Регистры конфигурации
Эти регистры позволяют задавать режим работы каждой ножки отдельно. Всего их 4 для каждого порта:

 

1. GPIOx_MODER. Этот регистр задает направление ввода-вывода каждой ножки. Направление может быть: вход, выход, альтернативная ф-я, аналоговый. По-умолчанию(после сброса) направление всех ножек устанавливается на вход, кроме портов A и B(начальное состояние можно посмотреть в пункте 8.4.1. СР)

2. GPIOx_OTYPER. Этот регистр задает тип выхода: двухтактный или открытый сток. По умолчанию — двухтактный для каждой ножки

3. GPIOx_OSPEEDR. С помощью этого регистра задается частота тактирования каждого вывода. СР описывает частоты как: низкая, средняя, повышенная, высокая. После сброса скорость низкая(кроме В.3, тут высокая). Где же сами частоты? Их нужно смотреть в Даташите, об этом ниже.

4. GPIOx_PUPDR. Этот регистр управляет подтяжкой каждой ножки. Нам предлагают на выбор: без подтяжки, подтяжка к питанию, подтяжка к земле. По умолчанию подтяжки нет (кроме портов А и В, их состояние уточняйте в пункте 8.4.4 СР)

· Регистры данных
Тут все намного проще: два регистра, один на вывод, другой на ввод. Давайте рассмотрим их поподробнее:

 

1. GPIOx_IDR. Регистр ввода. Если вывод МК настроен на вход, то любой, поданный на ножку сигнал пройдет через триггер Шмитта и отразится в этом регистре в виде соответствующего 0 или 1.

2. GPIOx_ODR. Регистр вывода. То же самое, только задом-на-перед: то, что мы запишем в этот регистр (0 или 1) попадет на ножку МК в виде логического уровня цифрового сигнала.

  • Регистр установки/сброса
    GPIOx_BSRR. При помощи этого регистра осуществляется запись 0 или 1 в регистр вывода GPIOx_ODR. Вы спросите, зачем же нам нужен этот дополнительный регистр, если можно прочитать регистр вывода, установить и сбросить в нем нужные нам биты и снова записать результат регистр? Тут дело в атомарности операций. Без использования регистра установки/сброса такой подход занимает сразу несколько операций(тактов): сначала необходимо записать данные из регистра вывода в один из общих регистров, затем применить к данным в общем регистре логические операции (для переключения бита/битов используют XOR, для установки в 0 используют NOT затем AND, для установки в 1 используют OR), и наконец снова записать полученное значение из общего регистра обратно в регистр вывода. Как видим одна такая операция на самом деле состоит из 3-4 подопераций и не является единичной(атомарной). Такова особенность большинства архитектур. Неатомарность операций плоха тем, что если в момент выполнения одной из подопераций возникнет запрос прерывания, то МК переключится на выполнение кода прерывания и только после этого вернется к нашей подоперации. Следовательно, если в коде обработчика прерывания используется GPIO — можно получить на выводе МК не, то состояние. Есть много подходов к решению этой проблемы, словом некоторые(маскируемые) прерывания можно запретить на время выполнения операции, можно контролировать атомарность программно. Но STM предоставляет готовое решение — регистр установки/сброса, обращения через который атомарны и выполняются быстрее. О прерываниях мы поговорим в следующих уроках, а пока можно заглянуть сюда и вот сюда. При работе с МК знание булевой алгебры на начальном уровне обязательно, этой статьи нам будет вполне достаточно(только не забывайте, что она из цикла по MSP430, а мы изучаем STM32).

· Регистр блокировки
GPIOx_LCKR. Этот регистр осуществляет управление механизмом блокировки конфигурации, о котором я уже говорил в начале статьи. Что бы не забивать голову с самого начала, останавливаться на этом регистре, впрочем как и на самом механизме, мы не будем. При желании можно заглянуть в пункт 8.3.6 GPIO locking mechanism СР. Упомяну лишь, что даже в заблокированном состоянии доступна работа с регистром установки/сброса(GPIOx_BSRR) и регистром вывода(GPIOx_ODR).

· Регистры альтернативных функций
GPIOx_AFRL и GPIOx_AFRH.

 

 

                                  STM32CubeMX

STM32CubeMX – программная платформа с графическим интерфейсом, которая максимально упрощает построение программных проектов для микроконтроллеров STM32. STM32CubeMX позволяет работать не только с семейством STM32F7, но и со всеми существующими семействами микроконтроллеров STM32 (рисунок 12).

Рис. 12. Структура программной платформы STM32Cube

STM32CubeMX позволяет выполнять следующие операции (рисунок 13):

Рис. 13. Возможности STM32CubeMX

§ выбирать оптимальный микроконтроллер или отладочную плату с учетом особенностей конкретного приложения. Фильтрация производится по различным полям, таким как серия, корпус, объем памяти и так далее;

§ конфигурировать выводы микроконтроллера с помощью утилиты Pin Wizard;

§ настраивать частоты глобальных тактовых сигналов и тактовых сигналов периферийных устройств с помощью утилиты Clock Wizard;

§ настраивать параметры ПО промежуточного уровня, такие как файловая система, стеки протоколов, операционные системы и прочее, а также периферийные блоки с помощью утилиты Perepherial and middleware Wizard;

§ оценивать уровень потребления и срока службы аккумулятора при заданных настройках микроконтроллера с помощью утилиты Power consumption Wizard;

§ Создавать и редактировать проекты для микроконтроллеров STM32 с последующей генерацией С-кода для конкретных IDE (IAR™ EWARM, Keil™MDK-ARM, Atollic® TrueSTUDIO и AC6 System Workbench (SW4STM32)). При этом для генерации С-кода могут использоваться различные библиотеки нижнего уровня от ST: HAL или LL.

STM32CubeMX доступен для бесплатного скачивания на сайте www.st.com. После установки программы пользователь должен скачать библиотеки для требуемого семейства STM32, в нашем случае речь идет о программном пакете FW.F7.x.x.x. Скачивание можно производить непосредственно из STM32CubeMX. Для этого на заглавной странице, появляющейся сразу после запуска, нужно перейти на вкладку INSTALL/REMOVE (рисунок 120). Очень часто на сайте компании появляются обновления как самой программы STM32CubeMX, так и отдельных библиотек. Пользователям рекомендуется периодически проверять обновления (есть функция автообновления). Для этого необходимо заходить на вкладку CHECK FOR UPDATES (рисунок 14).

Рис. 14. Обновление STM32CubeMX и программных библиотек

Рассмотрим процесс создания проекта в STM32CubeMX, который представляет собой последовательность из нескольких шагов.

Для создания нового проекта пользователь должен выбрать подходящий микроконтроллер или отладочную плату. В этом ему помогут утилиты MCU Selector или Board Selector (рисунок 15).

Рис. 15. Создание проекта начинается с выбора микроконтроллера или отладочной платы

Если пользователь начинает проект с нуля без отладочной платы, то STM32CubeMX предложит выбрать контроллер по заданным параметрам с помощью фильтров. Основными фильтрами являются: процессорное ядро, семейство, линейка, корпус, периферия, встроенный графический контроллер и другие (рисунок 16).

Рис. 16. Выбор контроллера производится с помощью фильтров

После выбора подходящего контроллера разработчику предлагается определить назначение выводов с помощью утилиты Pin Wizard (рисунок 123). При этом выводы могут настраиваться индивидуально с помощью удобной диаграммы либо с помощью окна периферии. В последнем случае пользователь выбирает активные периферийные блоки, а программа автоматически подсвечивает занимаемые выводы. При этом стоит отметить удобную систему подсветки:

§ выводы питания окрашены желтым цветом;

§ неиспользуемые выводы окрашены серым цветом;

§ используемые выводы окрашены зеленым цветом;

§ используемые выводы окрашиваются оранжевым, если работа выбранного периферийного блока не разрешена.

Аналогичным образом подсвечиваются названия периферийных блоков в окне периферии. Настройка периферии выполняется в специальном окне, как показано на рисунке 17.

Рис. 17. Работа с утилитой Pin Wizard

Кроме периферийных блоков, пользователь может выбрать и настроить дополнительные библиотеки, в частности – файловую систему FATFS, операционную систему FreeRTOS и другие (рисунок 18).

Рис. 18. Настройка промежуточного ПО

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

Рис. 19. Работа с деревом тактирования в Clock Wizard

После того как все выводы и периферия настроены, а также сконфигурировано дерево тактирования, можно переходить к генерации кода. Это выполняется на вкладке Project Manager (рисунок 20). Здесь пользователь может настроить параметры проекта (название и путь), а также определить тип создаваемого проекта, который определяется выбором целевой IDE. В настоящий момент STM32CubeMX поддерживает следующие IDE:

Рис. 20. Настройка проекта и кодогенератора

§ EWARM (версии 7 и 8);

§ MDK-ARM (версии 4 и 5);

§ TrueStudio;

§ SW4STM32;

§ кроме того, кодогенератор может создавать makefile.

Далее на вкладке Code Generator следует определиться с составом копируемых в директорию проекта библиотек, настройками обработки пользовательского кода при регенерации (например, сохранять или удалять), настройками использования HAL. Стоит отметить важную особенность: если при настройке выводов в разделе HAL Settings поставить галочку напротив пункта «set all free pins as analog», и если при этом в Pin Wizard интерфейсы SWD/JTAG не были определены, то дальнейшая отладка микроконтроллеров с помощью этих интерфейсов будет невозможна.

Для более детальной настройки кодогенератора следует перейти на вкладку Advanced Settings. Главной особенностью С-генератора в STM32CubeMX является возможность использования как HAL, так и LL-драйверов. В рамках одного и того же проекта на STM32CubeMX можно одновременно использовать как HAL, так и LL, но для разных периферийных блоков. Подробнее об этих драйверах рассказывается в следующем разделе.

После нажатия на кнопку «GENERATE CODE» STM32CubeMX создает С-проект для выбранной IDE. Проект уже содержит весь код необходимый для конфигурации тактирования, выводов и периферии, выбранной пользователем. Чтобы в дальнейшем без проблем повторно генерировать код конфигурации без стирания пользовательского кода, разработчик должен помещать свой код в специальные секции (User code).

Еще одной полезной утилитой в составе STM32CubeMX является Power Consumption Calculator (рисунок 21). Этот калькулятор позволяет не просто рассчитать потребление микроконтроллера в различных режимах, но и определить срок службы различных элементов питания.

Рис. 21. Окно расчета потребления микроконтроллера

В STM32Cube примеры классифицированы в соответствии с уровнем ПО:

§ Examples – группа примеров, в которых используются только драйверы HAL и BSP, а ПО промежуточного уровня не используется. Целью этих примеров является демонстрация работы того или иного периферийного блока. Некоторые примеры достаточно просты и касаются только одного периферийного блока, другие могут демонстрировать совместную работу нескольких блоков, например, АЦП и DMA.

§ Examples_LL – группа примеров, в которых используются только драйверы LL, а HAL и ПО промежуточного уровня не используется. Эти примеры являются наименее ресурсоемкими и максимально простыми. Как правило, в них используется только один периферийный блок. Стоит отметить, что эти примеры предназначены исключительно для работы с платами Nucleo.

§ Examples_MIX – группа примеров, в которых используются драйверы HAL, LL и BSP, а ПО промежуточного уровня не используется. Главной задачей этих примеров становится демонстрация оптимального совместного использования HAL и LL, с учетом их достоинств. Примеры предназначены исключительно для работы с платами Nucleo.

§ Applications – группа примеров, предназначенных для демонстрации особенностей работы с ПО промежуточного уровня.

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

§ Template project – шаблоны проектов для IDE, предназначенные для быстрого создания проектов на базе отладочных плат.

                                    

                            STM32

 

                         Экосистема микроконтроллеров STM32

Программирование с использованием отладочной платы STM32F4Discovery

· микроконтроллер STM32F407VGT6 с частотой 168Mhz на 32-битном ядре ARM Cortex-M4F, 1 Мб флэш-памяти, 192 Кб оперативной памяти в корпусе LQFP100.

· встроенный ST-LINK/V2 с возможностью использования ST-LINK/V2 как отдельного устройства (с SWD разъемом для программирования и отладки).
LIS302DL, ST MEMS датчик движения, 3-осевой акселерометр с цифровым выходом.

· MP45DT02, ST MEMS датчик звука, всенаправленный цифровой микрофон.
CS43L22, аудио ЦАП со встроенным усилителем класса D.
четыре светодиода, LD3 (оранжевый), LD4 (зеленый), LD5 (красный) и LD6 (синий).

· две кнопки (пользовательская и reset)
порт USB OTG FS и коннектор micro-AB USB Client
штырьки для быстрого соединения с другими устройствами подключенные ко всем выводам LQFP100.

·

STM32F407VG6 МК, основан на базе arm-cortex-m4f ядра, в которое включен набор fpu и dsp инструкций для ускорения работы. Помимо ядра работающего на частоте 168 МГц и имеющего производительность 210 МИВС, имеется 7 канальная матричная шина AHB которая позволяет без простоя коммутировать независимо основные блоки МК. Помимо AHB помочь производительности призваны 16 канальный DMA и ART accelerator(tm) (который к сожалению в А версии не работает, чип этой версии и стоит на плате). 192 КБ статического ОЗУ и 1 МБ флеш памяти. Большое количество интерфейсов как последовательных (4 spi, 2 i2s, 2 i2c, 3 usart, 3 uart, 2 usb otg fs/hs, Ethernet MAC 10/100, sdio, 2 can 2.0b) так и параллельных (display 8080, camer 8 — 14 bit, gpio, FSMC). и много других периферийных блоков (таймеров, adc, dac и пр.).

 

 

Шинная матрица обеспечивает доступ от master к slave, обеспечивая параллельный доступ и эффективную работу, даже когда несколько высокоскоростных периферийных устройств работают одновременно. Оперативное ОЗУ объемом 64 КБ (память с привязкой к ядру) не является частью матрицы шины и может быть доступно только через ЦП. Эта архитектура показана на рисунке 1.

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

                                         

Рис. 22   Встроенные модули ARM Cortex-M4

Лекция 3,4.

Многофункциональные УВВ (устройство ввода – вывода).

В данном разделе будет представлена общая информация об устройствах ввода-вывода (УВВ), которые доступны пользователю в различных версиях микроконтроллеров STM32. Для удобства УВВ разделяются на две группы: микроконтроллерные УВВ общего назначения и коммуникационные УВВ. Все УВВ микроконтроллеров STM32 отличаются высокой степенью сложности и очень плотно связаны с блоком ПДП. Каждое УВВ обладает избыточными схемными блоками, которые позволяют минимизировать участие ЦПУ в выполнении каждым конкретным УВВ задач.

На первый взгляд набор встроенных УВВ, в т. ч. два АЦП, таймеры общего назначения, I2C, SPI, CAN, USB и часы реального времени (ЧРВ), кажется идентичным самым простым микроконтроллерам. Но если детально рассмотреть каждое из этих УВВ, то выяснится, что они гораздо более сложные. Например, 12-битный АЦП оборудован датчиком температуры и поддерживает несколько режимов преобразования, а МК с двумя АЦП могут использовать их совместно еще в девяти режимах преобразования. По аналогии с этим, каждый из четырех таймеров, оснащенных блоками захвата и сравнения, могут использоваться как отдельно, так и совместно, образую более сложные массивы таймеров. У расширенного таймера (advanced  timer) добавлена поддержка управления электродвигателями. Для этого у него предусмотрено 6 комплементарных ШИМ-выходов с программируемой паузой не перекрытия и вход экстренного останова, который переводит ШИМ-выходы в предварительно запрограммированное безопасное состояние. У интерфейса SPI предусмотрен аппаратный генератор CRC для 8 и 16 слов, что упрощает реализацию интерфейса карт Flash памяти SD и MMC.

В отличие от простых микроконтроллеров, у STM32 также предусмотрен 7-канальный блок прямого доступа к памяти (ПДП). Каждый канал может использоваться для передачи данных между регистрами любого из УВВ и запоминающими устройствами 8/16 или 32-битными словами. Каждое из УВВ может выполнять роль потокового контроллера ПДП, при необходимости отправляя данные или посылая запрос на их получение. Арбитр внутренней шины и матрица шин минимизируют потребность в арбитраже доступа к шинам со стороны ЦПУ и каналов ПДП. Это означает, что блок ПДП является универсальным, простым в применении и реально автоматизирует передачу потоков данных внутри микроконтроллера.

Микроконтроллеры STM32 отличаются, казалось бы, невозможным сочетанием характеристик малого энергопотребления и высокой производительности. Они способны работать от 2В-ого источника питания на тактовой частоте 72МГц и потреблять, при этом, ток, с учетом нахождения в активном состоянии всех встроенных ресурсов, всего лишь 36 мА. Если же использовать поддерживаемые ядром Cortex экономичные режимы работы, то потребляемый ток можно снизить до ничтожных 2 мкА в режиме STANDBY. Для быстроты возобновления активной работы микроконтроллера используется внутренний RC-генератор на частоту 8 МГц. Его активность сохраняется на время запуска внешнего генератора. Благодаря быстроте перехода в экономичный режим работы и выхода из них результирующая средняя потребляемая мощность еще больше снижается.

УВВ общего назначения микроконтроллеров STM32 состоят из портов ввода-вывода (ПВВ) общего назначения, контроллера внешних прерываний, аналогово-цифровых преобразователей, таймеров общего назначения, расширенного таймера и часов реального времени с энергонезависимыми (за счет резервирования питания) регистрами и входом обнаружения вмешательства. У МК STM32 предусмотрено до 80 двунаправленных линий ввода-вывода. Все линии ввода-вывода разделены на 5 портов по 16 линий ввода-вывода в каждой.

. Каждая цифровая линия ввода-вывода может выполнять функцию линии ввода-вывода общего  назначения или альтернативную функцию. Каждый из выводов может выполнять дополнительную функцию одного из                                                                                             16 входов  внешних прерываний. Данные порты называются A…E и совместимы с напряжением 5В. Многие из внешних выводов могут выполнять альтернативную  функцию линии ввода-вывода встроенного УВВ, например, модуля УСАПП или I2C. Кроме того, 16 входных линий встроенного  блока внешних прерываний могут быть соединены  с любыми из линиями портов ввода-вывода.   Каждый ПВВ поддерживает возможность раздельной конфигурации линий на ввод или на вывод. Кроме того, предусмотрены регистры как для записи целых слов, так и для воздействия на отдельные биты. После завершения конфигурации доступ к ней можно заблокировать У каждого ПВВ имеется два 32-битных конфигурационных регистра. Совместно они образуют 64-битный конфигурационный регистр. Эти 64 бита разделены на 4-битные поля, позволяющие настроить соответствующую  им линию ввода-вывода. В свою очередь, 4-битное поле конфигурации состоит из 2-битного поля режима и 2-битного  поля конфигурации. Поле режима позволяет указать, в каком направлении работает линия: на ввод или на вывод, а поле конфигурации позволяет настроить характеристики управления: · если линия настроена как вход, то к ней можно подключить подтягивающий к плюсу или минусу резистор;
  • линия, настроенная на вывод, может быть либо двухтактной, либо с открытым стоком. Для линий вывода можно также указать ее максимальное быстродействие: 2, 10 или 50 МГц.
.
Конфигурация CNF1 CNF0 MOD1 MOD0
Аналоговый вход 0 0

00

Плавающий вход (состояние после сброса) 0 1
Вход с подтягиванием к плюсу 1 0
Вход с подтягиванием к минусу 1 0
Двухтактный выход 0 0

00: резерв
01: 10МГц
10: 2МГц
11: 50МГц

Выход с открытым стоком 0 1
Двухтактный выход альтернат. функции 1 0
Выход с открытым стоком альтернат. функции 1 1

 

 

После завершения настройки портов, конфигурационные параметры можно защитить. Для этого необходимо выполнить запись в регистр блокировки конфигурации. В этом регистре для каждого вывода предусмотрен бит блокировки. После его установки блокируется возможность записи в соответствующие поля конфигурации и режима. После установки всех требуемых бит блокировки, необходимо в бит 16 регистра блокировки записать последовательность 1, 0, 1. Этим будет активизирована блокировка. Убедиться в активизации блокировки можно, если сразу после записи выполнить подряд два считывания этого же бита. Считывание значений 0, 1 свидетельствует об успешной активации блокировки. Доступ к линиям ввода-вывода осуществляется через регистры ввода и вывода данных. Для выполнения действий над отдельными битами можно использовать либо поддерживаемый ядром Cortex способ "bit banding" применительно к регистрам ввода и вывода, либо воспользоваться двумя специальными регистрами битовой обработки. Регистр установки/сброса бит - 32-битный регистр. Верхние 16 бит связаны с каждой из линий ПВВ. Запись в них логической 1 приводит к сбросу соответствующей линии ввода-вывода. Идентично этому, запись логической 1 в любой из младших 16 бит приведет к установке соответствующей линии ввода-вывода. Второй регистр битовой обработки - регистр сброса бит. Этот регистр 16-битный. Запись в его биты логических 1 приводит к сбросу соответствующих линий ввода-вывода. Сочетание регистров ПВВ, способа "bit banding" и регистров битовой обработки предоставляют пользователю отличные возможности управления всеми линиями ввода-вывода МК STM32 и могут чрезвычайно эффективно использоваться в применениях с интенсивным использованием линий ввода-вывода.

Безопасность.

Многие современные применения, помимо высокой производительности и многофункциональных УВВ, должны обладать инструментами, обеспечивающие безопасность. Данное требование было учтено у МК STM32. В них интегрирован ряд аппаратных блоков, отвечающих за безопасность работы микроконтроллера, в т.ч. маломощный супервизор питания, система защиты синхронизации и два отдельных сторожевых таймера. Первый сторожевой таймер относится к оконному типу (windowed watchdog). Его необходимо обновлять только в пределах отведенных временных рамок. Если это сделать слишком рано или слишком поздно, то он сгенерирует сигнал срабатывания. Другой сторожевой таймер полностью независим от первого. Он синхронизируется от отдельного внутреннего генератора, который не связан с главной системной синхронизацией. У МК также используется система защиты синхронизации, которая может выявлять перебои в работе основного внешнего генератора и безопасно переключаться на работу от внутреннего RC-генератора частоты 8 МГц.

 

Альтернативные функции

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

 

 

Опоздавшее высокоприоритетное прерывание отложит выполнение низкоприоритетного

прерывания, не выполняя при этом каких-либо дополнительных операций над стеком

Альтернативные функции у МК STM32 управляются через регистр переназначения

 

и отладки. Каждое из цифровых УВВ (УСАПП, CAN, таймеры, I2C и SPI) имеет одно- или двухбитное поле, которое позволяет назначить работу с различной комбинацией выводов. После выбора альтернативных функций выводов, необходимо в конфигурационных регистрах ПВВ переключить назначение вывода с линии ввода-вывода на альтернативную функцию. Регистр переназначения также управляет конфигурацией выводов отладочного JTAG-порта. Сразу после сброса, порт JTAG активизируется с отключенной функцией трассировки данных. JTAG можно переключить в режим двухпроводного отладочного интерфейса, а неиспользуемые выводы использовать в качестве линий ввода-вывода общего назначения.

АЦП

В зависимости от модели, в микроконтроллеры STM32 может быть встроено один или два аналогово-цифровых преобразователя. АЦП питаются отдельным напряжением, которое в зависимости типа корпуса может находиться в пределах 2.4┘3.6В. Источник опорного напряжения (ИОН) АЦП соединен либо внутренне с напряжением питания АЦП, либо со специальными внешними выводами. АЦП характеризуется 12-битной разрешающей способностью и частотой преобразования 1МГц. У него имеется до 18 мультиплексированных каналов, 16 из которых можно использовать для измерения внешних сигналов. Оставшиеся два канала связаны со встроенным датчиком температуры и внутренним ИОН.

Оконный компаратор

У каждого модуля АЦП имеется оконный компаратор, который генерирует прерывание при выходе контролируемого напряжения за заданные верхнюю и нижнюю границы.

 

Базовая конфигурация АЦП

 

 

Регистры АЦП разделены на шесть групп. Конфигурация работы АЦП осуществляется через регистры управления и статуса

 

АЦП имеет блоки регистров для настройки: индивидуального времени преобразования, регулярных и инжектированных последовательностей преобразований, значений смещения для инжектированной группы и пороговых значений оконного компаратора. Вся настройка АЦП выполняется через регистры управления и статуса.

 

Режим работы АЦП задается через два регистра управления. Ниже показан пример конфигурации преобразования одного канала с генерацией прерывания.

ADC1->CR2 = 0x005E7003; //Включение АЦП и разрешение  
непрерывного

преобразования

//установка длины последовательности

 
ADC1->SQR1 = 0x0000;  
равной 1

=

0x0000;

//выбор преобразования канала 0

 
ADC1->SQR2  
ADC1->SQR3 = 0x0001;

//перезапись бита разрешения работы

 
ADC1->CR2 |= 0x005E7003;  
ADC1->CR1 = 0x000100; //запуск преобразования регулярных  
каналов,        

//разрешение прерывания АЦП

 

NVIC->Enable[0] = 0x00040000; //разрешение прерывания АЦП

 

NVIC->Enable[1] = 0x00000000;

В процедуре обработки прерывания результат преобразования считывается из регистра результата и выводится на линии порта ввода-вывода.

void ADC_IRQHandler (void)

 {

GPIOB->ODR = ADC1->DR<<5; // копирование результата АЦП в ПВВ

}

Вместо процедуры обработки прерывания, для передачи результата АЦП в ПВВ можно использовать канал ПДП.

DMA_Channel1->CCR     = 0x00003A28;                 //кольцевой режим,

памяти отключено

  //инкрементирование УВВ и
   

//Задание адреса назначения - регистр данных ПВВ

DMA_Channel1->CPAR

= (unsigned int) 0x4001244C;

//Загрузка адреса источника в регистр памяти

DMA_Channel1->CMAR

= (unsigned int) 0x40010C0C;

DMA_Channel1->CNDTR = 0x1; //количество слов для
передачи  

//Разрешение ПДП передачи

DMA_Channel1->CCR |= 0x00000001;

 

У АЦП должна быть включена поддержка ПДП.

 

ADC1->CR2 |= 0x0100;

Режимы сдвоенных преобразований

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

 

 

 

 



Поделиться:


Последнее изменение этой страницы: 2019-12-14; просмотров: 476; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.151.141 (0.141 с.)