Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Микроконтроллеры с ядром Cortex-M3 в системах управления и автоматики. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
1.3. Средства разработки
Для разработки программного обеспечения применяют различные средства
разработки. Компания «Миландр» рекомендует разработчиками микроконтроллеров следующие средства разработки [4, 8, 9, 11]:
1. «CodeMaster-ARM» — интегрированная среда разработки компании Phyton.
Поддерживает разработку программ для 1986ВЕ9xx. Укомплектована C-компилятором,
ассемблером, отладчиком, средствами для трассировки и внутрисхемного
программирования, а также поддерживает USB JTAG адаптер JEM-ARM-V2.
2. «IAR Embedded Workbench» — интегрированная среда разработки компании IAR
Systems. Поддерживает разработку программ для 1986ВЕ9xx. Укомплектована C/C++
компилятором, ассемблером, отладчиком, средствами для трассировки и внутрисхемного
программирования, а также поддерживает USB JTAG адаптер J-Link.
3. «Keil uVision» — интегрированная среда разработки (IDE) компании Keil (An ARM
Company). IDE Keil uVision поддерживает разработку программ для различных ARM-микроконтроллеров (версия uVision 3.0 и выше), в том числе для микроконтроллеров
серии 1986 фирмы «Миландр» (версия uVision 4.2 и выше). Укомплектована C/C++
компилятором, ассемблером, отладчиком, средствами для трассировки и внутрисхемного
программирования, а также поддерживает USB JTAG адаптеры J-Link и ULINK2.
В дополнение к этим средствам можно использовать свободное программное
обеспечение на основе компилятора GCC, среды Eclipse им подобные сборки.
Технология отладки проектов заключается в том, что программа для
микроконтроллера пишется на одном из языков программирования в виде текстового файла [4, 8, 9, 11]. Это означает, что для написания программы можно воспользоваться любым текстовым редактором. Программа-транслятор преобразует исходный текст в машинные коды, понятные микропроцессору. В результате компиляции создается hex-файл, предназначенный для загрузки в память микроконтроллера. Данные в hex-файле
представляют строки шестнадцатеричных цифр кодов команд и данных. Для облегчения
процесса разработки программ используются интегрированная среда программирования,
в состав которой включается набор программных средств: редактор исходного текста,
трансляторы, редакторы связей, загрузчики, отладчики и трассировщики. При разработке программ следует применять рекомендуемые компанией «Миландр» библиотеки подпрограмм [4, 8, 9, 11].
Интегрированная среда разработки Keil uVision имеет бесплатную лицензию вида Lite/Evaluation Edition, которая устанавливает следующие ограничения в сравнении
с полнофункциональной коммерческой версией продукта. Для Lite/Evaluation версии объем
исполняемого модуля в двоичных кодах не может превышать 32 Кб.
Основные этапы процесса инсталляции интегрированной среды Keil uVision5:
1. Загрузить с сайта http://www.keil.com/download/product дистрибутивный архив
в виде файла, например mdk_513.exe. Установить программу в Keil uVision5 в выбранную
21
директорию, например, D:\Program Files\Keil. Общий объем файлов в этой директории после установки интегрированной среды разработки Keil uVision5 около 1,2 Гб.
2. Установить дополнительные архивы (Packs) от производителей оборудования,
обеспечивающие поддержку оборудования конкретных производителей. Архивы можно установить как при инсталляции основной программы, так и в процессе эксплуатации, используя вкладку Pack Installer панели Toolbar. Например, пакет Milandr.MDR1986BExx.1.4.0.pack от фирмы «Миландр» для работы с контроллерами MDR1986BE объемом 2,41 Мб и пакет Keil.STM32F1xx_DFP.1.0.5.pack для работы с контроллерами STM32 объемом 48 Мб.
3. Создать директорию, например, D:\ProgramFiles\Keil\ARM\INC для размещения *.h
файлов не входящих в состав стандартных библиотек.
4. К разъемам внешнего программатора подключить кабели от компьютера
в соответствии с инструкцией.
5. Переключателя SW1, SW2, SW3 на плате переключить в положение соответст-
вующее режиму отладки.
6. Подключить к плате источник питания.
Система готова к разработке и отладке программного обеспечения.
Программный проект Keil uVision представляет собой IDE (Integrated Development Environment) интегрированную среду разработки, включающую набор утилит для разработки и тестирования программного обеспечения микроконтроллеров.
Основные программные средства Keil uVision:
1) база данных микроконтроллеров;
2) менеджер проектов, для объединения программных модулей и файлов группы,
обрабатываемые по единым правилам;
3) встроенный редактор кода;
4) средства компиляции, ассемблирования и компоновки проекта;
5) симулятор, отлаживающий работу программы на виртуальной модели
микропроцессора;
6) программные утилиты.
Для каждого проекта следует создавать отдельную директорию, в которой размещается исходный модуль программы (main.c). Разработка проекта выполняется в несколько этапов. Каждый этап начинается с вкладки Project, в которой размещаются:
1) объявление нового проекта New uVision Project с названием, определяемым
разработчиком, например, LED_1;
2) выбор из базы данных Keil uVision микроконтроллера, например,
Milandr/Milandr/Cortex-M3/MDR1986BE92;
3) стартовый файл для микроконтроллера, например, Device/Startup_MDR1986BE9x;
4) файл исходного текста разрабатываемой программы, например, «main.c»;
5) тактовая частота микроконтроллера, например, 8 МГц;
6) путь поиска файлов драйверов или библиотек подпрограмм;
22
7) настройка внешнего программатора для загрузки разрабатываемых программ;
8) компиляция программы;
9) подготовка флэш-памяти программ;
10) загрузка программы в микроконтроллер.
Например, стандартный путь доступа для *.h файлов драйверов типовой библиотеки периферийных устройств может быть задан следующим образом: «D:\Program Files\Keil\ARM\Pack\Keil\MDR1986BExx\1.4\Libraries\MDR32F9Qx_StdPeriph_Driver\inc».
Для дополнительных *.h файлов, не входящих в состав стандартной библиотеки периферийных устройств, стандартный путь может быть задан следующим образом: «D:\Program Files\Keil\ARM\INC».
Стандартная библиотека периферийных устройств MDR32F9Qx_StdPeriph_Driver, созданная компанией «Фитон» на языке С для микроконтроллеров семейства содержит
функции, структуры и макросы для упрощения работы с периферийными блоками
микроконтроллеров. Библиотека поддерживает CMSIS (Cortex Microcontroller Software
Interface Standard) и предоставляется компанией «Миландр» бесплатно. Основные файлы библиотеки распространяются в виде архива «Standard Peripheral Library MDR32F9Qx, MDR1986VE1T, MDR1986VE3T.rar». Библиотека содержит примеры по каждому периферийному устройству и имеет интерактивную справку [8, 9] в виде отдельного файла в стандартном формате справки Windows «MDR32F9Qx_Standard_Peripherals_Library.chm».
Использование стандартной библиотеки ввода-вывода или стандарта CMSIS
не является обязательным при разработке программ для микроконтроллеров семейства
Cortex-M, но ее применение позволяет сократить затраты на разработку нового программного обеспечения.
Контрольные вопросы и задания к главе 1
1. Сколько внешних выводов содержат основные модификации корпусов
микроконтроллеров?
2. Сколько внешних выводов содержит корпус микроконтроллера 1986BE92У?
3. Какая модель микроконтроллера обладает наибольшей функциональностью?
4. Сколько разрядов данных имеет микроконтроллер 1986ВЕ92У?
5. Расшифруйте обозначение AMBA AHB Bus Matrix.
6. Расшифруйте обозначение ADC.
7. Расшифруйте обозначение DAC.
8. Расшифруйте обозначение DMA.
9. Расшифруйте обозначение UART.
10. Объясните функциональное назначение микросхемы 1309EP1T.
11. Объясните функциональное назначение микросхемы LM1117DT-3.3.
12. Объясните функциональное назначение микросхемы MC34119.
13. Объясните функциональное назначение микросхемы 1986ВЕ92У.
23
14. Объясните функциональное назначение микросхемы 5559ИН4.
15. Объясните функциональное назначение микросхемы ADM3232EARN.
16. Объясните функциональное назначение микросхемы 5559ИН14.
17. Объясните функциональное назначение микросхемы ATA6660.
18. Назовите основные этапы технологии отладки проектов.
19. Назначение интегрированной среда разработки Keil uVision.
20. Поясните назначение переключателей SW1, SW2, SW3 отладочной платы
с микроконтроллером.
24
2. ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРА
2.1. Программирование портов ввода-вывода
Большая часть контактов микросхем серии 1986ВЕ9х представляет линии передачи информации для взаимодействия с внешними устройствами [5, 6]. Под эти цели выделено 43 линии, группируемые в шесть портов (рис. 2.1).
Рис. 2.1. Расположение выводов в 64-выводном корпусе Н18.64-1В
Нумерация линий портов ввода-вывода начинается с нуля. Конкретное распределение линий по портам описано в спецификации микроконтроллеров производства ЗАО «ПКК Миландр» [5, 6]. В табл. 2.1 приведено обозначение портов ввода-вывода для микроконтроллера 1986ВЕ92У.
Программирование микроконтроллеров серии 1986ВЕ9х возможно как на языке С, так и на языке Assembler. Программирование на языке С представляется более предпочтительным
вариантом, так как позволяет избежать выполнение большей части типовых рутинных
25
действий. Этому способствует использование библиотечных функций, предоставляемых
Название/обозначение порта
Разряд, бит
Обозначение линий
PORTA/MDR_PORTA
8
PA0..PA7
PORTB/MDR_PORTB
11
PB0..PB10
PORTC/MDR_PORTC
3
PC0..PC2
PORTD/MDR_PORTD
8
PD0..PD7
PORTE/MDR_PORTE
6
PE0..PE3, PE6..PE7
PORTF/MDR_PORTF
7
PF0..PF6
разработчиком. Помимо этого существует ряд удобных сред разработки программного
обеспечения для микроконтроллеров. Одной из таковых является среда программирования
Keil μVision MDK-ARM. Получить навыки программирования на языке С можно, например, с помощью учебного пособия [5, 6, 13].
Таблица 2.1
Обозначение портов ввода-вывода микроконтроллера 1986ВЕ92У
Порты ввода-вывода доступны в программе как регистры микроконтроллера. Любой из портов ввода-вывода может быть программно настроен как для подключения устройств
передающих данные микроконтроллеру (кнопки, реле, выключатели), так и для подключения
устройств, принимающих информацию от него (рис. 2.2). Для работы с периферийными устройствами ЗАО «ПКК Миландр» предлагает библиотеку «MDR32F9Qx Standart Peripherals Library» [7, 8, 12, 14]. Доступ к регистрам в программе на языке С осуществляется посредством вызова функций данной библиотеки.
Для того чтобы определить конкретный порт микроконтроллера как порт для ввода
или порт для вывода информации, необходимо выполнить следующие действия.
Для работы с портами к проекту программы в среде Keil μVision необходимо
подключить файл MDR32F9Qx_port.c. Непосредственно в тексте программы нужно
определить структуру типа PORT_InitTypeDef, описанную в заголовочном файле
MDR32F9Qx_port.h. Например, PORT_InitTypeDef PtIStruct.
Перед началом использования портов необходимо вызвать функцию POTR_StructInit,
аргументом которой является объявленная структурная переменная. Например,
POTR_StructInit(&PtIStruct).
26
PAD
To Analog To Analog
Pull Up
GFEN
Analog
RX
PD
Port_Func[1:0]
Port_TX Main_TX Alter_TX
Remap_TX
Port_OE Main_OE Alter_OE
Remap_OE
Pull Down
MUX
MUX
TX
MODE
RX
OE
EN
EN
ESD R
PAD
Описание структурного типа выглядит следующим образом:
Рис. 2.2. Организация порта ввода-вывода
typedef struct { uint16_t PORT_Pin; PORT_OE_TypeDef PORT_OE; PORT_PULL_UP_TypeDef PORT_PULL_UP; PORT_PULL_DOWN_TypeDef PORT_PULL_DOWN; PORT_PD_SHM_TypeDef PORT_PD_SHM; PORT_PD_TypeDef PORT_PD; PORT_GFEN_TypeDef PORT_GFEN; PORT_FUNC_TypeDef PORT_FUNC; PORT_SPEED_TypeDef PORT_SPEED; PORT_MODE_TypeDef PORT_MODE; } PORT_InitTypeDef.
27
Поле PORT_Pin определяет с помощью двоичного кода используемый набор линий порта ввода-вывода. Если соответствующий бит кода содержит 1 — линия используется, 0 — линия не задействована. Для упрощения текста программы в заголовочном файле MDR32F9Qx_port.h определен ряд препроцессорных констант вида PORT_Pin_х, где х может принимать значения от 0 до 15 или All в случае задействования всех линий порта. Для определения сочетания задействованных линий порта можно использовать операцию | (поразрядное или) языка С [7, 8, 12, 14]:
PtIStruct.PORT_Pin = PORT_Pin_1 | PORT_Pin_2.
В приведенном примере определяется использование первой и второй линий порта.
С помощью поля PORT_MODE можно задать режим работы выбранных линий порта. Для этого используются константы PORT_MODE_DIGITAL (цифровой режим) и PORT_MODE_ANALOG (аналоговый режим). Для цифрового режима необходимо задать значение поля PORT_FUNC. Этой цели служат константы, определяющие тип используемой функции:
– PORT_FUNC_MAIN (основная функция);
– PORT_FUNC_ALTER (альтернативная функция);
– PORT_FUNC_OVERRID (перегружаемая функция);
– PORT_FUNC_PORT (порт используется для ввода-вывода).
Набор этих констант отражает возможность использования порта не только для
передачи информации, но и для взаимодействия с некоторым периферийным устройством.
В последнем случае необходимо определить тип функции для взаимодействия, для чего
используются три первых константы списка.
Одним из основных вопросов конфигурирования порта является задание направления
движения информации через него — ввод или вывод. Для этого служит поле PORT_OE принимающее значения PORT_OE_In (вход) или PORT_OE_Out (выход).
Поле PORT_SPEED описывает частоту сигнала, проходящего через порт. Оно может принимать значения PORT_OUTPUT_OFF (отключен), PORT_SPEED_SLOW (частота не более 5 МГц), PORT_SPEED_FAST (частота не более 25 МГц), PORT_SPEED_MAXFAST (частота не более 50 МГц).
Поле PORT_PD используется для определения типа цифрового выхода. Оно может принимать одно их двух значений: PORT_PD_DRIVER (управляемый драйвер) или PORT_PD_OPEN (открытый сток). На практике часто используют первый параметр.
Поля PORT_PULL_UP и PORT_PULL_DOWN конфигурируют состояние резисторов подтяжки линий ввода-вывода. Значение PORT_PULL_UP_OFF и PORT_PULL_DOWN_OFF
говорит, что резистор не используется. В противном случае применяется значение
PORT_PULL_UP_ON и PORT_PULL_DOWN_ON.
Поля PORT_PD_SHM и PORT_GFEN характеризуют работу порта в специфичных
режимах входа, триггера Шмидта и цифрового фильтра.
28
Описанная конфигурация вступит в силу после вызова функции PORT_Init (MDR_PORTA, &PtIStruct).
В качестве первого параметра необходимо передать обозначение конфигурируемого
порта. Эта функция отдельно вызывается для всех портов, задействованных в программе. Далее рекомендуется для разрешения тактирования используемых портов вызвать функцию:
RST_CLK_PCLKcmd:
RST_CLK_PCLKcmd (RST_CLK_PCLK_PORTA|RST_CLK_PCLK_PORTB, ENABLE).
Сочетание используемых в программе портов задается в первом параметре функции.
Подготовленный таким образом порт готов к работе. Если порт конфигурировался как цифровой вход, то возможно чтение состояния всего порта или его отдельных линий.
Для чтения порта в целом применяется функция PORT_ReadInput_Data, а для чтения
заданных линий — функция PORT_ReadInput_Data_Bit:
uint16_t i, j; i = PORT_ReadInput_Data (MDR_PORTB); j = PORT_ReadInput_Data_Bit (MDR_PORTB, PORT_Pin_1 | PORT_Pin_2).
В результате переменная i получит в виде 16-битового беззнакового целого числа состояние линий порта В, а переменная j — состояние линий PB0 и PB1 (если он был определен как цифровой вход).
Если некоторый порт был определен как цифровой вход, то для работы с ним
доступны следующие функции:
– PORT_SetBits (устанавливает состояние линий в 1); – PORT_ResetBits (устанавливает состояние линий в 0); – PORT_WriteBits (устанавливает состояние линий в заданное состояние: Bit_SET — 1, Bit_RESET — 0); – PORT_Write (устанавливает состояние порта в указанное состояние).
Проиллюстрируем применение данных функций:
PORT_SetBits (MDR_PORTA, PORT_Pin_0 | PORT_Pin_1); PORT_ResetBits (MDR_PORTA, PORT_Pin_2); PORT_WriteBits (MDR_PORTA, PORT_Pin_3, Bit_RESET); PORT_Write (MDR_PORTB, 0x0002).
29
В результате линии PA0 и PA1 получают значение 1, PA2 и PA3 — 0. Если порт В
Result
ADC
Control
Result
Vop
1,23V
ADCOP1
ADCOP2
Temp
t°C
TS_EN
TS_EN
SEL_TS
TS_BUF_EN
SEL_VREF
TS_BUF_EN
ADC2
Ain
Chanel
Select
REF
ADC1
Ain
Chanel
Select
REF
12
12
Analog
Matrix
16
18
1 0
1 0 1 0
ADC1_REF-
ADC0_REF+
PD15..PD2
ADC[15:2]
PD1, PD0
Порт D
сконфигурирован как выход, то линия PB1 будет установлена в 1, а остальные в 0. Функции записи бит не оказывают влияния на линии, сконфигурированные как вход. Узнать текущее состояние линий выхода можно с помощью функций PORT_ReadInput_Data и PORT_ReadInput_Data_Bit.
2.2. Основы работы с аналого-цифровым преобразователем
В состав микроконтроллеров типа 1986ВЕ92х входят два аналого-цифровых преобразователя (АЦП), позволяющих преобразовывать аналоговый входной сигнал в оцифрованный код на выходе [7, 8, 12, 14]. Они обозначаются ADC1 и ADC2 (рис. 2.3).
D и от двух внутренних каналов, на которые выводятся датчик температуры и источник опорного напряжения.
Рис. 2.3. Структурная схема контроллера АЦП
С помощью АЦП можно оцифровать сигнал от 16 внешних аналоговых выводов порта
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]