Add bootloader flag in the flash

This commit is contained in:
Valentin Dabstep 2025-05-23 09:10:51 +03:00
parent ec086e2d47
commit c0c42339f1
5 changed files with 17 additions and 2 deletions

View file

@ -19,6 +19,7 @@ enum {
pid_p = 1,
pid_i,
pid_d,
firmw,
foc_id,
angl,
vel
@ -31,8 +32,8 @@ union{
}conv_float_to_int;
#define FLASH_RECORD_SIZE sizeof(FLASH_RECORD) //size flash struct
#define PARAM_COUNT 4 // count data in flash
#define PARAM_COUNT 5 // count data in flash
#define FIRMWARE_FLAG (uint32_t)0xDEADBEEF
// Flash sectors for STM32F407
#define SECTOR_2 0x08008000 // 16KB

View file

@ -17,6 +17,7 @@ void send_angle();
void send_motor_enabled();
void send_motor_enabled();
void send_id();
void firmware_update();
// void send_motor_torque();
void send_pid(uint8_t param_pid);
void setup_id(uint8_t my_id);

View file

@ -37,6 +37,7 @@
#define MOTOR_ANGLE 0x72
#define MOTOR_TORQUE 0x73
#define FIRMWARE_UPDATE 0x55
//For send
#define CAN_MSG_MAX_LEN 7

View file

@ -78,6 +78,7 @@ volatile uint32_t ipsr_value = 0;
// Настройка прерываний CAN
CAN2->IER |= CAN_IER_FMPIE0;
flash_rec = load_params(); //for update write_ptr
if(flash_rec[firmw].value == FIRMWARE_FLAG) NVIC_SystemReset(); //if in flash go to the bootloader
// write_param(addr_id,39);
// flash_rec = load_params();

View file

@ -118,6 +118,11 @@ void setup_id(uint8_t my_id) {
write_param(addr_id,my_id);
}
void firmware_update(){
write_param(firmw,FIRMWARE_FLAG);
NVIC_SystemReset();
}
void setup_angle(float target_angle) {
motor.enable(); // Enable motor if disabled
motor.controller = MotionControlType::angle;
@ -142,6 +147,8 @@ void setup_pid_angle(uint8_t param_pid, float data){
write_param(param_pid,data);
}
void listen_can(const CAN_message_t &msg) {
msg_id = msg.id;
msg_ch = msg_id & 0xF; // Extract message channel
@ -203,6 +210,10 @@ void listen_can(const CAN_message_t &msg) {
conv_float_to_int.f = motor.P_angle.D;
write_param(pid_d,conv_float_to_int.i);
break;
case FIRMWARE_UPDATE:
firmware_update();
break;
case MOTOR_ENABLED:
if (msg.buf[1] == 1) {