This commit is contained in:
lulko 2025-03-11 17:49:50 +03:00
parent 147bad14bb
commit bbdf967e6d
3 changed files with 33 additions and 11 deletions

View file

@ -1,8 +1,8 @@
#ifndef REG_CAH_H_ #ifndef REG_CAH_H_
#define REG_CAH_H_ #define REG_CAH_H_
#define APP_ADDR 0x08004000 // 16KB - Application #define APP_ADDR 0x0800400 // 16KB - Application
#define ADDR_VAR 0x80400000 #define ADDR_VAR 0x8040000
#define ADDR_VAR_ID ADDR_VAR #define ADDR_VAR_ID ADDR_VAR
#define ADDR_VAR_P (ADDR_VAR + 1) #define ADDR_VAR_P (ADDR_VAR + 1)
#define ADDR_VAR_I (ADDR_VAR + 2) #define ADDR_VAR_I (ADDR_VAR + 2)

View file

@ -18,10 +18,12 @@ upload_protocol = stlink
debug_tool = stlink debug_tool = stlink
monitor_speed = 19200 monitor_speed = 19200
monitor_parity = N monitor_parity = N
build_flags = build_flags =
-DSTM32F446xx -DSTM32F446xx
-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

View file

@ -1,5 +1,6 @@
// clang-format off // clang-format off
#include <Arduino.h> #include <Arduino.h>
#include "stm32f446xx.h"
#include <SimpleFOC.h> #include <SimpleFOC.h>
#include <STM32_CAN.h> #include <STM32_CAN.h>
#include <AS5045.h> #include <AS5045.h>
@ -126,7 +127,8 @@ void send_motor_enabled() {
} }
void send_foc_state() { void send_foc_state() {
CAN_TX_msg.id = 1; uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
CAN_TX_msg.id = FOC_STATE;
CAN_TX_msg.buf[0] = 'F'; CAN_TX_msg.buf[0] = 'F';
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state, memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
sizeof(motor_control_inputs.foc_state)); sizeof(motor_control_inputs.foc_state));
@ -135,13 +137,11 @@ Can.write(CAN_TX_msg);
void send_id() { void send_id() {
/* data for reading of firmware */ /* data for reading of firmware */
FLASH->KEYR = 0x45670123; // Первый ключ
FLASH->KEYR = 0xCDEF89AB; // Второй ключ uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
uint8_t id = *(volatile uint32_t*)ADDR_VAR_ID;
FLASH->CR |= FLASH_CR_LOCK;
CAN_TX_msg.id = id; CAN_TX_msg.id = id;
memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id)); memcpy(&CAN_TX_msg.buf[0], &id, sizeof(id));
Can.write(CAN_TX_msg); Can.write(CAN_TX_msg);
} }
void setup_id(uint8_t my_id) { void setup_id(uint8_t my_id) {
@ -203,8 +203,8 @@ void send_data() {
void listen_can() { void listen_can() {
uint8_t reg_id = CAN_inMsg.id; uint8_t reg_id = CAN_inMsg.buf[0]; //reg id
if (CAN_inMsg.buf[0] == *(volatile uint8_t*)ADDR_VAR_ID) { if (CAN_inMsg.id == *(volatile uint8_t*)ADDR_VAR_ID) {
if (CAN_inMsg.buf[1] == REG_WRITE) { if (CAN_inMsg.buf[1] == REG_WRITE) {
switch (reg_id) { switch (reg_id) {
case REG_ID: case REG_ID:
@ -237,7 +237,22 @@ void listen_can() {
case REG_ID: case REG_ID:
send_id(); send_id();
break; break;
case MOTOR_VELOCITY:
send_velocity();
break;
case MOTOR_ANGLE:
send_angle();
break;
case MOTOR_ENABLED:
send_motor_enabled();
break;
case FOC_STATE:
send_foc_state();
break;
default: default:
break; break;
} }
@ -277,7 +292,8 @@ void foc_step(BLDCMotor *motor, Commander *commander) {
void setup() { void setup() {
/* bias for vector int */ /* bias for vector int */
SCB->VTOR = APP_ADDR; //SCB->VTOR = 0x08004000;
Serial.setRx(HARDWARE_SERIAL_RX_PIN); Serial.setRx(HARDWARE_SERIAL_RX_PIN);
Serial.setTx(HARDWARE_SERIAL_TX_PIN); Serial.setTx(HARDWARE_SERIAL_TX_PIN);
@ -294,6 +310,10 @@ void setup() {
SendTimer->setOverflow(100, HERTZ_FORMAT); // 50 Hz SendTimer->setOverflow(100, HERTZ_FORMAT); // 50 Hz
SendTimer->attachInterrupt(send_data); SendTimer->attachInterrupt(send_data);
SendTimer->resume(); SendTimer->resume();
for(int i = 0;i < 10;i++){
GPIOC->ODR ^= GPIO_ODR_OD10;
HAL_Delay(1000);
}
setup_foc(&encoder, &motor, &driver, &current_sense, &command, doMotor); setup_foc(&encoder, &motor, &driver, &current_sense, &command, doMotor);
/* Настройка параметров стирания */ /* Настройка параметров стирания */