With bootloader
This commit is contained in:
parent
b5ff05bed6
commit
023026987c
8 changed files with 312 additions and 141 deletions
|
@ -165,19 +165,24 @@ void write_param(uint8_t param_id, uint8_t val){
|
|||
__disable_irq();
|
||||
flash_write(write_ptr,¶m_flash);
|
||||
write_ptr += FLASH_RECORD_SIZE;
|
||||
flash_program_word(SECTOR_7 - sizeof(uint32_t),write_ptr,0);
|
||||
// flash_program_word(SECTOR_7 - sizeof(uint32_t),write_ptr,0);
|
||||
}
|
||||
|
||||
FLASH_RECORD* load_params(){
|
||||
__disable_irq();
|
||||
static FLASH_RECORD latest[PARAM_COUNT] = {0};
|
||||
FLASH_RECORD res;
|
||||
for(uint32_t addr = SECTOR_6;addr < SECTOR_7;addr +=FLASH_RECORD_SIZE) {
|
||||
for(uint32_t addr = SECTOR_6;addr < SECTOR_6_END;addr +=FLASH_RECORD_SIZE) {
|
||||
flash_read(addr,&res);
|
||||
if (validate_crc(&res))
|
||||
if (!validate_crc(&res))
|
||||
break;
|
||||
else{
|
||||
latest[res.data_id] = res;
|
||||
|
||||
write_ptr = addr;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
__enable_irq();
|
||||
return latest;
|
||||
}
|
|
@ -103,7 +103,7 @@ void setup_foc(MagneticSensorAS5045 *encoder, BLDCMotor *motor,
|
|||
|
||||
void send_velocity() {
|
||||
float current_velocity = motor.shaftVelocity();
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
|
||||
CAN_TX_msg.id = id;
|
||||
CAN_TX_msg.buf[0] = 'V';
|
||||
CAN_TX_msg.len = 5;
|
||||
|
@ -113,7 +113,7 @@ void send_velocity() {
|
|||
|
||||
void send_angle() {
|
||||
float current_angle = motor.shaftAngle();
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
|
||||
CAN_TX_msg.id = id;
|
||||
CAN_TX_msg.buf[0] = 'A';
|
||||
CAN_TX_msg.len = 5;
|
||||
|
@ -122,7 +122,7 @@ void send_angle() {
|
|||
}
|
||||
|
||||
void send_motor_enabled() {
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
|
||||
CAN_TX_msg.id = id;
|
||||
CAN_TX_msg.buf[0] = 'E';
|
||||
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.motor_enabled,
|
||||
|
@ -131,7 +131,7 @@ void send_motor_enabled() {
|
|||
}
|
||||
|
||||
void send_foc_state() {
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
|
||||
CAN_TX_msg.id = id;
|
||||
CAN_TX_msg.buf[0] = 'F';
|
||||
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
|
||||
|
@ -142,7 +142,7 @@ Can.write(CAN_TX_msg);
|
|||
void send_id() {
|
||||
/* data for reading of firmware */
|
||||
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR;
|
||||
CAN_TX_msg.id = id;
|
||||
CAN_TX_msg.buf[0] = 'I';
|
||||
memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id));
|
||||
|
@ -195,9 +195,7 @@ void send_data() {
|
|||
|
||||
|
||||
void listen_can() {
|
||||
flash_rec = load_params();
|
||||
for(int i = 0;i < PARAM_COUNT;i++)
|
||||
flash_buf[i] = flash_rec[i];
|
||||
|
||||
uint8_t reg_id = CAN_inMsg.buf[0]; //reg id
|
||||
if (CAN_inMsg.id == flash_buf[addr_id].value) {
|
||||
if (CAN_inMsg.buf[1] == REG_WRITE) {
|
||||
|
@ -316,6 +314,9 @@ void setup() {
|
|||
pEraseInit.Sector = ADDR_VAR; // Начальная страница
|
||||
pEraseInit.NbSectors = 1;
|
||||
pEraseInit.VoltageRange = VOLTAGE_RANGE_3;*/
|
||||
flash_rec = load_params();
|
||||
for(int i = 0;i < PARAM_COUNT;i++)
|
||||
flash_buf[i] = flash_rec[i];
|
||||
}
|
||||
void loop() {
|
||||
foc_step(&motor, &command);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue