Ignore:
Timestamp:
Mar 12, 2025, 4:18:34 PM (2 months ago)
Author:
Zed
Message:

Fixing project.

Location:
ctrl/firmware/Main/CubeMX
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • ctrl/firmware/Main/CubeMX/Core/Inc/adc.h

    r108 r109  
    4141/* USER CODE BEGIN Private defines */
    4242
    43 #define ADC2_CHANNELS   (2U)
    44 #define ADC3_CHANNELS   (4U)
    45 #define VREF                    (3000U)
     43#define ADC2_CHANNELS_NUM       (2U)
     44#define ADC3_CHANNELS_NUM       (4U)
     45#define VREF                            (3000U)
    4646
    4747typedef union ADC2_data_t
    4848{
    49         uint16_t Raw[ADC2_CHANNELS];
     49        uint16_t Raw[ADC2_CHANNELS_NUM];
    5050        struct
    5151        {
     
    5757typedef union ADC3_data_t
    5858{
    59         uint16_t Raw[ADC3_CHANNELS];
     59        uint16_t Raw[ADC3_CHANNELS_NUM];
    6060        struct
    6161        {
  • ctrl/firmware/Main/CubeMX/Core/Src/adc.c

    r108 r109  
    2323/* USER CODE BEGIN 0 */
    2424
     25#include <string.h>
     26
    2527volatile ADC2_data_t ADC2Data __attribute__((section(".AXI_RAM_4_DMA")));
    2628volatile ADC3_data_t ADC3Data __attribute__((section(".BKP_RAM_4_DMA")));
     
    5254  */
    5355  hadc2.Instance = ADC2;
    54   hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
     56  hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;
    5557  hadc2.Init.Resolution = ADC_RESOLUTION_16B;
    5658  hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
     
    6668  hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
    6769  hadc2.Init.OversamplingMode = ENABLE;
    68   hadc2.Init.Oversampling.Ratio = 1024;
    69   hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_10;
     70  hadc2.Init.Oversampling.Ratio = 64;
     71  hadc2.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_6;
    7072  hadc2.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
    7173  hadc2.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE;
     
    9395  sConfig.Channel = ADC_CHANNEL_4;
    9496  sConfig.Rank = ADC_REGULAR_RANK_2;
     97  sConfig.Offset = 0;
    9598  if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
    9699  {
     
    104107  HAL_Delay(100U);
    105108
    106   //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler();
    107   if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS)) Error_Handler();
    108   __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT);
    109 
    110   uint16_t offset = 0;
    111   for (int i = 0; i < 100; i++)
    112   {
    113 
    114   }
     109  uint32_t offset[2] = { 0U };
     110  const uint32_t max_samples = 16U;
     111  // Starting DMA converstion
     112  if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS_NUM)) Error_Handler();
     113   // Disabling interrupts, because we don't need it during offset calculation
     114  __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT | DMA_IT_TC);
     115  for (uint32_t i = 0U; i < max_samples; i++)
     116  {       // Waiting for conversion to finish
     117          while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5));
     118          // Reading ADC2 value
     119          offset[0] += ADC2Data.Raw[0];
     120          offset[1] += ADC2Data.Raw[1];
     121          __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5);
     122  }
     123
     124  printf("ADC2 offset[0] = %u, offset[1] = %u\n", offset[0] / max_samples, offset[1] / max_samples);
     125
     126  if (HAL_OK == HAL_ADC_Stop_DMA(&hadc2))
     127  {
     128          LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_1, LL_ADC_CHANNEL_3, (offset[0]/max_samples) << 6U);
     129          LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_2, LL_ADC_CHANNEL_4, (offset[1]/max_samples) << 6U);
     130  }
     131
     132  if (HAL_OK != HAL_ADC_Start_DMA(&hadc2, (uint32_t*)&ADC2Data, ADC2_CHANNELS_NUM)) Error_Handler();
     133  __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT /*| DMA_IT_TC*/); // Disabling interrupts, because we don't need it
    115134
    116135
     
    209228
    210229  //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler();
    211   if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS)) Error_Handler();
     230  if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS_NUM)) Error_Handler();
    212231  __HAL_DMA_DISABLE_IT(&hdma_adc3, DMA_IT_HT);
    213232
  • ctrl/firmware/Main/CubeMX/Core/Src/freertos.c

    r106 r109  
    5858#define BME_TASK_STACK_DEPTH_WORDS                                      (256U)
    5959#define GUI_TASK_STACK_DEPTH_WORDS                                      (2048U)
    60 #define FAN_TASK_STACK_DEPTH_WORDS                                      (128U)
     60#define FAN_TASK_STACK_DEPTH_WORDS                                      (256U)
    6161
    6262/* USER CODE END PD */
  • ctrl/firmware/Main/CubeMX/Core/Src/main.c

    r108 r109  
    374374{
    375375  /* USER CODE BEGIN Error_Handler_Debug */
     376  printf("ERROR!!!\n");
    376377  /* User can add his own implementation to report the HAL error return state */
    377378  __disable_irq();
  • ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c

    r108 r109  
    2424/* USER CODE BEGIN Includes */
    2525
     26#include <stdio.h>
     27
    2628#include "FreeRTOS.h"
    2729#include "modbus.h"
    28 //#include "semphr.h"
     30#include "adc.h"
    2931
    3032/* USER CODE END Includes */
     
    468470
    469471//------------------------------------------------------------------------------
     472
     473static volatile int64_t charge_tmp;
     474static volatile int64_t load_tmp;
     475static volatile float charge_i;
     476static volatile float load_i;
     477
     478void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
     479{
     480        //extern ADC2_data_t ADC2Data;
     481
     482        if (hadc->Instance == ADC2)
     483        {
     484                HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET);
     485                charge_tmp = (((int64_t)ADC2Data.Name.charge_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL;
     486                load_tmp = (((int64_t)ADC2Data.Name.eload_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL;
     487                charge_i = (float)charge_tmp / 500LL;
     488                load_i = (float)load_tmp / 500LL;
     489                //printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i);
     490                HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET);
     491        }
     492}
     493
    470494//------------------------------------------------------------------------------
    471495//------------------------------------------------------------------------------
  • ctrl/firmware/Main/CubeMX/charger.ioc

    r108 r109  
    66ADC2.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR
    77ADC2.EOCSelection=ADC_EOC_SEQ_CONV
    8 ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SingleDiff-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SingleDiff-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,OffsetSignedSaturation-2\#ChannelRegularConversion,ContinuousConvMode,EOCSelection,Overrun,ConversionDataManagement,OversamplingMode,RightBitShift,Ratio,ClockPrescaler
     8ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SingleDiff-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SingleDiff-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,OffsetNumber-2\#ChannelRegularConversion,OffsetSignedSaturation-2\#ChannelRegularConversion,ContinuousConvMode,EOCSelection,Overrun,ConversionDataManagement,OversamplingMode,RightBitShift,Ratio,ClockPrescaler,Offset-0\#ChannelRegularConversion
    99ADC2.NbrOfConversion=2
    1010ADC2.NbrOfConversionFlag=1
     11ADC2.Offset-0\#ChannelRegularConversion=32767
    1112ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
    1213ADC2.OffsetNumber-2\#ChannelRegularConversion=ADC_OFFSET_NONE
     
    437438Mcu.UserConstants=
    438439Mcu.UserName=STM32H723ZETx
    439 MxCube.Version=6.13.0
    440 MxDb.Version=DB.6.0.130
     440MxCube.Version=6.14.0
     441MxDb.Version=DB.6.0.140
    441442NVIC.BDMA_Channel0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
    442443NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
     
    720721ProjectManager.AskForMigrate=true
    721722ProjectManager.BackupPrevious=false
     723ProjectManager.CompilerLinker=GCC
    722724ProjectManager.CompilerOptimize=6
    723725ProjectManager.ComputerToolchain=false
     
    792794RCC.I2C123Freq_Value=64000000
    793795RCC.I2C4Freq_Value=100000000
    794 RCC.IPParameters=ADCCLockSelection,ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123CLockSelection,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL2_VCI_Range-AdvancedSettings,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMC1CLockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123CLockSelection,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Spi45ClockSelection,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16CLockSelection,USART16Freq_Value,USART234578CLockSelection,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
     796RCC.IPParameters=ADCCLockSelection,ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2,DIVR2Freq_Value,DIVR3,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123CLockSelection,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLL2_VCI_Range-AdvancedSettings,PLLFRACN,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,QSPIFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMC1CLockSelection,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123CLockSelection,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Spi45ClockSelection,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16CLockSelection,USART16Freq_Value,USART234578CLockSelection,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
    795797RCC.LPTIM1Freq_Value=100000000
    796798RCC.LPTIM2Freq_Value=100000000
     
    804806RCC.PLLFRACN=0
    805807RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
     808RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE0
    806809RCC.QSPIFreq_Value=100000000
    807810RCC.RNGFreq_Value=48000000
Note: See TracChangeset for help on using the changeset viewer.