Проекты Keil uVision 5 и STM32CubeIDE
МК: STM32F107VC (отладочная плата STM3210C-EVAL), STM32F103RBT6 (отладочная плата Nucleo)
Содержит 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.
Реализовано два обработчика прерываний:
- по переполненю таймера TIM6 (раз в секунду меняется состояние светодиода);
- по внешнему импульсу на линии EXTI9 (к PB9 подключена кнопка, по нажатию меняется состояние светодиода).
Демонстрирует работу с модулем 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).
Разработан проект аппаратного USB HS для STM32F429ZI. Данные, принятые с ПК, возвращаются обратно.
Реализована работа с регулярной группой каналов АЦП 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
.
Реализованы режимы работы ЦАП:
- установка постоянного напряжения;
- генерирование синусоидального сигнала (с помощью модуля DMA);
- генерирование шума;
- генерирование треугольного сигнала.
Структура папок:
- WaveGenerator - содержит скрипты генерирования массива значений для синусоиды:
DAC_Sine - Swift.playground
- playground для Xcode (язык Swift);DAC_Sine - MATLAB.m
- скрипт Matlab. Генерирует только числовые значения.
- Waweforms - содержит осциллограммы с выхода ЦАП:
- Command U 1.5.png - постоянное напряжение 1.5В (команда
U 1.5
). - Command SIN 200.png - синусоида, TIM6->ARR = 200 (команда
SIN 200
). - Command SIN 1500.png - синусоида, TIM6->ARR = 1500 (команда
SIN 1500
). - Command TRIANGLE 1.png - треугольный сигнал, TIM6->ARR = 1 (команда
TRIANGLE 1
). - Command TRIANGLE 5.png - треугольный сигнал, TIM6->ARR = 5 (команда
TRIANGLE 5
).
- Command U 1.5.png - постоянное напряжение 1.5В (команда
- 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
.
Проект разработан в STM32CubeIDE.
Данный проект демонстрирует:
- Реализацию многозадачности.
- Работу с очередью.
- Работу с семафорами.
UARTQueueHandle
- очередь строк для отправки по UART.
BtnSemHandle
- бинарный семафор, устанавливаемый по нажатию кнопки Btn.
DefaultTask
- пустая задача.LED1Task
- мигает светодиодом LED1 раз в секунду.LED2Task
- мигает светодиодом LED2 раз в две секунды.LED3Task
- инвертирует светодиод LED3, если сработал семафорBtnSemHandle
(нажата кнопка Btn).ReadBtnTask
- считывает состояние кнопки Btn и, в случае нажатия, выставляет семафорBtnSemHandle
.ADCTask
- считывает результат измерения АЦП и загружает полученное значение в регистр модуля ШИМ таймераTIM4
, канал 2.UARTTask
- отправляет по модулю UART строки, находящиеся в очередиUARTQueueHandle
.
Реализована периодическая дискретизация сигнала с частотой 100кГц с использованием связки АЦП+DMA. Алгоритм работы программы:
- Производится заполнение первой половины буфера АЦП
ADC_Buffer
(256 из 512 элементов), после чего генерируется прерывание от DMA (DMA_ISR_HTIF1
). - Производится ДПФ от первой половины буфера АЦП, в это время заполняется вторая половина буфера.
- После заполнения всего буфера из 512 отсчётов DMA генерирует второе прерывание (
DMA_ISR_TCIF1
). - Производится ДПФ от второй половины буфера АЦП, в это время заполняется первая половина буфера.
- Пункты 1-4 повторяются.
Все результаты записываются в массив FFT_Results
. По запросу от ПК можно передать содержимое как буфера АЦП, так и результаты ДПФ.
Структура папок:
- PC Soft - содержит ПО для графического представления данных с АЦП и БПФ.
ADC_Graph Source
- Проект Qt Creator, Qt v5.4.Lab 5-7 Prog - Windows.zip
- Скомпилированное под Windows приложение.
- Waweforms - содержит скриншоты программы для различных форм сигнала (временная область и спектр соответственно):
- Sine_1kHz_Time.png, Sine_1kHz_FFT.png - Синусоида частотой 1кГц.
- Sine_10kHz_Time.png, Sine_10kHz_FFT.png - Синусоида частотой 10кГц.
- Sine_90kHz_Time.png, Sine_90kHz_FFT.png - Синусоида частотой 90кГц. Обратить внимание, что частота синусоиды выше частоты Найквиста!
- Meandr_10kHz_Time.png, Meandr_10kHz_FFT.png - Меандр частотой 10кГц. Обратить внимание на гармоники.
- 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).