Add bootloader flag in the flash
This commit is contained in:
parent
ec086e2d47
commit
c0c42339f1
5 changed files with 17 additions and 2 deletions
|
@ -19,6 +19,7 @@ enum {
|
||||||
pid_p = 1,
|
pid_p = 1,
|
||||||
pid_i,
|
pid_i,
|
||||||
pid_d,
|
pid_d,
|
||||||
|
firmw,
|
||||||
foc_id,
|
foc_id,
|
||||||
angl,
|
angl,
|
||||||
vel
|
vel
|
||||||
|
@ -31,8 +32,8 @@ union{
|
||||||
}conv_float_to_int;
|
}conv_float_to_int;
|
||||||
|
|
||||||
#define FLASH_RECORD_SIZE sizeof(FLASH_RECORD) //size flash struct
|
#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
|
// Flash sectors for STM32F407
|
||||||
|
|
||||||
#define SECTOR_2 0x08008000 // 16KB
|
#define SECTOR_2 0x08008000 // 16KB
|
||||||
|
|
|
@ -17,6 +17,7 @@ void send_angle();
|
||||||
void send_motor_enabled();
|
void send_motor_enabled();
|
||||||
void send_motor_enabled();
|
void send_motor_enabled();
|
||||||
void send_id();
|
void send_id();
|
||||||
|
void firmware_update();
|
||||||
// void send_motor_torque();
|
// void send_motor_torque();
|
||||||
void send_pid(uint8_t param_pid);
|
void send_pid(uint8_t param_pid);
|
||||||
void setup_id(uint8_t my_id);
|
void setup_id(uint8_t my_id);
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#define MOTOR_ANGLE 0x72
|
#define MOTOR_ANGLE 0x72
|
||||||
#define MOTOR_TORQUE 0x73
|
#define MOTOR_TORQUE 0x73
|
||||||
|
|
||||||
|
#define FIRMWARE_UPDATE 0x55
|
||||||
|
|
||||||
//For send
|
//For send
|
||||||
#define CAN_MSG_MAX_LEN 7
|
#define CAN_MSG_MAX_LEN 7
|
||||||
|
|
|
@ -78,6 +78,7 @@ volatile uint32_t ipsr_value = 0;
|
||||||
// Настройка прерываний CAN
|
// Настройка прерываний CAN
|
||||||
CAN2->IER |= CAN_IER_FMPIE0;
|
CAN2->IER |= CAN_IER_FMPIE0;
|
||||||
flash_rec = load_params(); //for update write_ptr
|
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);
|
// write_param(addr_id,39);
|
||||||
// flash_rec = load_params();
|
// flash_rec = load_params();
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,11 @@ void setup_id(uint8_t my_id) {
|
||||||
write_param(addr_id,my_id);
|
write_param(addr_id,my_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void firmware_update(){
|
||||||
|
write_param(firmw,FIRMWARE_FLAG);
|
||||||
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
|
||||||
void setup_angle(float target_angle) {
|
void setup_angle(float target_angle) {
|
||||||
motor.enable(); // Enable motor if disabled
|
motor.enable(); // Enable motor if disabled
|
||||||
motor.controller = MotionControlType::angle;
|
motor.controller = MotionControlType::angle;
|
||||||
|
@ -142,6 +147,8 @@ void setup_pid_angle(uint8_t param_pid, float data){
|
||||||
write_param(param_pid,data);
|
write_param(param_pid,data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void listen_can(const CAN_message_t &msg) {
|
void listen_can(const CAN_message_t &msg) {
|
||||||
msg_id = msg.id;
|
msg_id = msg.id;
|
||||||
msg_ch = msg_id & 0xF; // Extract message channel
|
msg_ch = msg_id & 0xF; // Extract message channel
|
||||||
|
@ -204,6 +211,10 @@ void listen_can(const CAN_message_t &msg) {
|
||||||
write_param(pid_d,conv_float_to_int.i);
|
write_param(pid_d,conv_float_to_int.i);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FIRMWARE_UPDATE:
|
||||||
|
firmware_update();
|
||||||
|
break;
|
||||||
|
|
||||||
case MOTOR_ENABLED:
|
case MOTOR_ENABLED:
|
||||||
if (msg.buf[1] == 1) {
|
if (msg.buf[1] == 1) {
|
||||||
motor.enable();
|
motor.enable();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue