/STM32-Labs

Лабораторные работы и практикумы по STM32

Primary LanguageC

Проекты Keil uVision 5 и STM32CubeIDE

МК: STM32F107VC (отладочная плата STM3210C-EVAL), STM32F103RBT6 (отладочная плата Nucleo)

Лабораторная работа №1 (Lab 1 - Hello World)

Введение в Assembler Cortex-M3

Содержит 4 проекта:

  • Keil_Assembler - проект Keil uVision 5 на языке Assembler.
  • Keil_C - проект Keil uVision 5 на языке C. В папке StdPeriphLib Version находится версия исходников с использованием библиотеки StdPeriphLib (устарело).
  • CubeIDE_Assembler - проект STM32CubeIDE 1.7 на языке Assembler.
  • CubeIDE_C - проект STM32CubeIDE 1.7 на языке C.

Лабораторная работа №2 (Lab 2 - Interrupts)

Введение в прерывания

Реализовано два обработчика прерываний:

  • по переполненю таймера TIM6 (раз в секунду меняется состояние светодиода);
  • по внешнему импульсу на линии EXTI9PB9 подключена кнопка, по нажатию меняется состояние светодиода).

Лабораторная работа №3 (Lab 3 - UART+DMA)

Модуль USART, DMA

Демонстрирует работу с модулем USART и два подхода к передаче данных:

  • через процессор (#define USE_DMA должен быть закомментирован);
  • через модуль DMA (#define USE_DMA должен быть раскомментирован).

Параметры UART:

  • Скорость обмена: 115200 бод;
  • 8 бит данных;
  • 1 стоп-бит.

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

  • USART without DMA.png - передача по USART осуществляется через процессор.
  • USART with DMA.png - передача по USART осуществляется через модуль DMA.

На двух картинках:

  • Канал А (синий) - сигнал на выводе PD7 (светодиод LED1).
  • Канал B (красный) - сигнал на выводе PD5 (USART2 TX Remapped).

Лабораторная работа №4 (Lab 4 - USB)

Работа с модулем АЦП

Разработан проект аппаратного USB HS для STM32F429ZI. Данные, принятые с ПК, возвращаются обратно.

Лабораторная работа №5 (Lab 5 - ADC)

Работа с модулем АЦП

Реализована работа с регулярной группой каналов АЦП ADC1:

  • ADC1_IN14 - подключен к потенциометру.
  • ADC1_IN16 - внутренний канал, подключен к встроенному термодатчику.

Реализован простейший обработчик SCPI-подобных команд:

  • *IDN? - считать идентификатор устройства. В ответ МК вернёт строку Lab 4 - ADC.
  • LED1 ON|OFF - включить/выключить светодиод LED1. В случае успешного выполнения команды МК вернёт строку OK. В случае неверного параметра (если это не ON или OFF) - Invalid Parameter.
  • ADC? - измерить напряжение на входе ADC1_IN14. В ответ МК вернёт значение напряжения в Вольтах.
  • TEMPER? - измерить температуру микроконтроллера. В ответ МК вернёт значение температуры в градусах Цельсия.

В случае получения неизвестной команды МК вернёт сообщение об ошибке Invalid Command.

Лабораторная работа №6 (Lab 6 - DAC)

Работа с модулем ЦАП

Реализованы режимы работы ЦАП:

  • установка постоянного напряжения;
  • генерирование синусоидального сигнала (с помощью модуля DMA);
  • генерирование шума;
  • генерирование треугольного сигнала.

Структура папок:

  • WaveGenerator - содержит скрипты генерирования массива значений для синусоиды:
    • DAC_Sine - Swift.playground - playground для Xcode (язык Swift);
    • DAC_Sine - MATLAB.m - скрипт Matlab. Генерирует только числовые значения.
  • Waweforms - содержит осциллограммы с выхода ЦАП:
  • Project - сам проект программы.

Система команд по интерфейсу UART:

  • *IDN? - считать идентификатор устройства. В ответ МК вернёт строку Lab 5 - DAC.
  • U [val] - установить постоянное напряжение на выходе ЦАП. [val] - значение напряжения в Вольтах, может находиться в диапазоне от 0.00 до 3.30В. В случае успешного выполнения команды МК вернёт ответ OK. Если значение [val] выходит за допустимый диапазон - Out of Range.
  • SIN [val] - генерировать синусоидальный сигнал на выходе ЦАП. [val] - модуль счёта таймера TIM6, по которому генерируется запрос DMA. Может принимать значения от 0 до 65535. В случае успешного выполнения команды МК вернёт ответ OK.
  • NOISE [val] - генерировать шум на выходе ЦАП. [val] - модуль счёта таймера TIM6, по которому запускается ЦАП. В случае успешного выполнения команды МК вернёт ответ OK.
  • TRIANGLE [val] - генерировать сигнал треугольной формы на выходе ЦАП. [val] - модуль счёта таймера TIM6, по которому запускается ЦАП. В случае успешного выполнения команды МК вернёт ответ OK.

Лабораторная работа №7 (Lab 7 - FreeRTOS)

Введение в операционные системы реального времени

Проект разработан в STM32CubeIDE.

Данный проект демонстрирует:

  • Реализацию многозадачности.
  • Работу с очередью.
  • Работу с семафорами.

Очереди:

  • UARTQueueHandle - очередь строк для отправки по UART.

Семафоры:

  • BtnSemHandle - бинарный семафор, устанавливаемый по нажатию кнопки Btn.

Задачи:

  • DefaultTask - пустая задача.
  • LED1Task - мигает светодиодом LED1 раз в секунду.
  • LED2Task - мигает светодиодом LED2 раз в две секунды.
  • LED3Task - инвертирует светодиод LED3, если сработал семафор BtnSemHandle (нажата кнопка Btn).
  • ReadBtnTask - считывает состояние кнопки Btn и, в случае нажатия, выставляет семафор BtnSemHandle.
  • ADCTask - считывает результат измерения АЦП и загружает полученное значение в регистр модуля ШИМ таймера TIM4, канал 2.
  • UARTTask - отправляет по модулю UART строки, находящиеся в очереди UARTQueueHandle.

Лабораторная работа №8 (Lab 8 - FFT)

Дискретное преобразование Фурье

Реализована периодическая дискретизация сигнала с частотой 100кГц с использованием связки АЦП+DMA. Алгоритм работы программы:

  1. Производится заполнение первой половины буфера АЦП ADC_Buffer (256 из 512 элементов), после чего генерируется прерывание от DMA (DMA_ISR_HTIF1).
  2. Производится ДПФ от первой половины буфера АЦП, в это время заполняется вторая половина буфера.
  3. После заполнения всего буфера из 512 отсчётов DMA генерирует второе прерывание (DMA_ISR_TCIF1).
  4. Производится ДПФ от второй половины буфера АЦП, в это время заполняется первая половина буфера.
  5. Пункты 1-4 повторяются.

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

Структура папок:

  • PC Soft - содержит ПО для графического представления данных с АЦП и БПФ.
    • ADC_Graph Source - Проект Qt Creator, Qt v5.4.
    • Lab 5-7 Prog - Windows.zip - Скомпилированное под Windows приложение.
  • Waweforms - содержит скриншоты программы для различных форм сигнала (временная область и спектр соответственно):
  • Project - сам проект программы.

Система команд по интерфейсу UART:

  • *IDN? - считать идентификатор устройства. В ответ МК вернёт строку Lab 7 - FFT.
  • ADC? - считать массив отсчётов во временной области. В ответ вернёт 256 числовых значений в HEX-формате (ведущие нули опускаются).
  • FFT? - считать массив отсчётов в частотной области. В ответ вернёт 256 числовых значений в HEX-формате (ведущие нули опускаются).

Дополнительно

  • ST-LINKIII-KEIL_SWO.dll - заменить в новых версиях Keil uVision 5 для совместимости с программатором ST Link 1 (платы STM32 Discovery Value Line).