Fix boot
This commit is contained in:
parent
31528a4a5b
commit
f1d922bd34
4 changed files with 19 additions and 25 deletions
|
@ -7,6 +7,8 @@
|
||||||
STM32_CAN Can(CAN2, DEF);
|
STM32_CAN Can(CAN2, DEF);
|
||||||
|
|
||||||
volatile bool fw_update = false;
|
volatile bool fw_update = false;
|
||||||
|
volatile bool app_valid = false;
|
||||||
|
|
||||||
volatile uint32_t fw_size = 0;
|
volatile uint32_t fw_size = 0;
|
||||||
volatile uint16_t fw_crc = 0;
|
volatile uint16_t fw_crc = 0;
|
||||||
volatile uint32_t jump;
|
volatile uint32_t jump;
|
||||||
|
@ -25,9 +27,7 @@ bool verify_firmware();
|
||||||
void send_ack(uint8_t status);
|
void send_ack(uint8_t status);
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
// Инициализация периферии
|
|
||||||
SystemInit();
|
|
||||||
SystemClock_Config();
|
|
||||||
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
||||||
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
@ -46,28 +46,25 @@ void setup() {
|
||||||
GPIOC->MODER |= GPIO_MODER_MODE10_0 | GPIO_MODER_MODE11_0;
|
GPIOC->MODER |= GPIO_MODER_MODE10_0 | GPIO_MODER_MODE11_0;
|
||||||
GPIOC->ODR &= ~GPIO_ODR_OD11;
|
GPIOC->ODR &= ~GPIO_ODR_OD11;
|
||||||
GPIOC->ODR |= GPIO_ODR_OD10;
|
GPIOC->ODR |= GPIO_ODR_OD10;
|
||||||
// // Проверка флага обновления
|
|
||||||
// erase_sector(7);
|
|
||||||
// flash_program_word(FLAG_BOOT,0xDEADBEEF,BYTE32);
|
|
||||||
// flash_record = load_params();
|
|
||||||
// write_param(firmw,UPDATE_FLAG);
|
|
||||||
flash_record = load_params();
|
flash_record = load_params();
|
||||||
// write_param(addr_id,33);
|
|
||||||
// flash_record = load_params();
|
|
||||||
/* Добавить проверку адреса, т.е во время отправки запроса прошивки по CAN
|
/* Добавить проверку адреса, т.е во время отправки запроса прошивки по CAN
|
||||||
мы сохраняем как флаг, так и аддрес устройства к которому будет обращатлься во
|
мы сохраняем как флаг, так и аддрес устройства к которому будет обращатлься во
|
||||||
время прошивки */
|
время прошивки */
|
||||||
|
|
||||||
if(flash_record[firmw].value == UPDATE_FLAG) {
|
if(flash_record[firmw].value == UPDATE_FLAG) {
|
||||||
fw_update = true;
|
fw_update = true;
|
||||||
for(int i = 0; i < 5;i++){
|
for(int i = 0; i < 5;i++){
|
||||||
GPIOC->ODR ^= GPIO_ODR_OD10; // Индикация обновления
|
GPIOC->ODR ^= GPIO_ODR_OD10; // Индикация обновления
|
||||||
delay(100);
|
delay(100);
|
||||||
}
|
}
|
||||||
|
write_param(firmw,0); //reset flasg
|
||||||
erase_flash_pages();
|
erase_flash_pages();
|
||||||
} else {
|
|
||||||
jump_to_app();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
jump_to_app();
|
||||||
|
|
||||||
GPIOC->ODR |= GPIO_ODR_OD10;
|
GPIOC->ODR |= GPIO_ODR_OD10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,13 +98,11 @@ void process_can_message(const CAN_message_t &msg) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case BOOT_CAN_END: // Завершение передачи
|
case BOOT_CAN_END: // Завершение передачи
|
||||||
if(verify_firmware()) {
|
if(verify_firmware()) {
|
||||||
send_ack(0xAA);
|
send_ack(0xAA);
|
||||||
HAL_Delay(500);
|
|
||||||
// erase_sector(7); // Сброс флага
|
|
||||||
write_param(firmw,0); //reset flasg
|
write_param(firmw,0); //reset flasg
|
||||||
|
// erase_sector(7); // Сброс флага
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
} else {
|
} else {
|
||||||
send_ack(0x55);
|
send_ack(0x55);
|
||||||
|
@ -156,7 +151,6 @@ void send_ack(uint8_t status) {
|
||||||
Can.write(ack);
|
Can.write(ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if(fw_update) {
|
if(fw_update) {
|
||||||
CAN_message_t msg;
|
CAN_message_t msg;
|
||||||
|
|
|
@ -7,6 +7,7 @@ debug_tool = stlink
|
||||||
monitor_speed = 19200
|
monitor_speed = 19200
|
||||||
monitor_parity = N
|
monitor_parity = N
|
||||||
|
|
||||||
|
board_upload.offset_address = 0x08008000
|
||||||
board_build.ldscript = ${PROJECT_DIR}/custom_script.ld
|
board_build.ldscript = ${PROJECT_DIR}/custom_script.ld
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
|
@ -14,7 +15,6 @@ build_flags =
|
||||||
-D HAL_CAN_MODULE_ENABLED
|
-D HAL_CAN_MODULE_ENABLED
|
||||||
-D SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
|
-D SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
|
||||||
|
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
askuric/Simple FOC@^2.3.4
|
askuric/Simple FOC@^2.3.4
|
||||||
pazi88/STM32_CAN@^1.1.2
|
pazi88/STM32_CAN@^1.1.2
|
||||||
|
|
|
@ -63,13 +63,13 @@ volatile uint32_t ipsr_value = 0;
|
||||||
|
|
||||||
void setup(){
|
void setup(){
|
||||||
// Vector table initialization (commented out)
|
// Vector table initialization (commented out)
|
||||||
SCB->VTOR = (uint32_t)0x08008004;
|
SCB->VTOR = (volatile uint32_t)0x08008004;
|
||||||
|
|
||||||
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
||||||
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
|
|
||||||
// pinMode(PC11, OUTPUT);
|
pinMode(PC11, OUTPUT);
|
||||||
pinMode(PC10,OUTPUT);
|
pinMode(PC10,OUTPUT);
|
||||||
GPIOC->ODR &= ~GPIO_ODR_OD10;
|
GPIOC->ODR &= ~GPIO_ODR_OD10;
|
||||||
// Can.enableMBInterrupts();
|
// Can.enableMBInterrupts();
|
||||||
|
@ -111,11 +111,12 @@ void loop() {
|
||||||
|
|
||||||
// // Process incoming CAN messages
|
// // Process incoming CAN messages
|
||||||
while (Can.read(msg)) {
|
while (Can.read(msg)) {
|
||||||
|
listen_can(msg);
|
||||||
CAN_GET = true;
|
CAN_GET = true;
|
||||||
}
|
}
|
||||||
/* If receive data from CAN */
|
/* If receive data from CAN */
|
||||||
if(CAN_GET) {
|
if(CAN_GET) {
|
||||||
listen_can(msg);
|
|
||||||
CAN_GET = false;
|
CAN_GET = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ static CAN_message_t CAN_inMsg;
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void send_can_with_id_crc(uint8_t id, uint8_t message_type, const T* data) {
|
void send_can_with_id_crc(uint8_t id, uint8_t message_type, T* data) {
|
||||||
// Create CAN message
|
// Create CAN message
|
||||||
CAN_message_t msg_l;
|
CAN_message_t msg_l;
|
||||||
msg_l.id = id;
|
msg_l.id = id;
|
||||||
|
@ -76,7 +76,6 @@ void send_id() {
|
||||||
|
|
||||||
uint8_t id = flash_rec[addr_id].value;
|
uint8_t id = flash_rec[addr_id].value;
|
||||||
send_can_with_id_crc(id,'I',&id);
|
send_can_with_id_crc(id,'I',&id);
|
||||||
__NOP();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// void send_motor_torque() {
|
// void send_motor_torque() {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue