uart для платы вэп + структурирован чуть проект и описан бутлоадер

Но надо еще его дорабатывать

+ заготовка для протокола приема (не работает скорее всего, просто из чатгпт вставил)
This commit is contained in:
2025-09-19 13:32:45 +03:00
parent 0e834dfe3d
commit c61c438b8c
12 changed files with 372 additions and 290 deletions

View File

@@ -5,7 +5,16 @@
extern CAN_HandleTypeDef hcan_boot;
extern CAN_TxHeaderTypeDef TxHeaderBoot;
extern CAN_RxHeaderTypeDef RxHeaderBoot;
extern uint32_t TxMailBoxBoot;
extern uint8_t TXDataBoot[8];
/* Инициализация CAN */
void MX_BOOT_CAN_Init(void);
/* Приём команды по CAN по протоколу */
BootloaderCommand_t Bootloader_CAN_Receive(Bootloader_t *bl);
/* Приём CAN: страница + CRC */
void Bootloader_CAN_Receive_Page(Bootloader_t *bl);
#endif //__BOOT_CAN_H

View File

@@ -32,20 +32,19 @@
// Макросы для включения тактирования периферии бутлоадера
#define __RCC_LED_BOOT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() // тактирование UART
#define __RCC_UART_BOOT_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE() // тактирование UART
#define __RCC_UART_PORT_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() // тактирование порта UART
#define __RCC_UART_BOOT_CLK_ENABLE() __HAL_RCC_UART4_CLK_ENABLE() // тактирование UART
#define __RCC_UART_PORT_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() // тактирование порта UART
#define __RCC_CAN_BOOT_CLK_ENABLE() __HAL_RCC_CAN1_CLK_ENABLE() // тактирование CAN
#define __RCC_CAN_PORT_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() // тактирование порта CAN
// ======================== UART defines ========================
// Аппаратный UART и скорость передачи
#define UART_BOOT USART3
#define UART_SPEED 256000
#define UART_BOOT_IRQn USART3_IRQn
#define UART_BOOT UART4
#define UART_SPEED 115200
// Порт и пины UART
#define UART_PORT GPIOB
#define UART_PORT GPIOC
#define UART_PIN_TX GPIO_PIN_10
#define UART_PIN_RX GPIO_PIN_11

View File

@@ -5,7 +5,11 @@
extern UART_HandleTypeDef huart_boot;
/* Инициализация UART */
void MX_BOOT_UART_Init(void);
/* Приём команды по UART по протоколу */
BootloaderCommand_t Bootloader_UART_Receive(Bootloader_t *bl);
/* Приём UART: страница + CRC */
void Bootloader_UART_Receive_Page(Bootloader_t *bl);
#endif //__BOOT_UART_H

View File

@@ -71,12 +71,14 @@
* @brief Команды для управления бутлоадером
*/
typedef enum {
NO_CMD = 0x00, ///< Нет комманды
CMD_ERASE = 0x01, ///< Команда на стирание прошивки
CMD_START_RECEIVE, ///< Команда на старт приема прошивки
CMD_WRITE, ///< Команда на запись блока прошивки
CMD_GOTOAPP, ///< Команда на переход в приложение
CMD_RESET, ///< Команда на переход в приложение
CMD_GOTOBOOT, ///< Команда на переход в приложение
CMD_PING = 0xAA, ///< Команда на пинг
}BootloaderCommand_t;
/**
@@ -108,6 +110,7 @@ typedef union {
unsigned erase_err:1; ///< Ошибка стирания
unsigned write_err:1; ///< Ошибка записи
unsigned verify_err:1; ///< Ошибка проверки прошивки
unsigned overflow:1; ///< Слишком много данных
unsigned timeout_receive:1; ///< Таймаут приёма
unsigned crc_err:1; ///< Ошибка CRC
} bit;
@@ -119,7 +122,7 @@ typedef union {
*/
typedef struct {
BootloaderState_t state; ///< текущее состояние бутлоадера
BootloaderError_t error;
BootloaderError_t error; ///< ошибки бутлоадера
uint32_t addr; ///< текущий адрес прошивки
@@ -141,5 +144,7 @@ void Bootloader_Task(Bootloader_t *bl);
void Boot_SystemClock_Config(void);
/* Хендлер ошибки */
void Error_Handler(void);
/* CRC */
uint32_t CRC32_Compute(const uint8_t* data, uint32_t length);
#endif //__BOOTLOADER_H