ПАК ЗБС 12: Описание функциональных характеристик программного обеспечения
Обращаем Ваше внимание! Программное обеспечение отдельно не поставляется и продается только в составе ПАК ЗБС 12. По поводу расчета стоимости и приобретения прибора вместе с ПО обращайтесь к менеджерам в отдел продаж — контактные данные указаны по ссылке http://skbpn.ru/contacts.
- ПО получения и предварительного расчёта углов ориентации
- Контроль состояния
- Контроль состояния энергонезависимой памяти
- Перечень основных процедур и функций
- Установка программного обеспечения
- Эксплуатация программного обеспечения
- Приложение №1. Опции компилятора типового проекта
ПО получения и предварительного расчёта углов ориентации и подготовки данных первичных датчиков для записи в энергонезависимую память прибора обеспечивает:
— предварительную оценку функционирования модуля ориентации;
— запись калибровочных коэффициентов модуля ориентации в его ПЗУ;
— параллельный сбор данных с блоков датчиков (гироскопа, акселерометров, датчика угла, температурных датчиков) во время проведения измерений;
— перевод этих данных из цифровых кодов в соответствующие величины с использованием сохраненных в ПЗУ модуля ориентации коэффициентов;
— предварительный расчет углов ориентации (угла азимута, зенитного угла, угла отклонителя);
— запись углов ориентации в память прибора и передача их (вместе с первичными данными чувствительных элементов) на ПК оператора.
Контроль состояния
Контроль состояния датчиков, чувствительных элементов и напряжений питания выполняется постоянно, когда питание на устройство подано. В случае выхода значений датчиков за диапазон допустимых значений, это фиксируется в модуле «хранения», отправляется сигнал предупреждения через модуль связи на наземную станцию, а затем, в последствии, к оператору с целью принятия мер для снижения воздействия на прибор либо прекращения работы в случае отказа ключевых датчиков или выхода питающих напряжений за допустимые диапазоны.
Контроль состояния энергонезависимой памяти
Перед началом сессии и в ходе работы с прибором осуществляется контроль заполнения энергонезависимой памяти. Данные о состоянии памяти передаются через модуль связи в наземную станцию к оператору в реальном времени, кроме того, производится оценка возможной продолжительности работы с прибором, на основании которой оператору выдаются предупреждения о скором заполнении памяти модуля ориентации.
Перечень основных процедур и функций и краткое пояснение их функционального назначения
bool butterworth_init(void) — функция инициализации фильтра Баттерворта
bool butterworth_calc_coeff(int Fs, float Fc, int filter_order) — расчёт коэффициентов фильтра Баттерворта, Fs — частота дискретизации в Hz, Fc — частота среза в Hz, filter_order — порядок фильтра кратный 2
bool butterworth_init_var(butterworth_var* var) — подготовка структуры для работы с фильтром Баттерворта
double butterworth_filter(int data, butterworth_var* var) — реализация фильтра Баттерворта
int main(void) — основная функция программы, инициализирует периферию, подготавливает структуры данных, запускает основной цикл работы
void every_second_update(void) — Заполняет регистры выходных оперативных данных отправляемых оператору
double limitAngle(double Qrad, unsigned char piRad) — ограничение расчётных углов значением 2PI
void get_calc(void) — Основные вычисления и подготовка данных к записи во флеш-память прибора
uint32_t get_last_data_page() — поиск последней активной страницы флеш-памяти
void ADS8332_init(void) — инициализация структур и соответствующих периферийных модулей АЦП
void ADC_SPI_init(void (*RCC_APBxPeriphClockCmd)(uint32_t, FunctionalState), SPI_Dev* SPIx) — инициализация периферии интерфейса SPI для работы с АЦП
void DMA_SPI_ADCx_init(SPI_Dev* SPIx) — инициализация модуля прямого доступа к памяти для работы с АЦП
uint16_t ADS8332x_CFR_IO(SPI_Dev* SPIx, uint16_t value) — передача команд настройки АЦП без использования модуля прямого доступа к памяти
uint8_t ADS8332x_config(SPI_Dev* SPIx) — конфигурирование порядка каналов, скорости работы и выходной последовательности данных АЦП
void initDataContainer(adc_data_container* DataContainer) — инициализация контейнера данных канала АЦП
void addNewData(uint16_t NewData,adc_data_container * DataContainer) — добавление данных канала АЦП и расчет среднего значения
void try_adc_data() — добавление данных полученных из модуля прямого доступа к памяти в соответствующие буферы
uint16_t getAverage(adc_data_container* DataContainer) — получение усредненных данных из выборки полученных с АЦП данных
void write_flash_data(uint8_t* flash_addr, uint32_t data_size, uint8_t* data) — запись заданного массива данных во флеш-память устройства по заданному адресу
FLASH_Status flash_get_status_IWDG(void) — получение текущего статуса микросхемы флеш-памяти
FLASH_Status flash_erase_sector_IWDG(uint32_t FLASH_Sector, uint8_t VoltageRange) — стирание выбранного сектора флеш-памяти
FLASH_Status flash_program_halfWord_IWDG(uint32_t Address, uint16_t Data) — запись слова данных по выбранному адресу флеш-памяти
FLASH_Status flash_programWord_IWDG(uint32_t Address, float Data) — запись числа с плавающей точкой данных по выбранному адресу флеш-памяти
FLASH_Status flash_programByte(uint32_t Address, uint8_t Data) — запись байта данных по выбранному адресу флеш-памяти
void write_flash_data(uint8_t* flash_addr, uint32_t data_size, uint8_t* data) — запись последовательности данных заданного размера по выбранному адресу флеш-памяти
void MoveCW(float U) — запустить вращение мотора рамки по часовой стрелки с заданной интенсивностью
void MoveСCW(float U) — запустить вращение мотора рамки против часовой стрелки с заданной интенсивностью
void StopMotor(void) — остановка мотора рамки
void SetMotorDirection(uint8_t direction) — задание направление вращения мотора рамки
void setSPIDeviceEncoder(SPI_TypeDef* SPI, GPIO_TypeDef* CS_Port, uint32_t CS_Pin) — инициализация периферии интерфейса связи с магнитным энкодером положения рамки
void startUpInitEncoder(void) — инициализация магнитного энкодера положения рамки
float getVelocity(void) — получения скорости движения мотора рамки
std::pair<bool, float> getAngle(bool calibrate) — получение текущего угла магнитного энкодера положения рамки
void command_process(void) — обработчик команд, переданных по каналу связи
void reset_settings(void) — сброс настроек прибора, на настройки по умолчанию
void reset_calibration(void) — сброс калибровок прибора
void read_settings(void) — чтение настроек из энергонезависимой памяти
void save_settings(void) — запись настроек в энергонезависимую память
void RingBufferInit(RINGBUFFER* buffer) — инициализация кольцевого буфера
uint16_t RingBytesAvail(RINGBUFFER* buffer) — получение количества доступных в кольцевом буфере данных
void RingPushByte(RINGBUFFER* buffer, uint8_t byte) — положить байт данных в кольцевой буфера
void RingPopBytes(RINGBUFFER* buffer, int count) — вытащить заданное количество байт из кольцевого буфера
void RingGetData(RINGBUFFER* buffer, uint8_t *ret_ptr, uint16_t size) — переложить заданное количество байт из кольцевого буфера в полученный буфер
uint16_t RingFindByte(RINGBUFFER* buffer, uint8_t byte) — поиск заданного байта в кольцевом буфере
Информация, необходимая для установки программного обеспечения
Введение
Для программирования процессоров семейства STM32 потребуется программатор ST-LINK v2, либо отладочные платы, в составе которых уже есть программатор, поддерживающий интерфейс SWD. Можно применить такие отладочные платы, такие как STM32F4DISCOVERY, STM32L-DISCOVERY, STM32VLDISCOVERY, либо аналогичные, поддерживающие процессоры семейства STM32. Для программирования так же потребуется программа STM32 ST-LINK utility, доступная на официальном сайте производителя микроконтроллеров https://www.st.com/.
ST-LINK / V2 является внутрисхемным отладчиком / программатором для семейства микроконтроллеров STM8 и STM32. Однопроводный интерфейсный модуль (SWIM) и JTAG / SWD интерфейсы облегчают обмен данными с любыми STM8 или STM32 микроконтроллерами, расположенными на плате устройства.
Рис.1. Программатор ST-LINK v2 и комплектные кабели
Подключение к приложениям STM32
Для отладки микроконтроллеров STM32 программатор/отладчик ST-LINK/V2 необходимо подключить к приложению, используя стандартный 20-контактный плоский кабель JTAG. В таблице 1 приведены названия сигналов, функции и сигналы целевого соединения JTAG.
Таблица №1. Соединение JTAG и SWD для ST-LINK/V2
№ контакта | ST-LINK/V2 разъем | ST-LINK/V2 функция | Целевое соединение (JTAG) | Целевое соединение (SWD) |
---|---|---|---|---|
1 | VAPP | Target VCC | MCU VDD(1) | MCU VDD(1) |
2 | ||||
3 | TRST | JTAG TRST | JNTRST | GND(2) |
4 | GND | GND | GND(3) | GND(3) |
5 | TDI | JTAG TDO | JTDI | GND(3) |
6 | GND | GND | GND(3) | GND(3) |
7 | TMS_SWDIO | JTAG TMS, SW IO | JTMS | SWDIO |
8 | GND | GND | GND(3) | GND(3) |
9 | TCK_SWCLK | JTAG TCK, SW CLK | JTCK | SWCLK |
10 | GND | GND | GND(3) | GND(3) |
11 | NC | Не подключен | Не подключен | Не подключен |
12 | GND | GND | GND(3) | GND(3) |
13 | TDO_SWO | JTAG TDI, SWO | JTDO | TRACESWO(4) |
14 | GND | GND | GND(3) | GND(3) |
15 | NRST | NRST | NRST | NRST |
16 | GND | GND | GND(3) | GND(3) |
17 | NC | Не подключен | Не подключен | Не подключен |
18 | GND | GND | GND(3) | GND(3) |
19 | VDD | VDD (3.3V)(5) | Не подключен | Не подключен |
20 | GND | GND | GND(3) | GND(3) |
- Питание от платы приложений подключено к панели отладки и программирования STLINK/V2, чтобы обеспечить совместимость сигналов между обеими платами.
- Подключите к GND для уменьшения шума на кабеле.
- По крайней мере, один из этих контактов должен быть подключен к земле для правильного поведения (рекомендуется использовать все из них).
- Необязательно: специализированный вывод Serial Wire Output (SWO) программного интерфейса SWD, что не требует применения дополнительных разъемов на плате и позволяет осуществить однонаправленную передачу данных от микроконтроллера к программе отладчика.
Конфигурация программного обеспечения
Обновление прошивки ST-LINK/V2
ST-LINK/V2 имеет встроенный механизм обновления прошивки. Поскольку прошивка развивается в течение всей жизни продукта ST-LINK/V2 (добавляя новую функциональность, исправляются ошибки, дополняется поддержка новых семейств микроконтроллеров…), рекомендуется периодически посещать сайт www.st.com/stlinkv2, чтобы скачать новейшую версию прошивки.
Программирование микроконтроллера
Перед началом программирования необходимо соединить проводами программируемую плату и программатор и подать на них питание, запустить программу ST-LINK Utility. Рабочее окно программы показано на рисунке 2.
Необходимо выбрать вкладку Target и далее Connect. При этом рабочее окно должно совпадать с рисунком 2, сообщения об ошибках должны отсутствовать.
Рис.2. Окно программы STM32 ST-LINK Utility
Далее необходимо открыть файл «Название прошивки.hex», выбрав вкладку File действие Open.
После чего необходимо зайти на вкладку Target и выбрать действие Program&Verify, нажать в открывшемся окне кнопку Start. Соответствующее рабочее окно изображено на рисунке 3. По завершении прошивки должно быть выведена надписи «Flash memory programmed...» и «Verification...OK», как изображено в левом нижнем углу рисунка 3.
Рис.3. Окно программы STM32 ST-LINK Utility после успешной прошивки
Информация, необходимая для эксплуатации программного обеспечения
Введение
Для начала работы нам необходимо скачать установочный файл с официального сайта https://www.st.com/.
Для скачивания доступно несколько вариантов под Linux, macOS и Windows. Мы будем рассматривать вариант для Windows.
В данной инструкции приводится информация о работе с версией CubeIDE 1.10.1.
Рис.4. Окно «About STM32 CubeIDE»
Работа со средой STM32 CubeIDE
После запуска программы первое, что мы увидим это диалоговое окно с предложением указать папку, где хранятся проекты.
Рис.5. Окно выбора рабочей директории
Установив галку в поле «Use this as the default and do not ask again» указанная папка установиться по умолчанию и сообщение больше не будет показываться. Далее STM32 CubeIDE покажет главное окно.
Затем, для того что бы открыть проект необходимо в меню File выбрать пункт Open Projects from File System…
Рис.6. Меню Файл → Открыть проект
Откроется окно импорта проекта в рабочее пространство.
В поле «Import source» необходимо вписать путь до папки с проектом, или с помощью кнопку «Directory» выбрать папку с проектом на жестком диске. Если в папке содержится более одного проекта, в окне ниже можно выбрать проекты из папки, которые необходимо импортировать и снять выделение с проектов, которые не требуется импортировать в рабочее пространство.
Рис.7. Окно импорта проекта
После чего подтвердить импорт кнопкой «Finish». Подробнее о возможностях импорта можно прочитать на странице «wiki by ST», сайта производителя микроконтроллеров, по этой ссылке https://wiki.st.com/stm32mpu/wiki/STM32CubeIDE.
Совместимость версий
Во время импорта, работы с файлами *.ioc или сборки проекта, в случае если версия среды STM32 CubeIDE отличается от версии, в которой проект был создан, появится сообщение предлагающее обновить версию проекта до текущей версии среды. При нажатии кнопки «Continue» проект сохранит исходную версию, однако, возможно для дальнейшей работы потребуется загрузить соответствующую проекту версию библиотек, STM32 CubeIDE сделает это автоматически.
Рис.8. Уведомление о различии в версиях среды и проекта
При нажатии кнопки «Migrate», проект будет приведён в соответствии с текущей версией среды, но следует заметить, что после это процедуры, открыть проект из среды с версией меньше текущей будет не возможно! Если проект используется другими людьми, перед обновлением версии проекта убедитесь, что их версия соответствует вашей или новее.
Настройки проекта
После открытия проекта необходимо перейти в настройки проекта нажав в окне слева «Project Explorer» в дереве проектов на иконку проекта правой кнопкой мыши. И выбрать самый нижний пункт «Properties» или нажать соответствующую комбинацию клавиш.
Перейти в пункт «C/C++ Build» → «Settings» выбрать конфигурацию, которую планируется собрать. Существует, как минимум, две стандартные конфигурации «Release» для выпуска программы и «Debug» для отладки, однако, их может быть больше, при необходимости можно создать свою конфигурацию.
Как правило, проект уже сконфигурирован нужным образом, но в ходе обновления версии проекта средой некоторым вкладкам следует уделить внимание.
Рис.9. Меню свойства проекта
Для примера на рисунке ниже и в приложении будет представлена типичная конфигурация проекта, но для понимания влияния настроек проекта на конечный результат сборки необходимо ознакомится с документацией на соответствующую версию среды и выбранный стандарт компилятора. Вкладка настроек «MCU Settings» отвечает за работу процессора с числами с плавающей точкой, набор инструкций ядра и выбор полноты реализации стандартных библиотек. В зависимости от языка проекта, следующая вкладка, которая нас интересует «MCU GCC Compiler» либо «MCU G++ Compiler» в каждой из которых есть вложенные вкладки с описанием. И последняя из наиболее важны вкладок «MCU G++ Linker» содержит опции сборки дополнительных файлов и линковки внешних библиотек. В приложении 1 приведены ключи запуска компилятора с выбранными в проекте опциями для типичного проекта.
Рис.10. Меню настроек, вкладка настроек контроллера
Рис.11. Меню настроек, вкладка настроек линкера
Pinout & Configuration
Перед сборкой следует проверить файл конфигурации среды STM32 CubeIDE отвечающий за тактирование, периферию и расположение выводов контроллера.
Для этого в левом окне «Project Explorer» открыть файл «Имя проекта.ioc», после продолжительной загрузки откроется окно с визуализацией контроллера и расположением выводов на нём. Следует сопоставить аппаратную часть, её схему и фактическое подключение контроллера с представленным в проекте.
Рис.12. Окно «Pinout & Configuration» расположение выводов
На вкладке «Clock configuration» не должно быть ошибок тактирования, они обозначаются красным цветом, кроме того, необходимо проверить что частота внешних кварцевых резонаторов/генераторов на схеме тактирования совпадает с указанными в схеме устройства и фактически запаянными на плату аппаратуры, с которой происходит работа.
Рис.13. Окно «Clock Configuration» источники тактирования
Для получения информации, более подробных проверок и поисков неисправностей стоит обратиться к соответствующей литературе или сайту производителя https://www.st.com/.
Сборка
Если в ходе предыдущих этапов никаких ошибок не выявлено, можно начинать сборку проекта. Для необходимо нажать на кнопку с изображением молотка на верхней панели инструментов.
Рис.14. Окно «Console» результаты сборки
По окончанию процесса сборки в нижней части главного экрана будет представлен либо список ошибок в проекте которые необходимо исправить прежде чем собрать проект, либо информация об успешной сборке проекта. «Build Finished».
Рис.15. Меню запуска программы
После спешной сборки можно прошивать результат сборки в микроконтроллер (информацию о программаторе и подключении к аппаратной части смотри в соответствующей инструкции). Для этого необходимо в пункте меню «Run» выбрать пункт «Run» или «Debug», первый зашивает и запускает собранную программу, а последний используется для подключения к микроконтроллеру для отладки только что зашитой программы.
Приложение №1. Опции компилятора типового проекта
GCC
-mcpu=cortex-m7 -std=gnu11 -DUSE_HAL_DRIVER -DSTM32H725xx -DUSE_FULL_LL_DRIVER -DDEBUG -c -I «Список файлов для сборки» -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb
G++
-mcpu=cortex-m7 -std=gnu++14 -DUSE_HAL_DRIVER -DSTM32H725xx -DUSE_FULL_LL_DRIVER -DDEBUG -c -I «Список файлов для сборки» -O0 -ffunction-sections -fdata-sections -fno-rtti -fno-use-cxa-atexit -Wall -fstack-usage --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb
Linker
-mcpu=cortex-m7 -T"«Путь к файлу»\STM32H725RGVX_FLASH.ld" --specs=nosys.specs -Wl,-Map="${BuildArtifactFileBaseName}.map" -static --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -u _printf_float -u _scanf_float -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group