parent
537656520f
commit
d06336d5fe
|
@ -1,32 +0,0 @@
|
||||||
/*
|
|
||||||
* AMS_CAN.h
|
|
||||||
*
|
|
||||||
* Created on: Mar 19, 2022
|
|
||||||
* Author: jasper
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef INC_AMS_CAN_H_
|
|
||||||
#define INC_AMS_CAN_H_
|
|
||||||
|
|
||||||
#include "main.h"
|
|
||||||
|
|
||||||
#include "stm32h7xx_hal.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
void ams_can_init(CAN_HandleTypeDef* hcan);
|
|
||||||
|
|
||||||
void ams_can_send_status();
|
|
||||||
/**
|
|
||||||
* @brief Send an AMS Error via CAN.
|
|
||||||
*
|
|
||||||
* Data is taken from error_data
|
|
||||||
*/
|
|
||||||
void ams_can_send_error(uint8_t kind, uint8_t data[4]);
|
|
||||||
|
|
||||||
HAL_StatusTypeDef ams_can_wait_for_free_mailboxes(CAN_HandleTypeDef* handle,
|
|
||||||
int num_mailboxes,
|
|
||||||
uint32_t timeout);
|
|
||||||
void ams_can_send_log();
|
|
||||||
|
|
||||||
#endif /* INC_AMS_CAN_H_ */
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include "ADBMS_Abstraction.h"
|
#include "ADBMS_Abstraction.h"
|
||||||
#include "ADBMS_CMD_MAKROS.h"
|
#include "ADBMS_CMD_MAKROS.h"
|
||||||
#include "ADBMS_LL_Driver.h"
|
#include "ADBMS_LL_Driver.h"
|
||||||
#include "AMS_CAN.h"
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
|
@ -314,11 +314,12 @@ uint8 pollCMD(uint16 command) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcuAdbmsCSLow() {
|
void mcuAdbmsCSLow() {
|
||||||
HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_RESET);
|
//TODO: set right GPIO
|
||||||
|
//HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcuAdbmsCSHigh() {
|
void mcuAdbmsCSHigh() {
|
||||||
HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_SET);
|
//HAL_GPIO_WritePin(CSB_GPIO_Port, CSB_Pin, GPIO_PIN_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 mcuSPITransmit(uint8* buffer, uint8 buffersize) {
|
uint8 mcuSPITransmit(uint8* buffer, uint8 buffersize) {
|
||||||
|
|
|
@ -1,155 +0,0 @@
|
||||||
/*
|
|
||||||
* AMS_CAN.c
|
|
||||||
*
|
|
||||||
* Created on: Mar 19, 2022
|
|
||||||
* Author: jasper
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "AMS_CAN.h"
|
|
||||||
|
|
||||||
#include "ADBMS_Abstraction.h"
|
|
||||||
|
|
||||||
#include "AMS_HighLevel.h"
|
|
||||||
#include "DS18B20_HAL.h"
|
|
||||||
#include "TMP1075.h"
|
|
||||||
#include "common_defs.h"
|
|
||||||
#include "eeprom.h"
|
|
||||||
#include "errors.h"
|
|
||||||
#include "main.h"
|
|
||||||
#include "stm32f3xx.h"
|
|
||||||
#include "stm32h7xx_hal.h"
|
|
||||||
|
|
||||||
#include "can-halal.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define CAN_ID_SLAVE_PANIC 0x009
|
|
||||||
#define CAN_ID_SLAVE_CONFIG 0x00D
|
|
||||||
#define CAN_ID_SLAVE_STATUS_BASE 0x080
|
|
||||||
#define CAN_ID_SLAVE_LOG_BASE 0x600
|
|
||||||
|
|
||||||
void ams_can_init(CAN_HandleTypeDef* hcan) {
|
|
||||||
ftcan_init(hcan);
|
|
||||||
ftcan_add_filter(CAN_ID_SLAVE_CONFIG, 0x7FF);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ITER_COUNT 10
|
|
||||||
static uint8_t count = 0;
|
|
||||||
static bool isOn = false;
|
|
||||||
|
|
||||||
void ams_can_send_status() {
|
|
||||||
if (count == ITER_COUNT) {
|
|
||||||
HAL_GPIO_WritePin(LED1_G_GPIO_Port, LED1_G_Pin, isOn ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
|
||||||
HAL_GPIO_WritePin(LED1_B_GPIO_Port, LED1_B_Pin, isOn ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
count = 0;
|
|
||||||
isOn = !isOn;
|
|
||||||
} else {
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t data[8];
|
|
||||||
int error = error_sources != 0;
|
|
||||||
data[0] = eeprom_config.id | (error << 7);
|
|
||||||
data[1] = tmp1075_temps[30] >> 4; //PCB temp sensor
|
|
||||||
uint8_t* ptr = &data[2];
|
|
||||||
uint16_t min_volt = 0xFFFF; //TODO: voltage cast to unsigned
|
|
||||||
uint16_t max_volt = 0;
|
|
||||||
for (size_t i = 0; i < numberofCells; i++) {
|
|
||||||
if (module.cellVoltages[i] < min_volt) {
|
|
||||||
min_volt = module.cellVoltages[i];
|
|
||||||
}
|
|
||||||
if (module.cellVoltages[i] > max_volt) {
|
|
||||||
max_volt = module.cellVoltages[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ptr = ftcan_marshal_unsigned(ptr, min_volt, 2);
|
|
||||||
ptr = ftcan_marshal_unsigned(ptr, max_volt, 2);
|
|
||||||
int16_t max_temp = -0x8000;
|
|
||||||
for (size_t i = 0; i < eeprom_config.num_one_wire; i++) {
|
|
||||||
if (ds18b20_temps[i] > max_temp) {
|
|
||||||
max_temp = ds18b20_temps[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ftcan_marshal_unsigned(ptr, max_temp, 2);
|
|
||||||
uint16_t id = CAN_ID_SLAVE_STATUS_BASE | eeprom_config.id;
|
|
||||||
ftcan_transmit(id, data, sizeof(data));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ams_can_send_error(uint8_t kind, uint8_t data[4]) {
|
|
||||||
static uint8_t buf[6];
|
|
||||||
buf[0] = eeprom_config.id;
|
|
||||||
buf[1] = kind;
|
|
||||||
memcpy(&buf[2], data, 4);
|
|
||||||
ftcan_transmit(CAN_ID_SLAVE_PANIC, buf, sizeof(buf));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ams_can_send_log() {
|
|
||||||
static uint8_t call_count = 0;
|
|
||||||
static uint8_t data[8] = {};
|
|
||||||
|
|
||||||
uint16_t can_addr =
|
|
||||||
CAN_ID_SLAVE_LOG_BASE | (eeprom_config.id << 4) | call_count;
|
|
||||||
uint8_t* ptr = &data[0];
|
|
||||||
|
|
||||||
const size_t VOLTAGES_END_IDX = ((N_CELLS / 4) + ((N_CELLS % 4) ? 1 : 0));
|
|
||||||
const size_t FAILED_TEMP_SENSORS_IDX = VOLTAGES_END_IDX + 1;
|
|
||||||
const size_t TEMP_SENSORS_END_IDX = FAILED_TEMP_SENSORS_IDX + (N_TEMP_SENSORS / 8) + ((N_TEMP_SENSORS % 8) ? 1 : 0);
|
|
||||||
const size_t DS18B20_SENSORS_END_IDX = TEMP_SENSORS_END_IDX + (MAX_N_DS18B20_SENSORS / 8) + ((MAX_N_DS18B20_SENSORS % 8) ? 1 : 0);
|
|
||||||
|
|
||||||
if (call_count < VOLTAGES_END_IDX) {
|
|
||||||
for (size_t i = 0; i < 4; i++) {
|
|
||||||
if (call_count * 4 + i >= N_CELLS) {
|
|
||||||
ptr = ftcan_marshal_unsigned(ptr, 0xDEAD, 2); //pad with 0xAB
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
size_t offset = call_count * 4;
|
|
||||||
ptr = ftcan_marshal_unsigned(ptr, module.cellVoltages[offset + i], 2);
|
|
||||||
}
|
|
||||||
ftcan_transmit(can_addr, data, sizeof(data));
|
|
||||||
} else if (call_count < FAILED_TEMP_SENSORS_IDX) {
|
|
||||||
ptr = ftcan_marshal_unsigned(ptr, tmp1075_failed_sensors, 4);
|
|
||||||
ftcan_transmit(can_addr, data, 4);
|
|
||||||
} else if (call_count < TEMP_SENSORS_END_IDX) {
|
|
||||||
size_t offset = (call_count - FAILED_TEMP_SENSORS_IDX) * 8;
|
|
||||||
for (size_t i = 0; i < 8; i++) {
|
|
||||||
if (offset + i >= N_TEMP_SENSORS) {
|
|
||||||
data[i] = 0xAB;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
data[i] = tmp1075_temps[offset + i] >> 4;
|
|
||||||
}
|
|
||||||
ftcan_transmit(can_addr, data, sizeof(data));
|
|
||||||
} else {
|
|
||||||
size_t offset = (call_count - TEMP_SENSORS_END_IDX) * 8;
|
|
||||||
for (size_t i = 0; i < 8; i++) {
|
|
||||||
if (offset + i >= MAX_N_DS18B20_SENSORS) {
|
|
||||||
data[i] = 0xAB;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
data[i] = ds18b20_temps[offset + i] >> 4;
|
|
||||||
}
|
|
||||||
ftcan_transmit(can_addr, data, sizeof(data));
|
|
||||||
}
|
|
||||||
call_count = (call_count + 1) % (DS18B20_SENSORS_END_IDX);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
|
|
||||||
if (id == CAN_ID_SLAVE_CONFIG && datalen >= 2) {
|
|
||||||
uint8_t slave_id = data[0] & 0x0F;
|
|
||||||
if (slave_id != eeprom_config.id) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
uint8_t num_one_wire = data[1];
|
|
||||||
if (num_one_wire > MAX_N_DS18B20_SENSORS) {
|
|
||||||
num_one_wire = MAX_N_DS18B20_SENSORS;
|
|
||||||
}
|
|
||||||
eeprom_config.num_one_wire = num_one_wire;
|
|
||||||
eeprom_config.debug_log = !!(data[0] & 0x80);
|
|
||||||
// Can't directly call eeprom_config_save() here because that calls
|
|
||||||
// HAL_Delay() which requires timer interrupts, but we're in an interrupt
|
|
||||||
// handler
|
|
||||||
eeprom_config_dirty = true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,10 +8,6 @@
|
||||||
#include "AMS_HighLevel.h"
|
#include "AMS_HighLevel.h"
|
||||||
#include "ADBMS_Abstraction.h"
|
#include "ADBMS_Abstraction.h"
|
||||||
#include "ADBMS_LL_Driver.h"
|
#include "ADBMS_LL_Driver.h"
|
||||||
#include "AMS_CAN.h"
|
|
||||||
#include "DS18B20_HAL.h"
|
|
||||||
#include "TMP1075.h"
|
|
||||||
#include "can-halal.h"
|
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "stm32h7xx_hal.h"
|
#include "stm32h7xx_hal.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -120,7 +116,7 @@ uint8_t AMS_Idle_Loop() {
|
||||||
if (module.status.CS_FLT || module.status.SPIFLT || module.status.CMED ||
|
if (module.status.CS_FLT || module.status.SPIFLT || module.status.CMED ||
|
||||||
module.status.SMED || module.status.VDE || module.status.VDEL ||
|
module.status.SMED || module.status.VDE || module.status.VDEL ||
|
||||||
module.status.OSCCHK || module.status.TMODCHK) {
|
module.status.OSCCHK || module.status.TMODCHK) {
|
||||||
ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_FAULT].data[0], module.status.CS_FLT, 2);
|
//ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_FAULT].data[0], module.status.CS_FLT, 2);
|
||||||
const uint8_t* ptr = ((uint8_t*)&module.status) + 4; //skip conversion counter
|
const uint8_t* ptr = ((uint8_t*)&module.status) + 4; //skip conversion counter
|
||||||
error_data[SEK_INTERNAL_BMS_FAULT].data[2] = ptr[1];
|
error_data[SEK_INTERNAL_BMS_FAULT].data[2] = ptr[1];
|
||||||
error_data[SEK_INTERNAL_BMS_FAULT].data[3] = ptr[0];
|
error_data[SEK_INTERNAL_BMS_FAULT].data[3] = ptr[0];
|
||||||
|
@ -139,9 +135,7 @@ uint8_t AMS_Idle_Loop() {
|
||||||
set_error_source(SEK_INTERNAL_BMS_CHECKSUM_FAIL);
|
set_error_source(SEK_INTERNAL_BMS_CHECKSUM_FAIL);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp1075_measure();
|
//TODO: temperature measurement
|
||||||
DEBUG_LOGLINE_DS18B20
|
|
||||||
ds18b20_update();
|
|
||||||
|
|
||||||
bool overvolt = false;
|
bool overvolt = false;
|
||||||
bool undervolt = false;
|
bool undervolt = false;
|
||||||
|
@ -150,17 +144,17 @@ uint8_t AMS_Idle_Loop() {
|
||||||
undervolt = true;
|
undervolt = true;
|
||||||
error_data[SEK_UNDERVOLT].data[0] = i;
|
error_data[SEK_UNDERVOLT].data[0] = i;
|
||||||
uint8_t* ptr = &error_data[SEK_UNDERVOLT].data[1];
|
uint8_t* ptr = &error_data[SEK_UNDERVOLT].data[1];
|
||||||
ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2);
|
//ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2);
|
||||||
} else if (module.cellVoltages[i] > 4200) {
|
} else if (module.cellVoltages[i] > 4200) {
|
||||||
overvolt = true;
|
overvolt = true;
|
||||||
error_data[SEK_OVERVOLT].data[0] = i;
|
error_data[SEK_OVERVOLT].data[0] = i;
|
||||||
uint8_t* ptr = &error_data[SEK_OVERVOLT].data[1];
|
uint8_t* ptr = &error_data[SEK_OVERVOLT].data[1];
|
||||||
ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2);
|
//ftcan_marshal_unsigned(ptr, module.cellVoltages[i], 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (module.internalDieTemp > 28000 || module.status.THSD) { //TODO: change to correct value
|
if (module.internalDieTemp > 28000 || module.status.THSD) { //TODO: change to correct value
|
||||||
ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_OVERTEMP].data[0], module.internalDieTemp, 2);
|
//ftcan_marshal_unsigned(&error_data[SEK_INTERNAL_BMS_OVERTEMP].data[0], module.internalDieTemp, 2);
|
||||||
|
|
||||||
set_error_source(SEK_INTERNAL_BMS_OVERTEMP);
|
set_error_source(SEK_INTERNAL_BMS_OVERTEMP);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -45,13 +45,13 @@ void slaves_init() {
|
||||||
slaves[i].max_temp = 0;
|
slaves[i].max_temp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_GPIO_WritePin(SLAVE_POWER_0_GPIO_Port, SLAVE_POWER_0_Pin, GPIO_PIN_SET);
|
//HAL_GPIO_WritePin(SLAVE_POWER_0_GPIO_Port, SLAVE_POWER_0_Pin, GPIO_PIN_SET);
|
||||||
HAL_GPIO_WritePin(SLAVE_POWER_1_GPIO_Port, SLAVE_POWER_1_Pin, GPIO_PIN_SET);
|
//HAL_GPIO_WritePin(SLAVE_POWER_1_GPIO_Port, SLAVE_POWER_1_Pin, GPIO_PIN_SET);
|
||||||
HAL_GPIO_WritePin(SLAVE_POWER_DSEL_GPIO_Port, SLAVE_POWER_DSEL_Pin,
|
//HAL_GPIO_WritePin(SLAVE_POWER_DSEL_GPIO_Port, SLAVE_POWER_DSEL_Pin,
|
||||||
GPIO_PIN_RESET);
|
// GPIO_PIN_RESET);
|
||||||
// TODO: Enable & read out current
|
// TODO: Enable & read out current
|
||||||
HAL_GPIO_WritePin(SLAVE_POWER_DEN_GPIO_Port, SLAVE_POWER_DEN_Pin,
|
//HAL_GPIO_WritePin(SLAVE_POWER_DEN_GPIO_Port, SLAVE_POWER_DEN_Pin,
|
||||||
GPIO_PIN_RESET);
|
// GPIO_PIN_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
void slaves_check() {
|
void slaves_check() {
|
||||||
|
|
|
@ -0,0 +1,402 @@
|
||||||
|
#MicroXplorer Configuration settings - do not modify
|
||||||
|
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_10
|
||||||
|
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master
|
||||||
|
ADC1.NbrOfConversionFlag=1
|
||||||
|
ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
|
||||||
|
ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE
|
||||||
|
ADC1.Rank-0\#ChannelRegularConversion=1
|
||||||
|
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||||
|
ADC1.master=1
|
||||||
|
ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_10
|
||||||
|
ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,SingleDiff-0\#ChannelRegularConversion
|
||||||
|
ADC2.NbrOfConversionFlag=1
|
||||||
|
ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
|
||||||
|
ADC2.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE
|
||||||
|
ADC2.Rank-0\#ChannelRegularConversion=1
|
||||||
|
ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5
|
||||||
|
ADC2.SingleDiff-0\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
|
||||||
|
CAD.formats=[]
|
||||||
|
CAD.pinconfig=Dual
|
||||||
|
CAD.provider=
|
||||||
|
FDCAN1.CalculateBaudRateNominal=533333
|
||||||
|
FDCAN1.CalculateTimeBitNominal=1875
|
||||||
|
FDCAN1.CalculateTimeQuantumNominal=46.875
|
||||||
|
FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,StdFiltersNbr,NominalPrescaler,NominalTimeSeg1,NominalTimeSeg2,RxFifo0ElmtsNbr,TxFifoQueueElmtsNbr
|
||||||
|
FDCAN1.NominalPrescaler=2
|
||||||
|
FDCAN1.NominalTimeSeg1=31
|
||||||
|
FDCAN1.NominalTimeSeg2=8
|
||||||
|
FDCAN1.RxFifo0ElmtsNbr=16
|
||||||
|
FDCAN1.StdFiltersNbr=32
|
||||||
|
FDCAN1.TxFifoQueueElmtsNbr=32
|
||||||
|
File.Version=6
|
||||||
|
GPIO.groupedBy=Group By Peripherals
|
||||||
|
KeepUserPlacement=false
|
||||||
|
Mcu.CPN=STM32H7A3RIT6
|
||||||
|
Mcu.Family=STM32H7
|
||||||
|
Mcu.IP0=ADC1
|
||||||
|
Mcu.IP1=ADC2
|
||||||
|
Mcu.IP10=TIM15
|
||||||
|
Mcu.IP2=CORTEX_M7
|
||||||
|
Mcu.IP3=DEBUG
|
||||||
|
Mcu.IP4=FDCAN1
|
||||||
|
Mcu.IP5=NVIC
|
||||||
|
Mcu.IP6=RCC
|
||||||
|
Mcu.IP7=SPI1
|
||||||
|
Mcu.IP8=SPI2
|
||||||
|
Mcu.IP9=SYS
|
||||||
|
Mcu.IPNb=11
|
||||||
|
Mcu.Name=STM32H7A3R(G-I)Tx
|
||||||
|
Mcu.Package=LQFP64
|
||||||
|
Mcu.Pin0=PH0-OSC_IN
|
||||||
|
Mcu.Pin1=PH1-OSC_OUT
|
||||||
|
Mcu.Pin10=PA4
|
||||||
|
Mcu.Pin11=PA5
|
||||||
|
Mcu.Pin12=PA6
|
||||||
|
Mcu.Pin13=PA7
|
||||||
|
Mcu.Pin14=PC4
|
||||||
|
Mcu.Pin15=PC5
|
||||||
|
Mcu.Pin16=PB0
|
||||||
|
Mcu.Pin17=PB1
|
||||||
|
Mcu.Pin18=PB2
|
||||||
|
Mcu.Pin19=PB10
|
||||||
|
Mcu.Pin2=PC0
|
||||||
|
Mcu.Pin20=PB12
|
||||||
|
Mcu.Pin21=PB13
|
||||||
|
Mcu.Pin22=PB14
|
||||||
|
Mcu.Pin23=PB15
|
||||||
|
Mcu.Pin24=PC6
|
||||||
|
Mcu.Pin25=PC7
|
||||||
|
Mcu.Pin26=PC9
|
||||||
|
Mcu.Pin27=PA8
|
||||||
|
Mcu.Pin28=PA9
|
||||||
|
Mcu.Pin29=PA10
|
||||||
|
Mcu.Pin3=PC1
|
||||||
|
Mcu.Pin30=PA11
|
||||||
|
Mcu.Pin31=PA12
|
||||||
|
Mcu.Pin32=PA13
|
||||||
|
Mcu.Pin33=PA14
|
||||||
|
Mcu.Pin34=PA15
|
||||||
|
Mcu.Pin35=PB3
|
||||||
|
Mcu.Pin36=PB4
|
||||||
|
Mcu.Pin37=PB5
|
||||||
|
Mcu.Pin38=PB6
|
||||||
|
Mcu.Pin39=PB7
|
||||||
|
Mcu.Pin4=PC2
|
||||||
|
Mcu.Pin40=PB8
|
||||||
|
Mcu.Pin41=PB9
|
||||||
|
Mcu.Pin42=VP_SYS_VS_Systick
|
||||||
|
Mcu.Pin5=PC3
|
||||||
|
Mcu.Pin6=PA0
|
||||||
|
Mcu.Pin7=PA1
|
||||||
|
Mcu.Pin8=PA2
|
||||||
|
Mcu.Pin9=PA3
|
||||||
|
Mcu.PinsNb=43
|
||||||
|
Mcu.ThirdPartyNb=0
|
||||||
|
Mcu.UserConstants=
|
||||||
|
Mcu.UserName=STM32H7A3RITx
|
||||||
|
MxCube.Version=6.10.0
|
||||||
|
MxDb.Version=DB.6.0.100
|
||||||
|
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.FDCAN1_IT0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
|
NVIC.ForceEnableDMAVector=true
|
||||||
|
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||||
|
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||||
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
|
PA0.GPIOParameters=GPIO_Label
|
||||||
|
PA0.GPIO_Label=TS_ERROR
|
||||||
|
PA0.Locked=true
|
||||||
|
PA0.Signal=GPIO_Input
|
||||||
|
PA1.GPIOParameters=GPIO_Label
|
||||||
|
PA1.GPIO_Label=HV_ACTIVE
|
||||||
|
PA1.Locked=true
|
||||||
|
PA1.Signal=GPIO_Input
|
||||||
|
PA10.GPIOParameters=GPIO_Label
|
||||||
|
PA10.GPIO_Label=WAKE1
|
||||||
|
PA10.Locked=true
|
||||||
|
PA10.Signal=GPIO_Input
|
||||||
|
PA11.Locked=true
|
||||||
|
PA11.Mode=FDCAN_Activate
|
||||||
|
PA11.Signal=FDCAN1_RX
|
||||||
|
PA12.Locked=true
|
||||||
|
PA12.Mode=Full_Duplex_Master
|
||||||
|
PA12.Signal=SPI2_SCK
|
||||||
|
PA13.Locked=true
|
||||||
|
PA13.Mode=Trace_Asynchronous_SW
|
||||||
|
PA13.Signal=DEBUG_JTMS-SWDIO
|
||||||
|
PA14.Locked=true
|
||||||
|
PA14.Mode=Trace_Asynchronous_SW
|
||||||
|
PA14.Signal=DEBUG_JTCK-SWCLK
|
||||||
|
PA15.GPIOParameters=GPIO_Label
|
||||||
|
PA15.GPIO_Label=STATUS_LED_G
|
||||||
|
PA15.Locked=true
|
||||||
|
PA15.Signal=GPIO_Output
|
||||||
|
PA2.GPIOParameters=GPIO_Label
|
||||||
|
PA2.GPIO_Label=IMD_M
|
||||||
|
PA2.Locked=true
|
||||||
|
PA2.Signal=S_TIM15_CH1
|
||||||
|
PA3.GPIOParameters=GPIO_Label
|
||||||
|
PA3.GPIO_Label=IMD_OK
|
||||||
|
PA3.Locked=true
|
||||||
|
PA3.Signal=GPIO_Input
|
||||||
|
PA4.Locked=true
|
||||||
|
PA4.Mode=NSS_Signal_Hard_Output
|
||||||
|
PA4.Signal=SPI1_NSS
|
||||||
|
PA5.Locked=true
|
||||||
|
PA5.Mode=Full_Duplex_Master
|
||||||
|
PA5.Signal=SPI1_SCK
|
||||||
|
PA6.GPIOParameters=GPIO_Label
|
||||||
|
PA6.GPIO_Label=NEG_AIR_CLOSED
|
||||||
|
PA6.Locked=true
|
||||||
|
PA6.Signal=GPIO_Input
|
||||||
|
PA7.GPIOParameters=GPIO_Label
|
||||||
|
PA7.GPIO_Label=POS_AIR_CLOSED
|
||||||
|
PA7.Locked=true
|
||||||
|
PA7.Signal=GPIO_Input
|
||||||
|
PA8.GPIOParameters=GPIO_Label
|
||||||
|
PA8.GPIO_Label=PRECHARGE_CTRL
|
||||||
|
PA8.Locked=true
|
||||||
|
PA8.Signal=GPIO_Output
|
||||||
|
PA9.GPIOParameters=GPIO_Label
|
||||||
|
PA9.GPIO_Label=INTR1
|
||||||
|
PA9.Locked=true
|
||||||
|
PA9.Signal=GPIO_Input
|
||||||
|
PB0.GPIOParameters=GPIO_Label
|
||||||
|
PB0.GPIO_Label=PRECHARGE_CLOSED
|
||||||
|
PB0.Locked=true
|
||||||
|
PB0.Signal=GPIO_Input
|
||||||
|
PB1.GPIOParameters=GPIO_Label
|
||||||
|
PB1.GPIO_Label=SDC_VOLTAGE
|
||||||
|
PB1.Locked=true
|
||||||
|
PB1.Signal=GPIO_Input
|
||||||
|
PB10.GPIOParameters=GPIO_Label
|
||||||
|
PB10.GPIO_Label=IMD_ERROR_LED
|
||||||
|
PB10.Locked=true
|
||||||
|
PB10.Signal=GPIO_Input
|
||||||
|
PB12.Locked=true
|
||||||
|
PB12.Mode=NSS_Signal_Hard_Input
|
||||||
|
PB12.Signal=SPI2_NSS
|
||||||
|
PB13.GPIOParameters=GPIO_Label
|
||||||
|
PB13.GPIO_Label=AMS_ERROR_LED
|
||||||
|
PB13.Locked=true
|
||||||
|
PB13.Signal=GPIO_Input
|
||||||
|
PB14.Mode=Full_Duplex_Master
|
||||||
|
PB14.Signal=SPI2_MISO
|
||||||
|
PB15.GPIOParameters=GPIO_Label
|
||||||
|
PB15.GPIO_Label=STATUS_LED_R
|
||||||
|
PB15.Locked=true
|
||||||
|
PB15.Signal=GPIO_Output
|
||||||
|
PB2.GPIOParameters=GPIO_Label
|
||||||
|
PB2.GPIO_Label=IMD_POWER
|
||||||
|
PB2.Locked=true
|
||||||
|
PB2.Signal=GPIO_Output
|
||||||
|
PB3.Locked=true
|
||||||
|
PB3.Mode=Trace_Asynchronous_SW
|
||||||
|
PB3.Signal=DEBUG_JTDO-SWO
|
||||||
|
PB4.Locked=true
|
||||||
|
PB4.Mode=Full_Duplex_Master
|
||||||
|
PB4.Signal=SPI1_MISO
|
||||||
|
PB5.Locked=true
|
||||||
|
PB5.Mode=Full_Duplex_Master
|
||||||
|
PB5.Signal=SPI1_MOSI
|
||||||
|
PB6.GPIOParameters=GPIO_Label
|
||||||
|
PB6.GPIO_Label=INTR2
|
||||||
|
PB6.Locked=true
|
||||||
|
PB6.Signal=GPIO_Input
|
||||||
|
PB7.GPIOParameters=GPIO_Label
|
||||||
|
PB7.GPIO_Label=WAKE2
|
||||||
|
PB7.Locked=true
|
||||||
|
PB7.Signal=GPIO_Input
|
||||||
|
PB8.GPIOParameters=PinState,GPIO_PuPd,GPIO_Label
|
||||||
|
PB8.GPIO_Label=AMS_NERROR
|
||||||
|
PB8.GPIO_PuPd=GPIO_NOPULL
|
||||||
|
PB8.Locked=true
|
||||||
|
PB8.PinState=GPIO_PIN_SET
|
||||||
|
PB8.Signal=GPIO_Output
|
||||||
|
PB9.Locked=true
|
||||||
|
PB9.Mode=FDCAN_Activate
|
||||||
|
PB9.Signal=FDCAN1_TX
|
||||||
|
PC0.GPIOParameters=GPIO_Label
|
||||||
|
PC0.GPIO_Label=LV_Cmeasure
|
||||||
|
PC0.Locked=true
|
||||||
|
PC0.Signal=ADCx_INP10
|
||||||
|
PC1.GPIOParameters=GPIO_Label
|
||||||
|
PC1.GPIO_Label=TEMP_TSDCDC
|
||||||
|
PC1.Locked=true
|
||||||
|
PC1.Signal=SharedAnalog_PC1
|
||||||
|
PC2.GPIOParameters=GPIO_Label
|
||||||
|
PC2.GPIO_Label=STATUS_LED_B
|
||||||
|
PC2.Locked=true
|
||||||
|
PC2.Signal=GPIO_Output
|
||||||
|
PC3.Locked=true
|
||||||
|
PC3.Mode=Full_Duplex_Master
|
||||||
|
PC3.Signal=SPI2_MOSI
|
||||||
|
PC4.GPIOParameters=GPIO_Label
|
||||||
|
PC4.GPIO_Label=MSTR1
|
||||||
|
PC4.Locked=true
|
||||||
|
PC4.Signal=GPIO_Output
|
||||||
|
PC5.GPIOParameters=GPIO_Label
|
||||||
|
PC5.GPIO_Label=MSTR2
|
||||||
|
PC5.Locked=true
|
||||||
|
PC5.Signal=GPIO_Output
|
||||||
|
PC6.GPIOParameters=GPIO_Label
|
||||||
|
PC6.GPIO_Label=POS_AIR_CTRL
|
||||||
|
PC6.Locked=true
|
||||||
|
PC6.Signal=GPIO_Output
|
||||||
|
PC7.GPIOParameters=GPIO_Label
|
||||||
|
PC7.GPIO_Label=NEG_AIR_CTRL
|
||||||
|
PC7.Locked=true
|
||||||
|
PC7.Signal=GPIO_Output
|
||||||
|
PC9.GPIOParameters=GPIO_Label
|
||||||
|
PC9.GPIO_Label=TSAL_GREEN
|
||||||
|
PC9.Locked=true
|
||||||
|
PC9.Signal=GPIO_Input
|
||||||
|
PH0-OSC_IN.Locked=true
|
||||||
|
PH0-OSC_IN.Mode=HSE-External-Oscillator
|
||||||
|
PH0-OSC_IN.Signal=RCC_OSC_IN
|
||||||
|
PH1-OSC_OUT.Locked=true
|
||||||
|
PH1-OSC_OUT.Mode=HSE-External-Oscillator
|
||||||
|
PH1-OSC_OUT.Signal=RCC_OSC_OUT
|
||||||
|
PinOutPanel.RotationAngle=0
|
||||||
|
ProjectManager.AskForMigrate=true
|
||||||
|
ProjectManager.BackupPrevious=false
|
||||||
|
ProjectManager.CompilerOptimize=6
|
||||||
|
ProjectManager.ComputerToolchain=false
|
||||||
|
ProjectManager.CoupleFile=false
|
||||||
|
ProjectManager.CustomerFirmwarePackage=
|
||||||
|
ProjectManager.DefaultFWLocation=true
|
||||||
|
ProjectManager.DeletePrevious=true
|
||||||
|
ProjectManager.DeviceId=STM32H7A3RITx
|
||||||
|
ProjectManager.FirmwarePackage=STM32Cube FW_H7 V1.11.2
|
||||||
|
ProjectManager.FreePins=false
|
||||||
|
ProjectManager.HalAssertFull=false
|
||||||
|
ProjectManager.HeapSize=0x200
|
||||||
|
ProjectManager.KeepUserCode=true
|
||||||
|
ProjectManager.LastFirmware=true
|
||||||
|
ProjectManager.LibraryCopy=1
|
||||||
|
ProjectManager.MainLocation=Core/Src
|
||||||
|
ProjectManager.NoMain=false
|
||||||
|
ProjectManager.PreviousToolchain=
|
||||||
|
ProjectManager.ProjectBuild=false
|
||||||
|
ProjectManager.ProjectFileName=Master_FT25.ioc
|
||||||
|
ProjectManager.ProjectName=Master_FT25
|
||||||
|
ProjectManager.ProjectStructure=
|
||||||
|
ProjectManager.RegisterCallBack=
|
||||||
|
ProjectManager.StackSize=0x400
|
||||||
|
ProjectManager.TargetToolchain=Makefile
|
||||||
|
ProjectManager.ToolChainLocation=
|
||||||
|
ProjectManager.UAScriptAfterPath=
|
||||||
|
ProjectManager.UAScriptBeforePath=
|
||||||
|
ProjectManager.UnderRoot=false
|
||||||
|
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_FDCAN1_Init-FDCAN1-false-HAL-true,4-MX_TIM15_Init-TIM15-false-HAL-true,5-MX_SPI1_Init-SPI1-false-HAL-true,6-MX_SPI2_Init-SPI2-false-HAL-true,7-MX_ADC1_Init-ADC1-false-HAL-true,8-MX_ADC2_Init-ADC2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
|
||||||
|
RCC.ADCFreq_Value=42666666.666666664
|
||||||
|
RCC.AHB12Freq_Value=64000000
|
||||||
|
RCC.AHB4Freq_Value=64000000
|
||||||
|
RCC.APB1Freq_Value=64000000
|
||||||
|
RCC.APB2Freq_Value=64000000
|
||||||
|
RCC.APB3Freq_Value=64000000
|
||||||
|
RCC.APB4Freq_Value=64000000
|
||||||
|
RCC.AXIClockFreq_Value=64000000
|
||||||
|
RCC.CDCPREFreq_Value=64000000
|
||||||
|
RCC.CECFreq_Value=32000
|
||||||
|
RCC.CKPERFreq_Value=64000000
|
||||||
|
RCC.CortexFreq_Value=64000000
|
||||||
|
RCC.CpuClockFreq_Value=64000000
|
||||||
|
RCC.DAC1Freq_Value=32000
|
||||||
|
RCC.DAC2Freq_Value=32000
|
||||||
|
RCC.DFSDM2ACLkFreq_Value=64000000
|
||||||
|
RCC.DFSDM2Freq_Value=64000000
|
||||||
|
RCC.DFSDMACLkFreq_Value=64000000
|
||||||
|
RCC.DFSDMFreq_Value=64000000
|
||||||
|
RCC.DIVM1=1
|
||||||
|
RCC.DIVM2=1
|
||||||
|
RCC.DIVN1=8
|
||||||
|
RCC.DIVN2=8
|
||||||
|
RCC.DIVP1Freq_Value=64000000
|
||||||
|
RCC.DIVP2=3
|
||||||
|
RCC.DIVP2Freq_Value=42666666.666666664
|
||||||
|
RCC.DIVP3Freq_Value=32250000
|
||||||
|
RCC.DIVQ1Freq_Value=64000000
|
||||||
|
RCC.DIVQ2=3
|
||||||
|
RCC.DIVQ2Freq_Value=42666666.666666664
|
||||||
|
RCC.DIVQ3Freq_Value=32250000
|
||||||
|
RCC.DIVR1Freq_Value=64000000
|
||||||
|
RCC.DIVR2Freq_Value=64000000
|
||||||
|
RCC.DIVR3Freq_Value=32250000
|
||||||
|
RCC.FDCANCLockSelection=RCC_FDCANCLKSOURCE_PLL2
|
||||||
|
RCC.FDCANFreq_Value=42666666.666666664
|
||||||
|
RCC.FMCFreq_Value=64000000
|
||||||
|
RCC.FamilyName=M
|
||||||
|
RCC.HCLK3ClockFreq_Value=64000000
|
||||||
|
RCC.HCLKFreq_Value=64000000
|
||||||
|
RCC.HSE_VALUE=16000000
|
||||||
|
RCC.I2C123CLockSelection=RCC_I2C123CLKSOURCE_CSI
|
||||||
|
RCC.I2C123Freq_Value=4000000
|
||||||
|
RCC.I2C4Freq_Value=64000000
|
||||||
|
RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CDCPREFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,DAC1Freq_Value,DAC2Freq_Value,DFSDM2ACLkFreq_Value,DFSDM2Freq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANCLockSelection,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HSE_VALUE,I2C123CLockSelection,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI2AFreq_Value,SAI2BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
|
||||||
|
RCC.LPTIM1Freq_Value=64000000
|
||||||
|
RCC.LPTIM2Freq_Value=64000000
|
||||||
|
RCC.LPTIM345Freq_Value=64000000
|
||||||
|
RCC.LPUART1Freq_Value=64000000
|
||||||
|
RCC.LTDCFreq_Value=32250000
|
||||||
|
RCC.MCO1PinFreq_Value=64000000
|
||||||
|
RCC.MCO2PinFreq_Value=64000000
|
||||||
|
RCC.PLL2FRACN=0
|
||||||
|
RCC.PLLFRACN=0
|
||||||
|
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
|
||||||
|
RCC.QSPIFreq_Value=64000000
|
||||||
|
RCC.RNGFreq_Value=48000000
|
||||||
|
RCC.RTCFreq_Value=32000
|
||||||
|
RCC.SAI1Freq_Value=64000000
|
||||||
|
RCC.SAI2AFreq_Value=64000000
|
||||||
|
RCC.SAI2BFreq_Value=64000000
|
||||||
|
RCC.SDMMCFreq_Value=64000000
|
||||||
|
RCC.SPDIFRXFreq_Value=64000000
|
||||||
|
RCC.SPI123Freq_Value=64000000
|
||||||
|
RCC.SPI45Freq_Value=64000000
|
||||||
|
RCC.SPI6Freq_Value=64000000
|
||||||
|
RCC.SWPMI1Freq_Value=64000000
|
||||||
|
RCC.SYSCLKFreq_VALUE=64000000
|
||||||
|
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||||
|
RCC.Tim1OutputFreq_Value=64000000
|
||||||
|
RCC.Tim2OutputFreq_Value=64000000
|
||||||
|
RCC.TraceFreq_Value=64000000
|
||||||
|
RCC.USART16Freq_Value=64000000
|
||||||
|
RCC.USART234578Freq_Value=64000000
|
||||||
|
RCC.USBFreq_Value=64000000
|
||||||
|
RCC.VCO1OutputFreq_Value=128000000
|
||||||
|
RCC.VCO2OutputFreq_Value=128000000
|
||||||
|
RCC.VCO3OutputFreq_Value=64500000
|
||||||
|
RCC.VCOInput1Freq_Value=16000000
|
||||||
|
RCC.VCOInput2Freq_Value=16000000
|
||||||
|
RCC.VCOInput3Freq_Value=500000
|
||||||
|
SH.ADCx_INP10.0=ADC1_INP10,IN10-Single-Ended
|
||||||
|
SH.ADCx_INP10.1=ADC2_INP10,IN10-Differential
|
||||||
|
SH.ADCx_INP10.ConfNb=2
|
||||||
|
SH.S_TIM15_CH1.0=TIM15_CH1,PWM_Input_1
|
||||||
|
SH.S_TIM15_CH1.ConfNb=1
|
||||||
|
SH.SharedAnalog_PC1.0=ADC2_INP11
|
||||||
|
SH.SharedAnalog_PC1.1=ADC2_INN10,IN10-Differential
|
||||||
|
SH.SharedAnalog_PC1.ConfNb=2
|
||||||
|
SPI1.CalculateBaudRate=21.333332 MBits/s
|
||||||
|
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||||
|
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS
|
||||||
|
SPI1.Mode=SPI_MODE_MASTER
|
||||||
|
SPI1.VirtualNSS=VM_NSSHARD
|
||||||
|
SPI1.VirtualType=VM_MASTER
|
||||||
|
SPI2.CalculateBaudRate=21.333332 MBits/s
|
||||||
|
SPI2.Direction=SPI_DIRECTION_2LINES
|
||||||
|
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS
|
||||||
|
SPI2.Mode=SPI_MODE_MASTER
|
||||||
|
SPI2.VirtualNSS=VM_NSSHARD
|
||||||
|
SPI2.VirtualType=VM_MASTER
|
||||||
|
TIM15.IPParameters=Prescaler
|
||||||
|
TIM15.Prescaler=16000-1
|
||||||
|
VP_SYS_VS_Systick.Mode=SysTick
|
||||||
|
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
||||||
|
board=custom
|
Loading…
Reference in New Issue