Working version

This commit is contained in:
jazzpi 2022-07-18 16:54:42 +02:00
parent b49ac54166
commit 7795a7cd7d
25 changed files with 40462 additions and 19931 deletions

File diff suppressed because one or more lines are too long

View File

@ -18,9 +18,12 @@
#define TS_DISCHARGE 3
#define TS_ERROR 4
#define TS_ACTIVE 1
#define TS_CHARGING_CHECK 5
#define TS_CHARGING 6
#define ADC_READ_TIMEOUT 500 // in ms
#define SDC_LOWER_THRESHOLD 2500 // in ADC Values
#define ADC_READ_TIMEOUT 500 // in ms
#define SDC_LOWER_THRESHOLD 2500 // in ADC Values
#define PRECHARGE_95_DURATION 1000 // in ms
// FIXME
#define LOWER_VEHICLE_SIDE_VOLTAGE_LIMIT 150000 // in mV
@ -30,18 +33,12 @@ typedef struct {
int32_t BatteryVoltageBatterySide;
uint8_t targetTSState;
uint8_t currentTSState;
uint16_t AIRPrechargeCurrent; // ADC Value
uint16_t AIRPositiveCurrent; // ADC Value
uint16_t AIRNegativeCurrent; // ADC Value
uint16_t RelaisSupplyVoltage;
uint16_t ShutdownCircuitVoltage;
uint32_t precharge95ReachedTimestamp;
uint32_t chargingCheckTimestamp;
} AIRStateHandler;
AIRStateHandler init_AIR_State_Maschine(ADC_HandleTypeDef* relay_adc,
ADC_HandleTypeDef* sc_adc,
DMA_HandleTypeDef* relay_dma,
DMA_HandleTypeDef* sc_dma);
AIRStateHandler init_AIR_State_Maschine();
void Update_AIR_Info(AIRStateHandler* airstate);
uint8_t Update_AIR_State(AIRStateHandler* airstate);
@ -54,6 +51,4 @@ void AIR_Discharge_Position();
void AIR_Active_Position();
void AIR_Error_Position();
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);
#endif /* INC_AIR_STATE_MASCHINE_H_ */

View File

@ -15,7 +15,7 @@
#include "stm32g4xx_hal.h"
#include "stm32g4xx_hal_fdcan.h"
#define CANFRAMEBUFFERSIZE 256
#define CANFRAMEBUFFERSIZE 512
// Frame ID = Base Address + Slave ID + MessageNr.
#define SLAVE_STATUS_BASE_ADDRESS 0x600

View File

@ -14,7 +14,6 @@
#include "stm32g4xx_hal_crc.h"
#define SET_SHUNTDATA 0x01
#define SET_TSSTATE 0x02
#define GET_TSSTATE 0x03

View File

@ -14,12 +14,11 @@
#include "stm32g441xx.h"
#define NUMBEROFSLAVES 6
#define NUMBEROFCELLS 10
#define NUMBEROFTEMPS 32
#define SLAVETIMEOUT 2000
#define SLAVETIMEOUT 500
typedef struct {

View File

@ -67,42 +67,14 @@ void AMS_Error_Handler(AMSErrorHandle);
#define BOOT0_FF_CLK_GPIO_Port GPIOC
#define BOOT0_FF_DATA_Pin GPIO_PIN_15
#define BOOT0_FF_DATA_GPIO_Port GPIOC
#define Relay_Supply_Voltage_Pin GPIO_PIN_0
#define Relay_Supply_Voltage_GPIO_Port GPIOA
#define Pos_AIR_Current_Pin GPIO_PIN_1
#define Pos_AIR_Current_GPIO_Port GPIOA
#define Neg_AIR_Current_Pin GPIO_PIN_2
#define Neg_AIR_Current_GPIO_Port GPIOA
#define PreCharge_AIR_Current_Pin GPIO_PIN_3
#define PreCharge_AIR_Current_GPIO_Port GPIOA
#define SC_Supply_Voltage_Pin GPIO_PIN_4
#define SC_Supply_Voltage_GPIO_Port GPIOA
#define AMS_ERROR_Pin GPIO_PIN_0
#define AMS_ERROR_GPIO_Port GPIOB
#define IMD_Error_Pin GPIO_PIN_1
#define IMD_Error_GPIO_Port GPIOB
#define AMS_Error_LED_Pin GPIO_PIN_2
#define AMS_Error_LED_GPIO_Port GPIOB
#define Volt_Error_CPU_Pin GPIO_PIN_10
#define Volt_Error_CPU_GPIO_Port GPIOB
#define Positive_Side_Error_CPU_Pin GPIO_PIN_11
#define Positive_Side_Error_CPU_GPIO_Port GPIOB
#define Neg_Side_Error_CPU_Pin GPIO_PIN_12
#define Neg_Side_Error_CPU_GPIO_Port GPIOB
#define HV_Inactive_CPU_Pin GPIO_PIN_13
#define HV_Inactive_CPU_GPIO_Port GPIOB
#define Neg_AIR_Open_CPU_Pin GPIO_PIN_14
#define Neg_AIR_Open_CPU_GPIO_Port GPIOB
#define High_Side_Open_CPU_Pin GPIO_PIN_15
#define High_Side_Open_CPU_GPIO_Port GPIOB
#define Inter_STM_CS_Pin GPIO_PIN_8
#define Inter_STM_CS_GPIO_Port GPIOA
#define Inter_STM_IRQ_Pin GPIO_PIN_9
#define Inter_STM_IRQ_GPIO_Port GPIOA
#define Status_LED_Pin GPIO_PIN_10
#define Status_LED_GPIO_Port GPIOA
#define IMD_Error_LED_Pin GPIO_PIN_3
#define IMD_Error_LED_GPIO_Port GPIOB
#define PreCharge_Control_Pin GPIO_PIN_5
#define PreCharge_Control_GPIO_Port GPIOB
#define AIR_Positive_Control_Pin GPIO_PIN_6

View File

@ -36,7 +36,7 @@
#define HAL_MODULE_ENABLED
#define HAL_ADC_MODULE_ENABLED
/*#define HAL_ADC_MODULE_ENABLED */
/*#define HAL_COMP_MODULE_ENABLED */
/*#define HAL_CORDIC_MODULE_ENABLED */
#define HAL_CRC_MODULE_ENABLED

View File

@ -56,12 +56,9 @@ void SVC_Handler(void);
void DebugMon_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void DMA1_Channel2_IRQHandler(void);
void ADC1_2_IRQHandler(void);
void FDCAN1_IT0_IRQHandler(void);
void FDCAN1_IT1_IRQHandler(void);
void SPI1_IRQHandler(void);
void DMA2_Channel1_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

View File

@ -7,8 +7,7 @@
#include "AIR_State_Maschine.h"
ADC_HandleTypeDef* air_current_adc = {0};
ADC_HandleTypeDef* sdc_voltage_adc = {0};
#include "stm32g4xx_hal.h"
DMA_HandleTypeDef* air_current_dma = {0};
DMA_HandleTypeDef* sdc_voltage_dma = {0};
@ -16,25 +15,11 @@ DMA_HandleTypeDef* sdc_voltage_dma = {0};
uint8_t air_adc_complete = 0;
uint8_t sdc_adc_complete = 0;
AIRStateHandler init_AIR_State_Maschine(ADC_HandleTypeDef* relay_adc,
ADC_HandleTypeDef* sc_adc,
DMA_HandleTypeDef* relay_dma,
DMA_HandleTypeDef* sc_dma) {
air_current_adc = relay_adc;
sdc_voltage_adc = sc_adc;
air_current_dma = relay_dma;
sdc_voltage_dma = sc_dma;
AIRStateHandler init_AIR_State_Maschine() {
AIRStateHandler airstate = {0};
airstate.targetTSState = TS_INACTIVE;
airstate.currentTSState = TS_INACTIVE;
airstate.ShutdownCircuitVoltage = 0;
airstate.RelaisSupplyVoltage = 0;
airstate.AIRNegativeCurrent = 0;
airstate.AIRPositiveCurrent = 0;
airstate.AIRPrechargeCurrent = 0;
airstate.BatteryVoltageBatterySide = 0;
airstate.BatteryVoltageVehicleSide = 0;
@ -65,16 +50,6 @@ void Update_AIR_Info(AIRStateHandler* airstate) {
status = HAL_ADC_PollForConversion(air_current_adc, 10);
uint32_t adcval5 = HAL_ADC_GetValue(air_current_adc);
HAL_ADC_Stop(air_current_adc);*/
uint32_t startmils = HAL_GetTick() + ADC_READ_TIMEOUT;
{
airstate->RelaisSupplyVoltage = 3000;
airstate->AIRPositiveCurrent = 0;
airstate->AIRNegativeCurrent = 0;
airstate->AIRPrechargeCurrent = 0;
airstate->ShutdownCircuitVoltage = 3000;
}
}
uint8_t Update_AIR_State(AIRStateHandler* airstate) {
@ -91,25 +66,7 @@ uint8_t Update_AIR_State(AIRStateHandler* airstate) {
if (airstate->currentTSState == TS_ERROR) // No Escape from TS Error State
{
return TS_ERROR;
}
else if ((airstate->currentTSState == TS_INACTIVE) &&
(airstate->targetTSState ==
TS_ACTIVE)) // Transition from Inactive to Active via Precharge
{
if ((airstate->RelaisSupplyVoltage) > SDC_LOWER_THRESHOLD) {
airstate->currentTSState = TS_PRECHARGE;
}
}
// TODO: Is it correct that we also go from precharge to discharge?
else if ((airstate->currentTSState == TS_ACTIVE ||
airstate->currentTSState == TS_PRECHARGE) &&
(airstate->targetTSState ==
TS_INACTIVE)) // Transition from Active to Inactive via Discharge
{
airstate->currentTSState = TS_DISCHARGE;
// Don't change anything, but prevent any other if from being entered
}
else if (airstate->targetTSState ==
@ -118,6 +75,41 @@ uint8_t Update_AIR_State(AIRStateHandler* airstate) {
airstate->currentTSState = TS_ERROR;
}
else if ((airstate->currentTSState == TS_INACTIVE) &&
(airstate->targetTSState ==
TS_ACTIVE)) // Transition from Inactive to Active via Precharge
{
airstate->currentTSState = TS_PRECHARGE;
airstate->precharge95ReachedTimestamp = 0;
}
else if ((airstate->currentTSState == TS_INACTIVE) &&
(airstate->targetTSState == TS_CHARGING)) {
airstate->currentTSState = TS_CHARGING_CHECK;
airstate->chargingCheckTimestamp = HAL_GetTick();
}
// TODO: Is it correct that we also go from precharge to discharge?
else if ((airstate->currentTSState == TS_ACTIVE ||
airstate->currentTSState == TS_PRECHARGE ||
airstate->currentTSState == TS_CHARGING_CHECK ||
airstate->currentTSState == TS_CHARGING) &&
(airstate->targetTSState ==
TS_INACTIVE)) // Transition from Active to Inactive via Discharge
{
airstate->currentTSState = TS_DISCHARGE;
}
else if ((airstate->targetTSState == TS_CHARGING) &&
(airstate->currentTSState == TS_CHARGING_CHECK)) {
if (airstate->BatteryVoltageVehicleSide >
airstate->BatteryVoltageBatterySide) {
airstate->currentTSState = TS_CHARGING;
} else if (HAL_GetTick() > airstate->chargingCheckTimestamp + 2000) {
airstate->currentTSState = TS_ERROR;
}
}
else if (airstate->currentTSState ==
TS_PRECHARGE) // Change from Precharge to Active at 95% TS Voltage at
// Vehicle Side
@ -125,15 +117,20 @@ uint8_t Update_AIR_State(AIRStateHandler* airstate) {
if ((airstate->BatteryVoltageVehicleSide >
LOWER_VEHICLE_SIDE_VOLTAGE_LIMIT)) {
if (airstate->BatteryVoltageVehicleSide >
(airstate->BatteryVoltageBatterySide * 0.90)) {
airstate->currentTSState = TS_ACTIVE;
(airstate->BatteryVoltageBatterySide * 0.95)) {
if (airstate->precharge95ReachedTimestamp == 0) {
airstate->precharge95ReachedTimestamp = HAL_GetTick();
} else if (HAL_GetTick() - airstate->precharge95ReachedTimestamp >=
PRECHARGE_95_DURATION) {
airstate->currentTSState = TS_ACTIVE;
}
}
}
}
else if (airstate->currentTSState ==
TS_DISCHARGE) // Change from Discharge to Inactive at 95% TS Voltage
// at Vehicle Side
TS_DISCHARGE) // Change from Discharge to Inactive at 95% TS
// Voltage at Vehicle Side
{
airstate->currentTSState = TS_INACTIVE;
}
@ -149,6 +146,14 @@ uint8_t Update_AIR_State(AIRStateHandler* airstate) {
AIR_Discharge_Position();
}
if (airstate->currentTSState == TS_CHARGING_CHECK) {
AIR_Precharge_Position();
}
if (airstate->currentTSState == TS_CHARGING) {
AIR_Active_Position();
}
if (airstate->currentTSState == TS_ACTIVE) {
AIR_Active_Position();
}
@ -218,14 +223,3 @@ void AIR_Error_Position() {
HAL_GPIO_WritePin(AIR_Positive_Control_GPIO_Port, AIR_Positive_Control_Pin,
GPIO_PIN_RESET);
}
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
if (hadc == air_current_adc) {
air_adc_complete = 1;
HAL_ADC_Stop_DMA(air_current_adc);
}
if (hadc == sdc_voltage_adc) {
sdc_adc_complete = 1;
HAL_ADC_Stop_DMA(sdc_voltage_adc);
}
}

View File

@ -11,12 +11,12 @@
#include "stm32g4xx_hal_fdcan.h"
// 3 should be programmed with CAN id 2
const uint16_t slave_CAN_id_to_slave_index[7] = {
0, 1, 2, 3, 255, 5, 4}; // TODO: Make this pretty pls
0, 1, 2, 3, 4, 5, 255}; // TODO: Make this pretty pls
canFrame framebuffer[CANFRAMEBUFFERSIZE] = {0};
uint8_t framebufferwritepointer;
uint8_t framebufferreadpointer;
uint32_t framebufferwritepointer;
uint32_t framebufferreadpointer;
void CAN_Init(FDCAN_HandleTypeDef* hcan) {
HAL_FDCAN_Stop(hcan);
@ -27,8 +27,8 @@ void CAN_Init(FDCAN_HandleTypeDef* hcan) {
FDCAN_FilterTypeDef fdfilter = {0};
fdfilter.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
fdfilter.FilterID1 = 0x000; // Range start
fdfilter.FilterID2 = 0x000; // Range stop
fdfilter.FilterID1 = 0x000; // ID
fdfilter.FilterID2 = 0x000; // Mask
fdfilter.FilterIndex = 0;
fdfilter.FilterType = FDCAN_FILTER_MASK;
@ -38,6 +38,10 @@ void CAN_Init(FDCAN_HandleTypeDef* hcan) {
HAL_StatusTypeDef status = HAL_FDCAN_Start(hcan);
if (status) {
return;
}
status =
HAL_FDCAN_ActivateNotification(hcan, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0);
}
@ -59,23 +63,20 @@ uint8_t CAN_Receive(FDCAN_HandleTypeDef* hcan) {
slaveID = slave_CAN_id_to_slave_index[slaveID];
uint8_t messageID = msg & 0x00F;
updateSlaveInfo(slaveID, messageID, rxFrame);
} else if (rxFrame.FrameID == SLAVE_EMERGENCY_ADDRESS) {
AMSErrorHandle errorframe = {0};
errorframe.errorcode = SlavesErrorFrameError;
errorframe.errorarg[0] = rxFrame.data[0];
errorframe.errorarg[1] = rxFrame.data[1];
errorframe.errorarg[2] = rxFrame.data[2];
errorframe.errorarg[3] = rxFrame.data[3];
errorframe.errorarg[4] = rxFrame.data[4];
errorframe.errorarg[5] = rxFrame.data[5];
errorframe.errorarg[6] = rxFrame.data[6];
errorframe.errorarg[7] = rxFrame.data[7];
AMS_Error_Handler(errorframe);
}
/* if(rxFrame.FrameID == SLAVE_EMERGENCY_ADDRESS)
{
AMSErrorHandle errorframe = {0};
errorframe.errorcode = SlavesErrorFrameError;
errorframe.errorarg[0] = rxFrame.data[0];
errorframe.errorarg[1] = rxFrame.data[1];
errorframe.errorarg[2] = rxFrame.data[2];
errorframe.errorarg[3] = rxFrame.data[3];
errorframe.errorarg[4] = rxFrame.data[4];
errorframe.errorarg[5] = rxFrame.data[5];
errorframe.errorarg[6] = rxFrame.data[6];
errorframe.errorarg[7] = rxFrame.data[7];
AMS_Error_Handler(errorframe);
}*/
}
return 0;

View File

@ -9,24 +9,5 @@
ErrorFlags CheckErrorFlags() {
ErrorFlags errors = {0};
errors.IMD_ERROR = !HAL_GPIO_ReadPin(IMD_Error_GPIO_Port, IMD_Error_Pin);
errors.IMD_ERROR_LED =
HAL_GPIO_ReadPin(IMD_Error_LED_GPIO_Port, IMD_Error_LED_Pin);
errors.AMS_ERROR_LED =
HAL_GPIO_ReadPin(AMS_ERROR_GPIO_Port, AMS_Error_LED_Pin);
errors.TS_no_voltage_error =
HAL_GPIO_ReadPin(Volt_Error_CPU_GPIO_Port, Volt_Error_CPU_Pin);
errors.positive_AIR_or_PC_error = HAL_GPIO_ReadPin(
Positive_Side_Error_CPU_GPIO_Port, Positive_Side_Error_CPU_Pin);
errors.negative_AIR_error =
HAL_GPIO_ReadPin(Neg_Side_Error_CPU_GPIO_Port, Neg_Side_Error_CPU_Pin);
errors.HV_inactive =
HAL_GPIO_ReadPin(HV_Inactive_CPU_GPIO_Port, HV_Inactive_CPU_Pin);
errors.negative_AIR_open =
HAL_GPIO_ReadPin(Neg_AIR_Open_CPU_GPIO_Port, Neg_AIR_Open_CPU_Pin);
errors.positive_AIR_and_PC_open =
HAL_GPIO_ReadPin(High_Side_Open_CPU_GPIO_Port, High_Side_Open_CPU_Pin);
return errors;
}

View File

@ -15,7 +15,6 @@
#include <stdint.h>
#define SPI_BUFFER_SIZE 1024
#define DUMMYBYTES 2
@ -313,26 +312,16 @@ void InterSTMFrame() {
spitxbuf[tsstatebaseaddress + 0] = spi_airstates->currentTSState;
spitxbuf[tsstatebaseaddress + 1] = (uint8_t)(spi_airstates->targetTSState);
spitxbuf[tsstatebaseaddress + 2] =
(uint8_t)(spi_airstates->RelaisSupplyVoltage >> 8) & 0xFF;
spitxbuf[tsstatebaseaddress + 3] =
(uint8_t)(spi_airstates->RelaisSupplyVoltage & 0xFF);
spitxbuf[tsstatebaseaddress + 4] =
(uint8_t)((spi_airstates->ShutdownCircuitVoltage >> 8) & 0xFF);
spitxbuf[tsstatebaseaddress + 5] =
(uint8_t)(spi_airstates->ShutdownCircuitVoltage & 0xFF);
spitxbuf[tsstatebaseaddress + 6] =
(uint8_t)((spi_airstates->AIRNegativeCurrent >> 8) & 0xFF);
spitxbuf[tsstatebaseaddress + 7] =
(uint8_t)(spi_airstates->AIRNegativeCurrent & 0xFF);
spitxbuf[tsstatebaseaddress + 8] =
(uint8_t)((spi_airstates->AIRPositiveCurrent >> 8) & 0xFF);
spitxbuf[tsstatebaseaddress + 9] =
(uint8_t)((spi_airstates->AIRPositiveCurrent) & 0xFF);
spitxbuf[tsstatebaseaddress + 10] =
(uint8_t)((spi_airstates->AIRPrechargeCurrent >> 8) & 0xFF);
spitxbuf[tsstatebaseaddress + 11] =
(uint8_t)((spi_airstates->AIRPrechargeCurrent) & 0xFF);
spitxbuf[tsstatebaseaddress + 2] = (uint8_t)(0) & 0xFF;
spitxbuf[tsstatebaseaddress + 3] = (uint8_t)(0);
spitxbuf[tsstatebaseaddress + 4] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 5] = (uint8_t)(0);
spitxbuf[tsstatebaseaddress + 6] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 7] = (uint8_t)(0);
spitxbuf[tsstatebaseaddress + 8] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 9] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 10] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 11] = (uint8_t)((0) & 0xFF);
spitxbuf[tsstatebaseaddress + 12] =
(uint8_t)((spi_airstates->BatteryVoltageBatterySide >> 24) & 0xFF);
spitxbuf[tsstatebaseaddress + 13] =

View File

@ -46,11 +46,6 @@
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc2;
DMA_HandleTypeDef hdma_adc1;
DMA_HandleTypeDef hdma_adc2;
CRC_HandleTypeDef hcrc;
FDCAN_HandleTypeDef hfdcan1;
@ -64,9 +59,6 @@ SPI_HandleTypeDef hspi1;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC1_Init(void);
static void MX_ADC2_Init(void);
static void MX_FDCAN1_Init(void);
static void MX_SPI1_Init(void);
static void MX_CRC_Init(void);
@ -110,15 +102,12 @@ int main(void) {
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC1_Init();
MX_ADC2_Init();
MX_FDCAN1_Init();
MX_SPI1_Init();
MX_CRC_Init();
/* USER CODE BEGIN 2 */
airstates = init_AIR_State_Maschine(&hadc1, &hadc2, &hdma_adc1, &hdma_adc2);
airstates = init_AIR_State_Maschine();
initSlaves();
set_SPI_errorInfo(&defaulterrorhandle);
spi_communication_init(&hspi1, &airstates);
@ -173,7 +162,7 @@ void SystemClock_Config(void) {
RCC_OscInitStruct.PLL.PLLN = 8;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV8;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV8;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}
@ -187,153 +176,11 @@ void SystemClock_Config(void) {
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
Error_Handler();
}
}
/**
* @brief ADC1 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC1_Init(void) {
/* USER CODE BEGIN ADC1_Init 0 */
/* USER CODE END ADC1_Init 0 */
ADC_MultiModeTypeDef multimode = {0};
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC1_Init 1 */
/* USER CODE END ADC1_Init 1 */
/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV64;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.GainCompensation = 0;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 4;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc1) != HAL_OK) {
Error_Handler();
}
/** Configure the ADC multi-mode
*/
multimode.Mode = ADC_MODE_INDEPENDENT;
if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) {
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_1;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_2;
sConfig.Rank = ADC_REGULAR_RANK_2;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_3;
sConfig.Rank = ADC_REGULAR_RANK_3;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_4;
sConfig.Rank = ADC_REGULAR_RANK_4;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
/* USER CODE END ADC1_Init 2 */
}
/**
* @brief ADC2 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC2_Init(void) {
/* USER CODE BEGIN ADC2_Init 0 */
/* USER CODE END ADC2_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC2_Init 1 */
/* USER CODE END ADC2_Init 1 */
/** Common config
*/
hadc2.Instance = ADC2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV64;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;
hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc2.Init.LowPowerAutoWait = DISABLE;
hadc2.Init.ContinuousConvMode = DISABLE;
hadc2.Init.NbrOfConversion = 1;
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc2.Init.DMAContinuousRequests = DISABLE;
hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc2.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc2) != HAL_OK) {
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_17;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN ADC2_Init 2 */
/* USER CODE END ADC2_Init 2 */
}
/**
* @brief CRC Initialization Function
* @param None
@ -438,25 +285,6 @@ static void MX_SPI1_Init(void) {
/* USER CODE END SPI1_Init 2 */
}
/**
* Enable DMA controller clock
*/
static void MX_DMA_Init(void) {
/* DMA controller clock enable */
__HAL_RCC_DMAMUX1_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
__HAL_RCC_DMA2_CLK_ENABLE();
/* DMA interrupt init */
/* DMA1_Channel2_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
/* DMA2_Channel1_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA2_Channel1_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(DMA2_Channel1_IRQn);
}
/**
* @brief GPIO Initialization Function
* @param None
@ -493,18 +321,11 @@ static void MX_GPIO_Init(void) {
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*Configure GPIO pins : AMS_ERROR_Pin IMD_Error_Pin AMS_Error_LED_Pin
Volt_Error_CPU_Pin Positive_Side_Error_CPU_Pin Neg_Side_Error_CPU_Pin
HV_Inactive_CPU_Pin Neg_AIR_Open_CPU_Pin High_Side_Open_CPU_Pin
IMD_Error_LED_Pin */
GPIO_InitStruct.Pin = AMS_ERROR_Pin | IMD_Error_Pin | AMS_Error_LED_Pin |
Volt_Error_CPU_Pin | Positive_Side_Error_CPU_Pin |
Neg_Side_Error_CPU_Pin | HV_Inactive_CPU_Pin |
Neg_AIR_Open_CPU_Pin | High_Side_Open_CPU_Pin |
IMD_Error_LED_Pin;
/*Configure GPIO pin : AMS_ERROR_Pin */
GPIO_InitStruct.Pin = AMS_ERROR_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(AMS_ERROR_GPIO_Port, &GPIO_InitStruct);
/*Configure GPIO pin : Inter_STM_CS_Pin */
GPIO_InitStruct.Pin = Inter_STM_CS_Pin;

View File

@ -24,9 +24,6 @@
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern DMA_HandleTypeDef hdma_adc1;
extern DMA_HandleTypeDef hdma_adc2;
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */
@ -96,212 +93,6 @@ void HAL_MspInit(void)
/* USER CODE END MspInit 1 */
}
static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0;
/**
* @brief ADC MSP Initialization
* This function configures the hardware resources used in this example
* @param hadc: ADC handle pointer
* @retval None
*/
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(hadc->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspInit 0 */
/* USER CODE END ADC1_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
HAL_RCC_ADC12_CLK_ENABLED++;
if(HAL_RCC_ADC12_CLK_ENABLED==1){
__HAL_RCC_ADC12_CLK_ENABLE();
}
__HAL_RCC_GPIOA_CLK_ENABLE();
/**ADC1 GPIO Configuration
PA0 ------> ADC1_IN1
PA1 ------> ADC1_IN2
PA2 ------> ADC1_IN3
PA3 ------> ADC1_IN4
*/
GPIO_InitStruct.Pin = Relay_Supply_Voltage_Pin|Pos_AIR_Current_Pin|Neg_AIR_Current_Pin|PreCharge_AIR_Current_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* ADC1 DMA Init */
/* ADC1 Init */
hdma_adc1.Instance = DMA1_Channel2;
hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_adc1.Init.Mode = DMA_NORMAL;
hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1);
/* ADC1 interrupt Init */
HAL_NVIC_SetPriority(ADC1_2_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
/* USER CODE BEGIN ADC1_MspInit 1 */
/* USER CODE END ADC1_MspInit 1 */
}
else if(hadc->Instance==ADC2)
{
/* USER CODE BEGIN ADC2_MspInit 0 */
/* USER CODE END ADC2_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC12;
PeriphClkInit.Adc12ClockSelection = RCC_ADC12CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
/* Peripheral clock enable */
HAL_RCC_ADC12_CLK_ENABLED++;
if(HAL_RCC_ADC12_CLK_ENABLED==1){
__HAL_RCC_ADC12_CLK_ENABLE();
}
__HAL_RCC_GPIOA_CLK_ENABLE();
/**ADC2 GPIO Configuration
PA4 ------> ADC2_IN17
*/
GPIO_InitStruct.Pin = SC_Supply_Voltage_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(SC_Supply_Voltage_GPIO_Port, &GPIO_InitStruct);
/* ADC2 DMA Init */
/* ADC2 Init */
hdma_adc2.Instance = DMA2_Channel1;
hdma_adc2.Init.Request = DMA_REQUEST_ADC2;
hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY;
hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_adc2.Init.MemInc = DMA_MINC_ENABLE;
hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_adc2.Init.Mode = DMA_NORMAL;
hdma_adc2.Init.Priority = DMA_PRIORITY_LOW;
if (HAL_DMA_Init(&hdma_adc2) != HAL_OK)
{
Error_Handler();
}
__HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2);
/* ADC2 interrupt Init */
HAL_NVIC_SetPriority(ADC1_2_IRQn, 4, 0);
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
/* USER CODE BEGIN ADC2_MspInit 1 */
/* USER CODE END ADC2_MspInit 1 */
}
}
/**
* @brief ADC MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param hadc: ADC handle pointer
* @retval None
*/
void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
{
if(hadc->Instance==ADC1)
{
/* USER CODE BEGIN ADC1_MspDeInit 0 */
/* USER CODE END ADC1_MspDeInit 0 */
/* Peripheral clock disable */
HAL_RCC_ADC12_CLK_ENABLED--;
if(HAL_RCC_ADC12_CLK_ENABLED==0){
__HAL_RCC_ADC12_CLK_DISABLE();
}
/**ADC1 GPIO Configuration
PA0 ------> ADC1_IN1
PA1 ------> ADC1_IN2
PA2 ------> ADC1_IN3
PA3 ------> ADC1_IN4
*/
HAL_GPIO_DeInit(GPIOA, Relay_Supply_Voltage_Pin|Pos_AIR_Current_Pin|Neg_AIR_Current_Pin|PreCharge_AIR_Current_Pin);
/* ADC1 DMA DeInit */
HAL_DMA_DeInit(hadc->DMA_Handle);
/* ADC1 interrupt DeInit */
/* USER CODE BEGIN ADC1:ADC1_2_IRQn disable */
/**
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
/* USER CODE END ADC1:ADC1_2_IRQn disable */
/* USER CODE BEGIN ADC1_MspDeInit 1 */
/* USER CODE END ADC1_MspDeInit 1 */
}
else if(hadc->Instance==ADC2)
{
/* USER CODE BEGIN ADC2_MspDeInit 0 */
/* USER CODE END ADC2_MspDeInit 0 */
/* Peripheral clock disable */
HAL_RCC_ADC12_CLK_ENABLED--;
if(HAL_RCC_ADC12_CLK_ENABLED==0){
__HAL_RCC_ADC12_CLK_DISABLE();
}
/**ADC2 GPIO Configuration
PA4 ------> ADC2_IN17
*/
HAL_GPIO_DeInit(SC_Supply_Voltage_GPIO_Port, SC_Supply_Voltage_Pin);
/* ADC2 DMA DeInit */
HAL_DMA_DeInit(hadc->DMA_Handle);
/* ADC2 interrupt DeInit */
/* USER CODE BEGIN ADC2:ADC1_2_IRQn disable */
/**
* Uncomment the line below to disable the "ADC1_2_IRQn" interrupt
* Be aware, disabling shared interrupt may affect other IPs
*/
/* HAL_NVIC_DisableIRQ(ADC1_2_IRQn); */
/* USER CODE END ADC2:ADC1_2_IRQn disable */
/* USER CODE BEGIN ADC2_MspDeInit 1 */
/* USER CODE END ADC2_MspDeInit 1 */
}
}
/**
* @brief CRC MSP Initialization
* This function configures the hardware resources used in this example

View File

@ -57,10 +57,6 @@
/* USER CODE END 0 */
/* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_adc1;
extern DMA_HandleTypeDef hdma_adc2;
extern ADC_HandleTypeDef hadc1;
extern ADC_HandleTypeDef hadc2;
extern FDCAN_HandleTypeDef hfdcan1;
extern SPI_HandleTypeDef hspi1;
/* USER CODE BEGIN EV */
@ -211,35 +207,6 @@ void SysTick_Handler(void)
/* please refer to the startup file (startup_stm32g4xx.s). */
/******************************************************************************/
/**
* @brief This function handles DMA1 channel2 global interrupt.
*/
void DMA1_Channel2_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
/* USER CODE END DMA1_Channel2_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_adc1);
/* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
/* USER CODE END DMA1_Channel2_IRQn 1 */
}
/**
* @brief This function handles ADC1 and ADC2 global interrupt.
*/
void ADC1_2_IRQHandler(void)
{
/* USER CODE BEGIN ADC1_2_IRQn 0 */
/* USER CODE END ADC1_2_IRQn 0 */
HAL_ADC_IRQHandler(&hadc1);
HAL_ADC_IRQHandler(&hadc2);
/* USER CODE BEGIN ADC1_2_IRQn 1 */
/* USER CODE END ADC1_2_IRQn 1 */
}
/**
* @brief This function handles FDCAN1 interrupt 0.
*/
@ -282,20 +249,6 @@ void SPI1_IRQHandler(void)
/* USER CODE END SPI1_IRQn 1 */
}
/**
* @brief This function handles DMA2 channel1 global interrupt.
*/
void DMA2_Channel1_IRQHandler(void)
{
/* USER CODE BEGIN DMA2_Channel1_IRQn 0 */
/* USER CODE END DMA2_Channel1_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_adc2);
/* USER CODE BEGIN DMA2_Channel1_IRQn 1 */
/* USER CODE END DMA2_Channel1_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [3.16.0] date: [Thu Jun 30 03:25:47 CEST 2022]
# File automatically-generated by tool: [projectgenerator] version: [3.17.1] date: [Tue Jul 12 23:51:59 CEST 2022]
##########################################################################################################################
# ------------------------------------------------
@ -39,9 +39,6 @@ C_SOURCES = \
Core/Src/main.c \
Core/Src/stm32g4xx_it.c \
Core/Src/stm32g4xx_hal_msp.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_adc.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_adc_ex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_ll_adc.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc_ex.c \

View File

@ -1,74 +1,4 @@
#MicroXplorer Configuration settings - do not modify
ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_1
ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_2
ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_3
ADC1.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_4
ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV64
ADC1.ContinuousConvMode=DISABLE
ADC1.EOCSelection=ADC_EOC_SINGLE_CONV
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,master,ContinuousConvMode,EOCSelection,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,OffsetNumber-3\#ChannelRegularConversion,NbrOfConversion,ClockPrescaler
ADC1.NbrOfConversion=4
ADC1.NbrOfConversionFlag=1
ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.OffsetNumber-3\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.Rank-1\#ChannelRegularConversion=2
ADC1.Rank-2\#ChannelRegularConversion=3
ADC1.Rank-3\#ChannelRegularConversion=4
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
ADC1.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
ADC1.master=1
ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_17
ADC2.ClockPrescaler=ADC_CLOCK_ASYNC_DIV64
ADC2.ContinuousConvMode=DISABLE
ADC2.EOCSelection=ADC_EOC_SINGLE_CONV
ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,EOCSelection,NbrOfConversion,ClockPrescaler
ADC2.NbrOfConversion=1
ADC2.NbrOfConversionFlag=1
ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC2.Rank-0\#ChannelRegularConversion=1
ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.ADC1.0.EventEnable=DISABLE
Dma.ADC1.0.Instance=DMA1_Channel2
Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
Dma.ADC1.0.MemInc=DMA_MINC_ENABLE
Dma.ADC1.0.Mode=DMA_NORMAL
Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE
Dma.ADC1.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.ADC1.0.Priority=DMA_PRIORITY_LOW
Dma.ADC1.0.RequestNumber=1
Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.ADC1.0.SignalID=NONE
Dma.ADC1.0.SyncEnable=DISABLE
Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.ADC1.0.SyncRequestNumber=1
Dma.ADC1.0.SyncSignalID=NONE
Dma.ADC2.1.Direction=DMA_PERIPH_TO_MEMORY
Dma.ADC2.1.EventEnable=DISABLE
Dma.ADC2.1.Instance=DMA2_Channel1
Dma.ADC2.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
Dma.ADC2.1.MemInc=DMA_MINC_ENABLE
Dma.ADC2.1.Mode=DMA_NORMAL
Dma.ADC2.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
Dma.ADC2.1.PeriphInc=DMA_PINC_DISABLE
Dma.ADC2.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.ADC2.1.Priority=DMA_PRIORITY_LOW
Dma.ADC2.1.RequestNumber=1
Dma.ADC2.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.ADC2.1.SignalID=NONE
Dma.ADC2.1.SyncEnable=DISABLE
Dma.ADC2.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.ADC2.1.SyncRequestNumber=1
Dma.ADC2.1.SyncSignalID=NONE
Dma.Request0=ADC1
Dma.Request1=ADC2
Dma.RequestsNb=2
FDCAN1.DataPrescaler=2
FDCAN1.DataSyncJumpWidth=4
FDCAN1.DataTimeSeg1=13
@ -82,85 +12,55 @@ GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32G441CBT3
Mcu.Family=STM32G4
Mcu.IP0=ADC1
Mcu.IP1=ADC2
Mcu.IP2=CRC
Mcu.IP3=DMA
Mcu.IP4=FDCAN1
Mcu.IP5=NVIC
Mcu.IP6=RCC
Mcu.IP7=SPI1
Mcu.IP8=SYS
Mcu.IPNb=9
Mcu.IP0=CRC
Mcu.IP1=FDCAN1
Mcu.IP2=NVIC
Mcu.IP3=RCC
Mcu.IP4=SPI1
Mcu.IP5=SYS
Mcu.IPNb=6
Mcu.Name=STM32G441CBTx
Mcu.Package=LQFP48
Mcu.Pin0=PC13
Mcu.Pin1=PC14-OSC32_IN
Mcu.Pin10=PA7
Mcu.Pin11=PB0
Mcu.Pin12=PB1
Mcu.Pin13=PB2
Mcu.Pin14=PB10
Mcu.Pin15=PB11
Mcu.Pin16=PB12
Mcu.Pin17=PB13
Mcu.Pin18=PB14
Mcu.Pin19=PB15
Mcu.Pin10=PA11
Mcu.Pin11=PA12
Mcu.Pin12=PA13
Mcu.Pin13=PA14
Mcu.Pin14=PB5
Mcu.Pin15=PB6
Mcu.Pin16=PB7
Mcu.Pin17=VP_CRC_VS_CRC
Mcu.Pin18=VP_SYS_VS_Systick
Mcu.Pin19=VP_SYS_VS_DBSignals
Mcu.Pin2=PC15-OSC32_OUT
Mcu.Pin20=PA8
Mcu.Pin21=PA9
Mcu.Pin22=PA10
Mcu.Pin23=PA11
Mcu.Pin24=PA12
Mcu.Pin25=PA13
Mcu.Pin26=PA14
Mcu.Pin27=PB3
Mcu.Pin28=PB5
Mcu.Pin29=PB6
Mcu.Pin3=PA0
Mcu.Pin30=PB7
Mcu.Pin31=VP_CRC_VS_CRC
Mcu.Pin32=VP_SYS_VS_Systick
Mcu.Pin33=VP_SYS_VS_DBSignals
Mcu.Pin4=PA1
Mcu.Pin5=PA2
Mcu.Pin6=PA3
Mcu.Pin7=PA4
Mcu.Pin8=PA5
Mcu.Pin9=PA6
Mcu.PinsNb=34
Mcu.Pin3=PA5
Mcu.Pin4=PA6
Mcu.Pin5=PA7
Mcu.Pin6=PB0
Mcu.Pin7=PA8
Mcu.Pin8=PA9
Mcu.Pin9=PA10
Mcu.PinsNb=20
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32G441CBTx
MxCube.Version=6.5.0
MxDb.Version=DB.6.0.50
NVIC.ADC1_2_IRQn=true\:4\:0\:true\:false\:true\:true\:true\:true
NVIC.BusFault_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
NVIC.DMA1_Channel2_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:true
NVIC.DMA2_Channel1_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
NVIC.BusFault_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
NVIC.DebugMonitor_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
NVIC.FDCAN1_IT0_IRQn=true\:4\:0\:true\:false\:true\:true\:true\:true
NVIC.FDCAN1_IT1_IRQn=true\:4\:0\:true\:false\:true\:true\:true\:true
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.MemoryManagement_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.PendSV_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.MemoryManagement_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PendSV_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SPI1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.SVCall_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
NVIC.SysTick_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:true
NVIC.UsageFault_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:true
PA0.GPIOParameters=GPIO_Label
PA0.GPIO_Label=Relay_Supply_Voltage
PA0.Locked=true
PA0.Mode=IN1-Single-Ended
PA0.Signal=ADC1_IN1
PA1.GPIOParameters=GPIO_Label
PA1.GPIO_Label=Pos_AIR_Current
PA1.Locked=true
PA1.Mode=IN2-Single-Ended
PA1.Signal=ADC1_IN2
NVIC.SVCall_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:false
NVIC.UsageFault_IRQn=true\:4\:0\:true\:false\:true\:false\:false\:false
PA10.GPIOParameters=GPIO_Label
PA10.GPIO_Label=Status_LED
PA10.Locked=true
@ -176,21 +76,6 @@ PA13.Signal=SYS_JTMS-SWDIO
PA14.Locked=true
PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA2.GPIOParameters=GPIO_Label
PA2.GPIO_Label=Neg_AIR_Current
PA2.Locked=true
PA2.Mode=IN3-Single-Ended
PA2.Signal=ADC1_IN3
PA3.GPIOParameters=GPIO_Label
PA3.GPIO_Label=PreCharge_AIR_Current
PA3.Locked=true
PA3.Mode=IN4-Single-Ended
PA3.Signal=ADC1_IN4
PA4.GPIOParameters=GPIO_Label
PA4.GPIO_Label=SC_Supply_Voltage
PA4.Locked=true
PA4.Mode=IN17-Single-Ended
PA4.Signal=ADC2_IN17
PA5.Mode=Full_Duplex_Slave
PA5.Signal=SPI1_SCK
PA6.Mode=Full_Duplex_Slave
@ -209,42 +94,6 @@ PB0.GPIOParameters=GPIO_Label
PB0.GPIO_Label=AMS_ERROR
PB0.Locked=true
PB0.Signal=GPIO_Input
PB1.GPIOParameters=GPIO_Label
PB1.GPIO_Label=IMD_Error
PB1.Locked=true
PB1.Signal=GPIO_Input
PB10.GPIOParameters=GPIO_Label
PB10.GPIO_Label=Volt_Error_CPU
PB10.Locked=true
PB10.Signal=GPIO_Input
PB11.GPIOParameters=GPIO_Label
PB11.GPIO_Label=Positive_Side_Error_CPU
PB11.Locked=true
PB11.Signal=GPIO_Input
PB12.GPIOParameters=GPIO_Label
PB12.GPIO_Label=Neg_Side_Error_CPU
PB12.Locked=true
PB12.Signal=GPIO_Input
PB13.GPIOParameters=GPIO_Label
PB13.GPIO_Label=HV_Inactive_CPU
PB13.Locked=true
PB13.Signal=GPIO_Input
PB14.GPIOParameters=GPIO_Label
PB14.GPIO_Label=Neg_AIR_Open_CPU
PB14.Locked=true
PB14.Signal=GPIO_Input
PB15.GPIOParameters=GPIO_Label
PB15.GPIO_Label=High_Side_Open_CPU
PB15.Locked=true
PB15.Signal=GPIO_Input
PB2.GPIOParameters=GPIO_Label
PB2.GPIO_Label=AMS_Error_LED
PB2.Locked=true
PB2.Signal=GPIO_Input
PB3.GPIOParameters=GPIO_Label
PB3.GPIO_Label=IMD_Error_LED
PB3.Locked=true
PB3.Signal=GPIO_Input
PB5.GPIOParameters=GPIO_Label
PB5.GPIO_Label=PreCharge_Control
PB5.Locked=true
@ -297,31 +146,31 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=Makefile
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_FDCAN1_Init-FDCAN1-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true
RCC.ADC12Freq_Value=64000000
RCC.AHBFreq_Value=64000000
RCC.APB1Freq_Value=64000000
RCC.APB1TimFreq_Value=64000000
RCC.APB2Freq_Value=64000000
RCC.APB2TimFreq_Value=64000000
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_ADC2_Init-ADC2-false-HAL-true,6-MX_FDCAN1_Init-FDCAN1-false-HAL-true,7-MX_SPI1_Init-SPI1-false-HAL-true,8-MX_CRC_Init-CRC-false-HAL-true
RCC.ADC12Freq_Value=16000000
RCC.AHBFreq_Value=16000000
RCC.APB1Freq_Value=16000000
RCC.APB1TimFreq_Value=16000000
RCC.APB2Freq_Value=16000000
RCC.APB2TimFreq_Value=16000000
RCC.CRSFreq_Value=48000000
RCC.CortexFreq_Value=64000000
RCC.CortexFreq_Value=16000000
RCC.EXTERNAL_CLOCK_VALUE=12288000
RCC.FCLKCortexFreq_Value=64000000
RCC.FCLKCortexFreq_Value=16000000
RCC.FDCANCLockSelection=RCC_FDCANCLKSOURCE_PLL
RCC.FDCANFreq_Value=16000000
RCC.FamilyName=M
RCC.HCLKFreq_Value=64000000
RCC.HCLKFreq_Value=16000000
RCC.HSE_VALUE=8000000
RCC.HSI48_VALUE=48000000
RCC.HSI_VALUE=16000000
RCC.I2C1Freq_Value=64000000
RCC.I2C2Freq_Value=64000000
RCC.I2C3Freq_Value=64000000
RCC.I2SFreq_Value=64000000
RCC.IPParameters=ADC12Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANCLockSelection,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLQ,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value
RCC.LPTIM1Freq_Value=64000000
RCC.LPUART1Freq_Value=64000000
RCC.I2C1Freq_Value=16000000
RCC.I2C2Freq_Value=16000000
RCC.I2C3Freq_Value=16000000
RCC.I2SFreq_Value=16000000
RCC.IPParameters=ADC12Freq_Value,AHBFreq_Value,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,CRSFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FDCANCLockSelection,FDCANFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI48_VALUE,HSI_VALUE,I2C1Freq_Value,I2C2Freq_Value,I2C3Freq_Value,I2SFreq_Value,LPTIM1Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLQ,PLLQoutputFreq_Value,PLLR,PLLRCLKFreq_Value,PWRFreq_Value,RNGFreq_Value,SAI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,UART4Freq_Value,USART1Freq_Value,USART2Freq_Value,USART3Freq_Value,USBFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value
RCC.LPTIM1Freq_Value=16000000
RCC.LPUART1Freq_Value=16000000
RCC.LSCOPinFreq_Value=32000
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000
@ -329,16 +178,17 @@ RCC.MCO1PinFreq_Value=16000000
RCC.PLLPoutputFreq_Value=64000000
RCC.PLLQ=RCC_PLLQ_DIV8
RCC.PLLQoutputFreq_Value=16000000
RCC.PLLRCLKFreq_Value=64000000
RCC.PWRFreq_Value=64000000
RCC.PLLR=RCC_PLLR_DIV8
RCC.PLLRCLKFreq_Value=16000000
RCC.PWRFreq_Value=16000000
RCC.RNGFreq_Value=16000000
RCC.SAI1Freq_Value=64000000
RCC.SYSCLKFreq_VALUE=64000000
RCC.SAI1Freq_Value=16000000
RCC.SYSCLKFreq_VALUE=16000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.UART4Freq_Value=64000000
RCC.USART1Freq_Value=64000000
RCC.USART2Freq_Value=64000000
RCC.USART3Freq_Value=64000000
RCC.USART1Freq_Value=16000000
RCC.USART2Freq_Value=16000000
RCC.USART3Freq_Value=16000000
RCC.USBFreq_Value=16000000
RCC.VCOInputFreq_Value=16000000
RCC.VCOOutputFreq_Value=128000000

View File

@ -48,8 +48,6 @@ Core/Src/syscalls.c \
Core/Src/sysmem.c \
Core/Src/system_stm32g4xx.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_adc.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_adc_ex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_cortex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_crc.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_crc_ex.c \
@ -68,8 +66,7 @@ Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_rcc_ex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_spi.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_spi_ex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim_ex.c \
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_ll_adc.c
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_tim_ex.c
CPP_SOURCES = \
@ -157,7 +154,8 @@ CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-
CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections -feliminate-unused-debug-types
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
CFLAGS += -g -gdwarf -ggdb
CXXFLAGS += -g -gdwarf -ggdb
endif
# Add additional flags
@ -245,6 +243,12 @@ erase: $(BUILD_DIR)/$(TARGET).elf
#######################################
clean:
-rm -fR $(BUILD_DIR)
#######################################
# custom makefile rules
#######################################
#######################################
# dependencies

40278
stm32g441xx.svd Normal file

File diff suppressed because it is too large Load Diff