Fix CAN
This commit is contained in:
parent
147bad14bb
commit
bbdf967e6d
3 changed files with 33 additions and 11 deletions
|
@ -1,8 +1,8 @@
|
|||
#ifndef REG_CAH_H_
|
||||
#define REG_CAH_H_
|
||||
|
||||
#define APP_ADDR 0x08004000 // 16KB - Application
|
||||
#define ADDR_VAR 0x80400000
|
||||
#define APP_ADDR 0x0800400 // 16KB - Application
|
||||
#define ADDR_VAR 0x8040000
|
||||
#define ADDR_VAR_ID ADDR_VAR
|
||||
#define ADDR_VAR_P (ADDR_VAR + 1)
|
||||
#define ADDR_VAR_I (ADDR_VAR + 2)
|
||||
|
|
|
@ -18,10 +18,12 @@ upload_protocol = stlink
|
|||
debug_tool = stlink
|
||||
monitor_speed = 19200
|
||||
monitor_parity = N
|
||||
|
||||
build_flags =
|
||||
-DSTM32F446xx
|
||||
-D HAL_CAN_MODULE_ENABLED
|
||||
-D SIMPLEFOC_PWM_LOWSIDE_ACTIVE_HIGH
|
||||
|
||||
lib_deps =
|
||||
askuric/Simple FOC@^2.3.4
|
||||
pazi88/STM32_CAN@^1.1.2
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// clang-format off
|
||||
#include <Arduino.h>
|
||||
#include "stm32f446xx.h"
|
||||
#include <SimpleFOC.h>
|
||||
#include <STM32_CAN.h>
|
||||
#include <AS5045.h>
|
||||
|
@ -126,7 +127,8 @@ void send_motor_enabled() {
|
|||
}
|
||||
|
||||
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';
|
||||
memcpy(&CAN_TX_msg.buf[1], &motor_control_inputs.foc_state,
|
||||
sizeof(motor_control_inputs.foc_state));
|
||||
|
@ -135,13 +137,11 @@ Can.write(CAN_TX_msg);
|
|||
|
||||
void send_id() {
|
||||
/* data for reading of firmware */
|
||||
FLASH->KEYR = 0x45670123; // Первый ключ
|
||||
FLASH->KEYR = 0xCDEF89AB; // Второй ключ
|
||||
uint8_t id = *(volatile uint32_t*)ADDR_VAR_ID;
|
||||
FLASH->CR |= FLASH_CR_LOCK;
|
||||
|
||||
uint8_t id = *(volatile uint8_t*)ADDR_VAR_ID;
|
||||
CAN_TX_msg.id = 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) {
|
||||
|
@ -203,8 +203,8 @@ void send_data() {
|
|||
|
||||
|
||||
void listen_can() {
|
||||
uint8_t reg_id = CAN_inMsg.id;
|
||||
if (CAN_inMsg.buf[0] == *(volatile uint8_t*)ADDR_VAR_ID) {
|
||||
uint8_t reg_id = CAN_inMsg.buf[0]; //reg id
|
||||
if (CAN_inMsg.id == *(volatile uint8_t*)ADDR_VAR_ID) {
|
||||
if (CAN_inMsg.buf[1] == REG_WRITE) {
|
||||
switch (reg_id) {
|
||||
case REG_ID:
|
||||
|
@ -237,7 +237,22 @@ void listen_can() {
|
|||
case REG_ID:
|
||||
send_id();
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
@ -277,7 +292,8 @@ void foc_step(BLDCMotor *motor, Commander *commander) {
|
|||
|
||||
void setup() {
|
||||
/* bias for vector int */
|
||||
SCB->VTOR = APP_ADDR;
|
||||
//SCB->VTOR = 0x08004000;
|
||||
|
||||
|
||||
Serial.setRx(HARDWARE_SERIAL_RX_PIN);
|
||||
Serial.setTx(HARDWARE_SERIAL_TX_PIN);
|
||||
|
@ -294,6 +310,10 @@ void setup() {
|
|||
SendTimer->setOverflow(100, HERTZ_FORMAT); // 50 Hz
|
||||
SendTimer->attachInterrupt(send_data);
|
||||
SendTimer->resume();
|
||||
for(int i = 0;i < 10;i++){
|
||||
GPIOC->ODR ^= GPIO_ODR_OD10;
|
||||
HAL_Delay(1000);
|
||||
}
|
||||
setup_foc(&encoder, &motor, &driver, ¤t_sense, &command, doMotor);
|
||||
|
||||
/* Настройка параметров стирания */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue