Написать bootloader для контроллера STM32L433CCT6

Задание закрыто
Стоимость:20 000 рублей
Срок выполнения:100 дней
Варианты оплаты:По договоренности
Дата публикации:2023-08-01 15:04
Обновлено:2023-12-22 22:04
Был на сайте:2024-03-12 00:53

Написать bootloader для контроллера STM32L433CCT6

 
Задача

Что именно нужно сделать:
Написать bootloader для контроллера STM32L433CCT6
Контроллер должен подключаться к компьютеру посредством USB порта. При подключении к компьютеру по USB в диспетчере устройств определяется как
USB\VID_0483&PID_5740&REV_0200
Описание устройства: ********* VIRTUAL COM PORT

Далее общается с софтом PWA и Web Serial API для получения прошивки.

Более подробную информацию лично подрядчику.

Оставлять заявки могут только авторизованные пользователи.
Миша Щукин
Специализация: Программирование и IT
  • 10 000 руб3 дня
Предтехничен
Умею:
Учетная архитектура, адресная проценка, маршрутная сортировка, объектная загрузка
Усерден, пунктуален, компетентен
Лука Кормильцев
Специализация: Программирование и IT
  • 20 000 руб20 дней
Уже оставил заявку на копии этого задания:

"Добрый день. Хотел бы получить более подробную информацию и оценить сложность задачи. Потенциально могу написать (на C или Zig, вероятно, со вставками ассемблера).

Контакт в Телеграме - @beggortal".

В случае готовности, выполню за 5000, т.к. понимаю, что новый аккаунт не выглядит привлекательно. Низкоуровневое программирование мой личный интерес и хобби, из опыта - писал ПО для DIY термостата.
Здравствуйте! Программирование загрузчика (bootloader) для микроконтроллера STM32L433CCT6 требует определенных знаний в области микроконтроллеров, USB-коммуникаций и разработки ПО. Ниже представлена общая структура bootloader'а для этой задачи. Это простой пример, и вам может потребоваться настроить его под ваши конкретные потребности.

#include "stm32l4xx.h"

#define APP_ADDRESS 0x08010000 // Адрес программы
#define PAGE_SIZE 0x400 // Размер страницы флеш-памяти

// Структура таблицы векторов
typedef struct
{
__IO uint32_t SP;
__IO uint32_t PC;
__IO uint32_t R1;
__IO uint32_t R2;
// ...
} VectorTable_TypeDef;

// Функция для переключения на пользовательскую программу
void JumpToApplication(uint32_t app_addr)
{
// Отключение прерываний
__disable_irq();

// Отключение системного таймера SysTick
SysTick->CTRL = 0;

// Загрузка адреса стека и указателя на код программы
VectorTable_TypeDef* app_vector_table = (VectorTable_TypeDef*)app_addr;
__set_MSP(app_vector_table->SP);
uint32_t app_entry_point = app_vector_table->PC;
void (*app)(void) = (void (*)(void))app_entry_point;

// Переключение контекста
SCB->VTOR = app_addr;
__DSB();
__ISB();

// Запуск пользовательской программы
app();
}

int main(void)
{
// Инициализация системы

// Проверка, необходимо ли перейти в режим загрузчика
if (/* Проверка условия для входа в режим загрузчика, например, через GPIO или по команде */)
{
// Запуск пользовательской программы, если условие не выполнено
JumpToApplication(APP_ADDRESS);
}

// Инициализация USB-коммуникаций

// Основной цикл обработки команд от компьютера
while (1)
{
// Проверка наличия команды от компьютера по USB

// Обработка команды (например, получение прошивки)

// Передача ответа компьютеру
}
}
12:05 29.09.23
Также обратите внимание, что обработка команд от компьютера и передача ответов требует разработки соответствующего протокола для вашей конкретной задачи. Этот пример только демонстрирует общую структуру загрузчика.
Александр Богомолов
Специализация: Программирование и IT
  • 20 000 руб100 дней
Смогу сделать за 30 дней
Матвей Игошев
Специализация: Программирование и IT
  • 20 000 руб100 дней
Приветствую Вас. Есть большой опыт в работе с STM32. Готов заняться этим проектом.

Оставлять заявки могут только авторизованные пользователи.