Ignore:
Timestamp:
Mar 21, 2025, 3:58:22 PM (7 weeks ago)
Author:
Zed
Message:

Fixing project. Need to add CAN in CubeMX.

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

Legend:

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

    r108 r112  
    7878#define BAT_I_SENSE_MINUS_Pin GPIO_PIN_7
    7979#define BAT_I_SENSE_MINUS_GPIO_Port GPIOA
     80#define U_BAT_SCALE_SWITCH_Pin GPIO_PIN_2
     81#define U_BAT_SCALE_SWITCH_GPIO_Port GPIOB
    8082#define POWER_4V_EN_Pin GPIO_PIN_15
    8183#define POWER_4V_EN_GPIO_Port GPIOF
  • ctrl/firmware/Main/CubeMX/Core/Src/adc.c

    r111 r112  
    8181  sConfig.Channel = ADC_CHANNEL_3;
    8282  sConfig.Rank = ADC_REGULAR_RANK_1;
    83   sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5;
     83  sConfig.SamplingTime = ADC_SAMPLETIME_32CYCLES_5;//ADC_SAMPLETIME_32CYCLES_5;
    8484  sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED;
    8585  sConfig.OffsetNumber = ADC_OFFSET_NONE;
    86   sConfig.Offset = 32767;
     86  sConfig.Offset = 0;
    8787  sConfig.OffsetSignedSaturation = DISABLE;
    8888  if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK)
     
    112112
    113113  HAL_Delay(100U);
    114   if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_DIFFERENTIAL_ENDED)) Error_Handler();
    115114  if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_DIFFERENTIAL_ENDED)) Error_Handler();
    116115  HAL_Delay(100U);
     
    122121   // Disabling interrupts, because we don't need it during offset calculation
    123122  __HAL_DMA_DISABLE_IT(&hdma_adc2, DMA_IT_HT | DMA_IT_TC);
     123  uint32_t TC_flag = __HAL_DMA_GET_TC_FLAG_INDEX(&hdma_adc2);
    124124  for (uint32_t i = 0U; i < max_samples; i++)
    125125  {       // Waiting for conversion to finish
    126           while(!__HAL_DMA_GET_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5));
    127           // Reading ADC2 value
     126          while(!__HAL_DMA_GET_FLAG(&hdma_adc2, TC_flag));        // For correct flag see __HAL_DMA_GET_TC_FLAG_INDEX macro description
     127          // Reading ADC2 values
    128128          for (unsigned j = 0; j < ADC2_CHANNELS_NUM; j++) offset[j] += ADC2Data.Raw[j];
    129           __HAL_DMA_CLEAR_FLAG(&hdma_adc2, DMA_FLAG_TCIF1_5);
     129          __HAL_DMA_CLEAR_FLAG(&hdma_adc2, TC_flag);
    130130  }
    131131
     
    138138          LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_1, LL_ADC_CHANNEL_3, (offset[0]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1));
    139139          LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_2, LL_ADC_CHANNEL_4, (offset[1]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1));
    140           LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_3, LL_ADC_CHANNEL_5, (offset[2]/max_samples) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1));
     140          LL_ADC_SetOffset(hadc2.Instance, LL_ADC_OFFSET_3, LL_ADC_CHANNEL_5, (32767U) * ((hadc2.Init.OversamplingMode == ENABLE)? hadc2.Init.Oversampling.Ratio: 1));
    141141  }
    142142
     
    154154  /* USER CODE BEGIN ADC3_Init 0 */
    155155
     156  // This ADC is used to sample raw voltage on the battery connector.
     157  // It is not very precise dut to the voltagedrop on the wires.
     158
    156159  /* USER CODE END ADC3_Init 0 */
    157160
     
    165168  */
    166169  hadc3.Instance = ADC3;
    167   hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256;
     170  hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
    168171  hadc3.Init.Resolution = ADC_RESOLUTION_12B;
    169172  hadc3.Init.DataAlign = ADC3_DATAALIGN_RIGHT;
     
    234237
    235238  HAL_Delay(100U);
    236   if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED)) Error_Handler();
    237239  if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED)) Error_Handler();
    238240  HAL_Delay(100U);
    239241
    240   //if (HAL_OK != HAL_ADC_Start(&hadc3)) Error_Handler();
    241242  if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3Data, ADC3_CHANNELS_NUM)) Error_Handler();
    242243  __HAL_DMA_DISABLE_IT(&hdma_adc3, DMA_IT_HT);
  • ctrl/firmware/Main/CubeMX/Core/Src/gpio.c

    r111 r112  
    6161
    6262  /*Configure GPIO pin Output Level */
     63  HAL_GPIO_WritePin(GPIOB, U_BAT_SCALE_SWITCH_Pin|ETH_SPI_RST_Pin, GPIO_PIN_RESET);
     64
     65  /*Configure GPIO pin Output Level */
    6366  HAL_GPIO_WritePin(POWER_4V_EN_GPIO_Port, POWER_4V_EN_Pin, GPIO_PIN_RESET);
    6467
     
    7881  /*Configure GPIO pin Output Level */
    7982  HAL_GPIO_WritePin(ETH_SPI_NSS_GPIO_Port, ETH_SPI_NSS_Pin, GPIO_PIN_SET);
    80 
    81   /*Configure GPIO pin Output Level */
    82   HAL_GPIO_WritePin(ETH_SPI_RST_GPIO_Port, ETH_SPI_RST_Pin, GPIO_PIN_RESET);
    8383
    8484  /*Configure GPIO pins : PE4 PE5 PE10 PE0
     
    123123  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    124124
    125   /*Configure GPIO pins : PB2 PB11 PB12 PB13
    126                            PB3 PB5 */
    127   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13
    128                           |GPIO_PIN_3|GPIO_PIN_5;
    129   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    130   GPIO_InitStruct.Pull = GPIO_NOPULL;
     125  /*Configure GPIO pins : U_BAT_SCALE_SWITCH_Pin ETH_SPI_NSS_Pin ETH_SPI_RST_Pin */
     126  GPIO_InitStruct.Pin = U_BAT_SCALE_SWITCH_Pin|ETH_SPI_NSS_Pin|ETH_SPI_RST_Pin;
     127  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
     128  GPIO_InitStruct.Pull = GPIO_NOPULL;
     129  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    131130  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    132131
     
    146145  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    147146  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
     147
     148  /*Configure GPIO pins : PB11 PB12 PB13 PB3
     149                           PB5 */
     150  GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_3
     151                          |GPIO_PIN_5;
     152  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
     153  GPIO_InitStruct.Pull = GPIO_NOPULL;
     154  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    148155
    149156  /*Configure GPIO pins : GSM_PWR_Pin ETH_SPI_PWR_Pin OUTPUT_ON_LED_Pin */
     
    187194  HAL_GPIO_Init(ONEWIRE_TEMP_BUS_GPIO_Port, &GPIO_InitStruct);
    188195
    189   /*Configure GPIO pins : ETH_SPI_NSS_Pin ETH_SPI_RST_Pin */
    190   GPIO_InitStruct.Pin = ETH_SPI_NSS_Pin|ETH_SPI_RST_Pin;
    191   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    192   GPIO_InitStruct.Pull = GPIO_NOPULL;
    193   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    194   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    195 
    196196  /*Configure GPIO pin : ETH_SPI_INT_Pin */
    197197  GPIO_InitStruct.Pin = ETH_SPI_INT_Pin;
  • ctrl/firmware/Main/CubeMX/Core/Src/main.c

    r111 r112  
    133133  MX_DMA_Init();
    134134  MX_BDMA_Init();
     135  MX_ADC2_Init();
     136  MX_ADC3_Init();
    135137  MX_RTC_Init();
    136138  MX_SPI4_Init();
     
    143145  MX_TIM6_Init();
    144146  MX_I2C2_Init();
    145   MX_ADC3_Init();
    146147  MX_TIM3_Init();
    147148  MX_I2C1_Init();
     
    150151  MX_DAC1_Init();
    151152  MX_TIM1_Init();
    152   MX_ADC2_Init();
    153153  /* USER CODE BEGIN 2 */
    154154
  • ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c

    r111 r112  
    473473static volatile int64_t charge_tmp;
    474474static volatile int64_t load_tmp;
     475static volatile int64_t u_bat_tmp_uV;
    475476static volatile float charge_i;
    476477static volatile float load_i;
     478static volatile float u_bat;
    477479
    478480void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
     
    482484        if (hadc->Instance == ADC2)
    483485        {
    484                 HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET);
     486                //HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET);
    485487                charge_tmp = (((int64_t)ADC2Data.Name.charge_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL;
    486488                load_tmp = (((int64_t)ADC2Data.Name.eload_strom * ((int64_t)VREF) * 1000LL) / ((int64_t)0xFFFF)) / 50LL;
     489                u_bat_tmp_uV = (int64_t)ADC2Data.Name.u_bat * (int64_t)VREF * 1000LL * 2LL;
     490
    487491                charge_i = (float)charge_tmp / 500LL;
    488492                load_i = (float)load_tmp / 500LL;
    489                 printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i);
     493                u_bat = (float)u_bat_tmp_uV / (32767.0f * 1000000.0f);
     494                //printf("\t\t\t%5.2fA, %5.2fA\n", charge_i, load_i);
    490495                //printf("%d, %d\n", ADC2Data.Name.charge_strom, ADC2Data.Name.eload_strom);
     496
     497                //printf("%5.4f\n", u_bat);
     498                //HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET);
     499        }
     500        else if (hadc->Instance == ADC3)
     501        {
     502                HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_SET);
     503
     504                uint32_t tmp = (((uint32_t)ADC3Data.Name.UBat) * VREF * 2U) / 4095U;
     505                float UBat = (float)tmp / 1000.0;
     506                printf("%6.4f\n", UBat);
     507                //printf("%u\n", (((uint32_t)ADC3Data.Name.UBat) * VREF * 2U) / 4095);
     508
    491509                HAL_GPIO_WritePin(RX1_LED_GPIO_Port, RX1_LED_Pin, GPIO_PIN_RESET);
    492510        }
  • ctrl/firmware/Main/CubeMX/Core/Src/tim.c

    r107 r112  
    7878  }
    7979  sConfigOC.OCMode = TIM_OCMODE_PWM1;
    80   sConfigOC.Pulse = 50;
     80  sConfigOC.Pulse = 0;//50;
    8181  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    8282  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  • ctrl/firmware/Main/CubeMX/FATFS/Target/sd_diskio.c

    r75 r112  
    208208      if (SDQueueID == NULL)
    209209      {
    210  #if (osCMSIS <= 0x20000U)
    211       osMessageQDef(SD_Queue, QUEUE_SIZE, uint16_t);
    212       SDQueueID = osMessageCreate (osMessageQ(SD_Queue), NULL);
    213 #else
    214       SDQueueID = osMessageQueueNew(QUEUE_SIZE, 2, NULL);
     210#if (osCMSIS <= 0x20000U)
     211                  osMessageQDef(SD_Queue, QUEUE_SIZE, uint16_t);
     212                  SDQueueID = osMessageCreate (osMessageQ(SD_Queue), NULL);
     213#else
     214                  SDQueueID = osMessageQueueNew(QUEUE_SIZE, 2, NULL);
    215215#endif
    216216      }
  • ctrl/firmware/Main/CubeMX/charger.ioc

    r111 r112  
    2626ADC2.Ratio=256
    2727ADC2.RightBitShift=ADC_RIGHTBITSHIFT_8
    28 ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_64CYCLES_5
    29 ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_64CYCLES_5
    30 ADC2.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_64CYCLES_5
     28ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5
     29ADC2.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5
     30ADC2.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_32CYCLES_5
    3131ADC2.SingleDiff-0\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
    3232ADC2.SingleDiff-2\#ChannelRegularConversion=ADC_DIFFERENTIAL_ENDED
     
    509509PA8.Locked=true
    510510PA8.Signal=GPIO_Input
     511PB0.GPIOParameters=GPIO_Label
     512PB0.GPIO_Label=BAT_U_SENSE_MINUS
    511513PB0.Locked=true
    512514PB0.Signal=ADCx_INN5
     515PB1.GPIOParameters=GPIO_Label
     516PB1.GPIO_Label=BAT_U_SENSE_PLUS
    513517PB1.Signal=ADCx_INP5
    514518PB10.GPIOParameters=GPIO_Speed,GPIO_Label
     
    529533PB15.Mode=Full_Duplex_Master
    530534PB15.Signal=SPI2_MOSI
    531 PB2.GPIOParameters=GPIO_Label
     535PB2.GPIOParameters=PinState,GPIO_Label
    532536PB2.GPIO_Label=U_BAT_SCALE_SWITCH
    533537PB2.Locked=true
     538PB2.PinState=GPIO_PIN_RESET
    534539PB2.Signal=GPIO_Output
    535540PB4(NJTRST).GPIOParameters=PinState,GPIO_Label
     
    558563PB9.Signal=GPIO_Output
    559564PC0.GPIOParameters=GPIO_Label
    560 PC0.GPIO_Label=U_BAT
     565PC0.GPIO_Label=BAT_U_RAW
    561566PC0.Locked=true
    562567PC0.Signal=ADCx_INP10
     
    571576PC15-OSC32_OUT.Mode=LSE-External-Oscillator
    572577PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
     578PC4.GPIOParameters=GPIO_Label
     579PC4.GPIO_Label=LOAD_I_SENSE_PLUS
    573580PC4.Signal=ADCx_INP4
     581PC5.GPIOParameters=GPIO_Label
     582PC5.GPIO_Label=LOAD_I_SENSE_MINUS
    574583PC5.Signal=ADCx_INN4
    575584PC6.GPIOParameters=GPIO_PuPd,GPIO_Label
Note: See TracChangeset for help on using the changeset viewer.