Написать функции взаимодействия с периферией STM32 на HAL и CubeMX

30 000 руб. за проект
09 декабря 2019, 13:18 • 5 откликов • 47 просмотров
Необходимо для микроконтроллера STM32F107RCT в программе STM32CubeMx настроить всю периферию и RTOS по блокам и написать функции взаимодействия для каждого модуля (периферии) в отдельной подключаемой библиотеке (код и заголовки):

SPI1 (PA4=CS, PA5=CLK, PA6=MISO, PA7=MOSI, PC4=INT2, PC5=INT1): Акселерометр LIS3DH
1. Установить частоту клоков 4-10 МГц
2. Настроить частоту и пределы измерения акселерометра на 100Гц и 2-5G соответственно. Все параметры настройки держать в памяти устройства (в переменной состояния акселерометра)
3. Настроить акселерометр, чтобы он генерировал прерывание по ножкам INT1 и/или INT2 при нарушении состояния покоя и при превышении ускорения по любой из координат более 2G с установлением соответствующего флага в переменной состояния акселерометра.
4. Настроить автоматическое считывание ускорений по x,y,z при возникноверии прерывания (PC4 и/или PC5), а так же по команде (например, после выставления флага в переменной состояния)
5. Включать модуль и начинать считывание только в том случае, если в переменной состояния установлен соответствующий флаг

SPI2 (PB12=CS, PB13=CLK, PB14=MISO, PB15=MOSI): Flash-память W25Q64
1. Установить частоту клоков 10-20 МГц
2. Прописать переменную, в которой будет храниться текущее состояние и настройки модуля.
3. Прописать команды чтения и записи в память по адресу и количеству байт
4. В команду записи добавить возможность верификации записанных данных
5. Включать модуль и начинать считывание только в том случае, если в переменной состояния установлен соответствующий флаг

USART2 (PA2=TX, PA3=RX, PA1=DE): RS-485
1. Прописать переменную с текущими настройками и состоянием модуля
2. Сделать возможность перенастройки скорости по выбору при параметрах 8N1 путем прописывания в переменную состояния определенных битов: 4800, 9600, 19200, 38400, 115200
3. Сделать функцию отправки массива байт с установлением флага в переменную состояния до передачи и по окончании (количество байт от 1 до 64)
4. Сделать функцию приема байт с возможностью установки как определенного количества байт (не более 64), так и бесконечного с установкой таймаута, при наступлении которого установится соответствующий флаг в переменной состояния.
5. Включать модуль и начинать считывание только в том случае, если в переменной состояния установлен соответствующий флаг

UART4 (PC10=TX, PC11=RX): GPS NMEA
1. Прописать структуру с приемными данными, в которых будет храниться:
1.1. время последнего принятого сообщения (HAL_GetTick()),
1.2. переменная состояния
1.3. Распарсенные Время и дата
1.4. Координаты
1.5. вектор направления движения
1.6. скорость
1.7. количество спутников
1.8. hdop, vdop
1.9. валидность
2. написать фенкцию парсинга принимаемых данных с параметрами 8N1 на скорости 9600
3. Синхронизировать с RTC. Если полученная дата меньше, чем в RTC или чем 01.12.2019, то выставить соответствующий флаг
4. Начинать парсинг только в том случае, если в переменной состояния установлен соответствующий флаг

UART5 (PC12=TX, PD2=RX): GSM + Bluetooth
1. Прописать структуру с приемными данными GSM, в которых будет храниться:
1.1. время последнего принятого сообщения (HAL_GetTick()),
1.2. переменная состояния
1.3. номера трех ближайших базовых станций (и желательно, их координаты)
1.4. IMEI, CCID, массив доступных для регистрации кодов операторов и их названий (домашний должен быть в самом начале)
1.5. уровень качества связи и помех с периодическим обновленим (1 раз в 1-5 минут)
1.6. название GSM-модуля
2. Написать алгоритм инициализации модуля и перевода его с любых скоростей(4800, 9600, 19200) на скорость 115200 при параметрах 8N1
3. Написать алгоритм создания TCP-подключений (если возможно, параллельно двух) и отправки/приема байт из/в массив(а)
4. Сделать возможность отправки ping-а и получения pong-а для определения активности соединения. Переподключиться, если не активно.
5. Прописать структуру с приемными данными Bluetooth, в которых будет храниться:
1.1. время последнего принятого сообщения (HAL_GetTick()),
1.2. переменная состояния
1.3. данные окружающих bluetooth устройств (подключенные идут в самом начале с соответствующим флагом)
6. Написать алгоритм поиска bluetooth устройств и подключения к ним
7. написать функции отправки байт подключенным устройствам
8. написать функции приема байт от подключенных устройств

CAN (PB8=RX, PB9=TX):
1. Написать функцию изменения настроек скорости (125 кбит/с, 250, 500, 1000) и битности (11 бит или 29)
2. написать функции отправки байт из массива байт
3. написать функции приема байт в массив байт
4. сделать переменную состояния модуля

RTC:
1. Инициализировать календарь и синхронизировать его с полученными данными от GPS-NMEA

FREERTOS:
Инициализировать и запускать в нём циклически задачи по работе с вышеперечисленными модулями.

USB FS (PA11=DM, PA12=DP): Виртуальный COM-порт
1. Инициализировать. Желательно дать название "TEST_BOARD"
2. Написать функции отправки и приема массива байт как в USART2

Пожелания:
1. Таймеры можно использовать на Ваше усмотрение, но оставить на запас 1-2 свободных
2. По возможности, приемы/отправки байт производить в фоне (DMA), не занимая время микроконтроллера.
3. Все настройки периферии (ножки, скорости и т.п.) прописать дефайнами в заголовочных файлах.
4. Среда разработки - keil 5 или IAR
5. Поэтапная оплата

Прочее:
1. Схема во вложении.
2. Модуль АЦП и мигания светодиодами кое-как написаны и кое-как работают.
3. Модуль LORA пока не пишем
4. От Вас нужна цена, сроки реализации и портфолио с Вашим кодом на подобную тематику
5. Бутлодер не нужен
Файлы
Отзывы
Всё сделано отлично. Благодарю Дмитрия за сотрудничество!
~ 4 года назад
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
 
~ 4 года назад