3. В файле stm32f10x_rcc.h нужно найти #define, отвечающий за
GPIOC (рис. 25)
Рис. 25 Поиск функции, отвечающей за тактирование порта С
Функция, отвечающая за тактирование порта С, будет начинаться c
RCC_APB2Periph. Найдем по этому ключу в этом же файле следующую
функцию: RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); и скопируем данную функцию в init.c. На первом месте в скобках пишем макроопределение #define, отвечающего за GPIO, найденный ранее, на втором месте – состояние: в данном случае – ENABLE. В итоге получим:
void LEDs_ini()//функция для инициализации диодов
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph _GPIOС, ENABLE);
}
4. Настроить работу портов С, А. В Библиотеке StdPeriph используются
готовые структуры, которые необходимо заполнить нужными значениями.
Соответствующую структуру для портов можно найти в файле:
stm32f1xx_gpio.c→ stm32f1xx_gpio.h (рис. 26)
Рисунок 26. Структура портов
Как видно, название структуры - GPIO_InitTypeDef (используется как
тип данных). В файле init.c создадим переменную Init_LEDs с таким типом:
GPIO_InitTypeDef Init_LEDs, причем, так как переменные определяются до
функций в которых они используются, объявлять эту переменную нужно до
включения тактирования. Далее, в конце функции инициализации диодов описываем структуру
Init_LEDs. Указываем выводы, на которых расположены диоды:
Init_LEDs.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9
устанавливаем скорость работы=2МГц :
Init_LEDs.GPIO_Speed=GPIO_Speed_2MHz;
устанавливаем режим работы – на выход:
Init_LEDs.GPIO_Mode=GPIO_Mode_OUT
После этого нужно инициализировать эту структуру. Функция инициализации GPIO_Init(GPIOC, &Init_LEDs); находится в stm32f1xx_gpio.h в самом конце. На первом месте пишется название порта, на втором – указатель на структуру.
5. Теперь нам нужно менять состояние светодиодов. В файле stm32f1xx_gpio.h описаны все необходимые для этого функции.
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); -
устанавливает 1 на указанной ножке;
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);-
сбрасывает значение;
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,
BitAction BitVal); - записывает определённое значение на выводе;
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); -
записывает определённое значение на весь порт.
Задание:
1. Активировать тактирование порта А.
2. Самостоятельно провести настройку порта А на ввод.
3. Написать код программы, выполняющей заданный функционал.
4. Запрограммировать плату и продемонстрировать работу программы.
Лабораторная работа №3. Изучение контроллера внешних прерываний/событий с помощью библиотеки StdPeriph
Цель работы: ознакомиться с понятием прерывания, возможностями, которые они предоставляют, изучить контроллер внешних прерываний/событий - External interrupt/event controller (EXTI).
Оборудование и программное обеспечение: плата STM32VL Discovery, среда разработки Keil uVision 5, библиотека StdPeriph, справочное руководство Reference manual для микроконтроллера STM32F100RB.
Ход работы:
1. Создать проект в среде разработки Keil uVision 5.
2. С помощью утилиты Manage Run-Time Environment подключить библиотеки CMSIS – CORE, Device –Startup, Device – StdPeriph Drivers – GPIO, RCC, Framework, EXTI.
3. Настроить на вывод порт C, подать тактирование на порт А.
4. Настроить регистр Nested Vector Interrupt Controller (NVIC), встроенный контроллер вектора прерываний. Посмотреть таблицу векторов прерываний можно в файле startup_stm32f10x_md_vl.s (рис. 27)
Рис. 27 Таблица векторов прерываний в файле startup_stm32f10x_md_vl.s
Необходимо ,как и при настройке портов, задать название стрктуры для вектора прерывания (NVIC_InitTypeDef NVIC_Init_Button), разрешить глобальные прерывания NVIC_EnableIRQ (EXTI0_IRQn) – здесь указывается, что прерывания разрешены для нулевой линии, куда входят все нулевые пины всех портов ввода, вывода указать источник прерываний с помощью дефайна NVIC_Init_Button.NVIC_IRQChannel (указываем снова EXTI0_IRQn – внешнее событие по нулевому каналу). Далее, надо включить прерывания с помощью NVIC_Init_Button.NVIC_IRQChannelCmd = ENABLE и выставить приоритеты:
NVIC_Init_Button.NVIC_IRQChannelPreemptionPriority = 0x0F;
NVIC_Init_Button.NVIC_IRQChannelSubPriority = 0x0F.
5. Настройте дедктор внешних событий. Для этого задайте стрктуру для детектора событий EXTI_InitTypeDef EXTI_Init_Button; укажите канал отслеживания EXTI_Init_Button.EXTI_Line = … ; задайте режим работы EXTI_Init_Button.EXTI_Mode = … (здесь необходимо выбрать режим прерываний Interrupt), разрешите отслеживание внешних событий EXTI_Init_Button.EXTI_LineCmd = ENABLE; и укажите по какому внешнему событию будет происходить прерывание EXTI_Init_Button.EXTI_Trigger = …. (здесь есть несколько вариантов – по фронту импульса EXTI_Trigger_Rising, по спаду EXTI_Trigger_Rising, по фронту и спаду).
6. Не забудьте в конце блока инициализации заврешиь формирование всех структур.
GPIO_Init(GPIOC, &GPIO_Init_LED);
EXTI_Init(&EXTI_Init_Button);
NVIC_Init(&NVIC_Init_Button).
7. В ходе работы необходимо выполнить действия, которые произойдут по нажатию кнопки. Для этого необходимо описать функцию EXTI0_IRQHandler, которая будет автоматически вызываться, по нажатию кнопки. Функция должна проверять состояние специального регистра, фиксирующего прерывания, делается это с помощью структуры EXTI_GetITStatus(EXTI_Line0). Здесь EXTI_Line0 – указание на бит необходимого регистра для нулевого канала прерываний. После проверки состояние регистра необходимо написать программу прерывания и не забыть очистить искомый бит EXTI_ClearITPendingBit(EXTI_Line0);
Задания:
1. Настроить тактирование портов А, С, AFIO.
2. Настроить порт С – на вывод
3. Настроить контроллер внешних прерываний и регистр векторов прерываний.
4. Написать код программы, выполняющей заданный функционал.
5. Запрограммировать плату и продемонстрировать работу программы.
Лабораторная работа №4. Использование программной среды STM32CubeMX для настройки проекта и библиотеки HAL для программирования.
Цель работы: ознакомиться с конфигурацией проекта с помощью утилиты STM32CubeMX и элементами библиотеки HAL на примере платы STM32 F3 Discovery.
Оборудование и программное обеспечение: плата STM32 F3 Discovery, среда разработки Keil uVision 5, STM32CubeMX, библиотека HAL.
Ход работы:
1. Скачайте с официальносго сайта ST Microelectronics и установите STM32CubeMX. Убедитесь, что у вас установлены библиотеки для семейства F3, для этого запустите приложение и зайдидет в меню Help – Install New Libraries.
2. Создайте новый проект, нажав на кнопку New Project на главной странице приложения. Выберите микроконтроллер STM32F303VCTx (рис. 28)
Рис. 28 Выбор MCU
3. Установите пины PE8-PE15 в режим Output (для этого надо кликнуть на каждый левой кнопкой мыши), а пин PA0 – в режим Input. В левой колонке в меню SYS выставьте Debug – Serial Wire, а в меню RCC – High Spedd Clock (HSE) – BYPASS Clock Sourse. Сверьтесь с рис. 29.
Рис. 29 Настройка портов и периферии
4. Чтобы настроить тактирование портов, перейдите на вкладку Clock Configuration и настройте соответственно рис. 30. После этого нажмите кнопку Generate Code и установите настройки для проекта и пути его сохранения (рис. 31).
Рис. 30 Настройка тактирования
Рис. 31 Генерация проекта
Если вы не установили библиотеку для семейства F3, то программа попросит разрешения сделать это самостоятельно из интернета. Разрешите.
5. Созданный проект открываем в Keil uVision и ищем там строчки
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
Здесь будет ваш код
}
/* USER CODE END 3 */
6. Для написания простейшей программы вам понадобятс следующие функции: HAL_GPIO_ReadPin (GPIOx, GPIO_PIN_y) читает состояние указанного бита (кнопки в нашем случае) – вместо x указываем порт, вместо y – номер пина; HAL_GPIO_TogglePin (GPIOx, GPIO_PIN_y) меняет состояние пина, настроенного на выход; HAL_Delay (xxx) – простая задержка, вместо xxx вставляем число тактовых импульсов; HAL_GPIO_WritePin (GPIOx, GPIO_PIN_y, GPIO_PIN_RESET) – запись конктретного значения в конкретные пины, в данном случае, сбрасывание этих пинов в 0.
Задание:
1. Создать проект в STM32CubeMX.
2. Написать программу с использованием кнопки, сведиодов и задержки времени на базе библиотеки HAL.
3. Запрограммировать плату и продемонстрировать работу программы.
СПИСОК ЛИТЕРАТУРЫ
1. ARM (архитектура) [Электронный ресурс] – Режим доступа : URL:
http://ru.wikipedia.org/wiki/ARM_(архитектура)/.
2. STM32F4DISCOVERY, Отладочный комплект на базе TM32F407VGT6 ARM CortexM4-F [Электронный ресурс] – Режим доступа : URL: http://www.chipdip.ru/product/stm32vldiscovery/
3. Лабораторный практикум по изучению микроконтроллеров архитектуры
ARM Cortex-M4 В. И. Бугаев, М. П. Мусиенко, Я. М. Крайнык Москва-
Николаев – 2013, 52c
4. Павловская Т.А. C/C++. Программирование на языке высокого уровня. — CПб.: Питер, 2001-2011. - 461 с.
5. Бородулин А. STM8 и STM32 – объединенное пространство 8- и 32-разрядных микроконтроллеров //Компоненты и технологии №10. – 2009. – с. 55-59.
6. Микропроцессорные системы управления в робототехнике и мехатронике [Электронный ресурс] – Режим доступа : URL: http://bigor.bmstu.ru/?cnt/?doc=MPSU/base.cou
7. Стандартные функции, структуры данных и алгоритмы системы программирования языка С [Электронный ресурс] – Режим доступа : URL: http://bigor.bmstu.ru/?cnt/?doc=PYAVU/base.cou
8. Знакомство с STM32VL Discovery [Электронный ресурс] – Режим доступа : URL: http://easystm32.ru/stm32vl-discovery
9. Микроконтроллеры. Начало. STM32 [Электронный ресурс] – Режим доступа : URL: http://radiokot.ru/articles/56/
10. STM32 ADC Примеры использования. Шаг 1 [Электронный ресурс] – Режим доступа : URL: http://mycontroller.ru/stm32-adc-primeryi-ispolzovaniya-shag-1/.
11. Начинаем изучать Cortex-M на примере STM32, часть 2[Электронный ресурс] – Режим доступа : URL: http://habrahabr.ru/post/218825/.
12. Программирование STM32F4. USART. Пример программы. [Электронный ресурс] – Режим доступа : URL:
http://microtechnics.ru/programmirovanie-stm32f4-usart-primer-programmy/.
13. STM32F4: INTERRUPT TIMER [Электронный ресурс] – Режим доступа : URL: http://amarkham.com/?p=29.
14. ST Visual Programmer for programming ST7, STM8 and STM3 2 [Электронный ресурс] – Режим доступа :
URL: http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF210568.
15. Brown J. Discovering the STM32 Microcontroller. January 8, 2013.
16. Reference manual. STM32F10xxx, advanced ARM-based 32-bit
MCUs. [Электронный ресурс] – Режим доступа : URL:
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf.
17. STM32–Контроллер внешних прерываний (событий) [Электронный ресурс] – Режим доступа : URL: http://ziblog.ru/2011/05/18/stm32-ndash-kontroller-vneshnih-preryivaniy-sobyitiy.html
18. Ознакомление с техническими и программными средствами для микроконтроллеров семейства ARM [Электронный ресурс] – Режим доступа : URL : http://frela-mk.narod.ru/olderfiles/1/metodichka_lr2.pdf
19. Сравнительный анализ микроконтроллеров с ядром ARM [Электронный ресурс] – Режим доступа : URL : http://www.gaw.ru/html.cgi/txt/publ/micros/arm.htm
20. ARM. Учебный курс. Прерывания и NVIC – приоритетный контроллер прерываний [Электронный ресурс] – Режим доступа : URL : http://easyelectronics.ru/arm-uchebnyj-kurs-preryvaniya-i-nvic-prioritetnyj-kontroller-preryvanij.html
21. Появление и история развития микроконтроллеров [Электронный ресурс] – Режим доступа : URL : http://www.mrwolf.ru/Gadzhety_i_tehnologii/Pro4ee/7674
22. М. Предко Руководство по микроконтроллерам. Том II. .Москва: Постмаркет, 2001.- 488 с.
23. М. Предко Руководство по микроконтроллерам. Том I. Москва: Постмаркет, 2001. - 416 с.
24. MicroXplorer Eclipse plugin, graphical tool to configure STM32 microcontrollers. [Электронный ресурс] –
Режим доступа : URL: http://www.st.com/web/en/catalog/tools/PF257931.
0 комментариев