Changeset 71 for trunk/fw_g473rct/Core/Src
- Timestamp:
- Jun 5, 2026, 1:30:00 PM (5 days ago)
- Location:
- trunk/fw_g473rct/Core/Src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/Core/Src/adc.c
r55 r71 54 54 */ 55 55 hadc1.Instance = ADC1; 56 hadc1.Init.ClockPrescaler = ADC_CLOCK_ ASYNC_DIV1;56 hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; 57 57 hadc1.Init.Resolution = ADC_RESOLUTION_12B; 58 58 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 120 120 */ 121 121 hadc2.Instance = ADC2; 122 hadc2.Init.ClockPrescaler = ADC_CLOCK_ ASYNC_DIV1;122 hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; 123 123 hadc2.Init.Resolution = ADC_RESOLUTION_12B; 124 124 hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 179 179 */ 180 180 hadc3.Instance = ADC3; 181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 1;181 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256; 182 182 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 183 183 hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 192 192 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 193 193 hadc3.Init.DMAContinuousRequests = ENABLE; 194 hadc3.Init.Overrun = ADC_OVR_DATA_ OVERWRITTEN;194 hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED; 195 195 hadc3.Init.OversamplingMode = ENABLE; 196 196 hadc3.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; … … 263 263 */ 264 264 hadc4.Instance = ADC4; 265 hadc4.Init.ClockPrescaler = ADC_CLOCK_ ASYNC_DIV1;265 hadc4.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; 266 266 hadc4.Init.Resolution = ADC_RESOLUTION_12B; 267 267 hadc4.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 276 276 hadc4.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; 277 277 hadc4.Init.DMAContinuousRequests = DISABLE; 278 hadc4.Init.Overrun = ADC_OVR_DATA_ PRESERVED;278 hadc4.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; 279 279 hadc4.Init.OversamplingMode = ENABLE; 280 280 hadc4.Init.Oversampling.Ratio = ADC_OVERSAMPLING_RATIO_256; … … 291 291 sConfig.Channel = ADC_CHANNEL_4; 292 292 sConfig.Rank = ADC_REGULAR_RANK_1; 293 sConfig.SamplingTime = ADC_SAMPLETIME_6 40CYCLES_5;293 sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5; 294 294 sConfig.SingleDiff = ADC_DIFFERENTIAL_ENDED; 295 295 sConfig.OffsetNumber = ADC_OFFSET_NONE; … … 321 321 */ 322 322 hadc5.Instance = ADC5; 323 hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV 1;323 hadc5.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256; 324 324 hadc5.Init.Resolution = ADC_RESOLUTION_12B; 325 325 hadc5.Init.DataAlign = ADC_DATAALIGN_RIGHT; … … 596 596 hdma_adc4.Init.PeriphInc = DMA_PINC_DISABLE; 597 597 hdma_adc4.Init.MemInc = DMA_MINC_ENABLE; 598 hdma_adc4.Init.PeriphDataAlignment = DMA_PDATAALIGN_ HALFWORD;598 hdma_adc4.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; 599 599 hdma_adc4.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; 600 600 hdma_adc4.Init.Mode = DMA_NORMAL; … … 788 788 789 789 /* USER CODE BEGIN 1 */ 790 790 uint32_t GetADCClockHz(void) 791 { 792 uint32_t hclk = HAL_RCC_GetHCLKFreq(); 793 794 uint32_t ckmode = 795 (ADC12_COMMON->CCR & ADC_CCR_CKMODE) >> ADC_CCR_CKMODE_Pos; 796 797 switch (ckmode) 798 { 799 case 0x1: // HCLK/1 800 return hclk; 801 802 case 0x2: // HCLK/2 803 return hclk / 2; 804 805 case 0x3: // HCLK/4 806 return hclk / 4; 807 808 default: // Asynchroner ADC-Takt 809 // Hier muss die RCC-Konfiguration ausgewertet werden 810 // (PLL, SYSCLK, HSI usw.) 811 return 0; 812 } 813 } 814 815 float GetADCSampleRate(void) 816 { 817 uint32_t adc_clk = GetADCClockHz(); 818 819 if(adc_clk == 0) 820 return 0.0f; 821 822 float sample_cycles = 6.5f; 823 float conversion_cycles = 12.5f; 824 825 return adc_clk / (sample_cycles + conversion_cycles); 826 } 791 827 /* USER CODE END 1 */ 792 828 -
trunk/fw_g473rct/Core/Src/main.c
r70 r71 86 86 /* USER CODE BEGIN PV */ 87 87 88 88 89 uint32_t bootLoaderMark __attribute__((section(".no_init"))); 89 90 … … 91 92 92 93 93 __IO uint32_t adc1Data[SAMPLE_ARRAY_SIZE] ;94 __IO uint32_t adc2Data[SAMPLE_ARRAY_SIZE] ;94 __IO uint32_t adc1Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 95 __IO uint32_t adc2Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 95 96 __IO uint32_t adc3Data[3]; 96 __IO uint32_t adc4Data[SAMPLE_ARRAY_SIZE] ;97 __IO uint32_t adc4Data[SAMPLE_ARRAY_SIZE] __attribute__((section(".RAM1_CRC"))); 97 98 __IO uint32_t adc5Data[4]; 98 int silentmode = 0;99 int silentmode = 0; 99 100 static volatile uint32_t newADC124Data = 0; 100 101 static volatile uint32_t newADC3Data = 0; … … 119 120 void DoNothing(void){}; 120 121 void processUSB(ring_buffer_t* const ring_in_buff, ring_buffer_t* const ring_out_buff); 121 122 void ADC2_SetOffset(uint32_t channel, int16_t offset); 122 123 /* USER CODE END PFP */ 123 124 … … 135 136 136 137 /* USER CODE BEGIN 1 */ 137 138 CheckRAMHWParity();138 139 //CheckRAMHWParity(); 139 140 140 141 if (bootLoaderMark == GOTO_SYSTEM_BOOTLOADER_MARK) … … 143 144 JumpToBootloader(); 144 145 } 145 146 146 147 uint8_t firstStartCatcher; 147 148 int mode_button_disable_time=0; … … 161 162 162 163 /* USER CODE BEGIN Init */ 163 164 164 165 /* USER CODE END Init */ 165 166 … … 170 171 printf("System core clock: %uMHz\n", SystemCoreClock / 1000000U); 171 172 /* USER CODE END SysInit */ 172 173 173 174 /* Initialize all configured peripherals */ 174 175 MX_GPIO_Init(); … … 186 187 MX_CRC_Init(); 187 188 MX_RTC_Init(); 188 MX_IWDG_Init();189 // MX_IWDG_Init(); 189 190 MX_TIM3_Init(); 190 191 MX_USB_Device_Init(); … … 192 193 /* USER CODE BEGIN 2 */ 193 194 printf("Test debug io\r\n"); 195 printf("adc samplerate core clock: %d kHz\r\n", (uint32_t) GetADCSampleRate() / 1000U); 194 196 SYS_DATA_Init(); 195 197 WH_COUNTER_Init(); 196 198 AH_COUNTER_Init(); 197 199 198 200 startType_t startType = EEPROM_isFirstStart(); 199 201 … … 205 207 case FIRST_START_ERROR: EEPROM_fullRestore(&sys_data); break; 206 208 } 209 207 210 HAL_IWDG_Refresh(&hiwdg); 208 211 … … 218 221 HAL_IWDG_Refresh(&hiwdg); 219 222 LoadBackupRegister(); 220 223 221 224 // Modbus Initialisierung 222 225 mbInit(&modbusData, sys_data.s.parameter.baudrate, sys_data.s.parameter.parityMode, sys_data.s.parameter.stopBit, &huart2); 223 226 HAL_IWDG_Refresh(&hiwdg); 224 // STM32G0 Chiptemperatur Kalibrierung227 // STM32G0 Chiptemperatur Kalibrierung 225 228 CHIP_TEMPERATURE_Calibration(); 226 229 … … 247 250 printf("ADS1260 Init\n"); 248 251 OUTPUTS_Init(); 249 252 250 253 //Display Adress with Error LED blinks 251 254 for (int n = 0; n < sys_data.s.parameter.slave_address; n++) … … 260 263 HAL_IWDG_Refresh(&hiwdg); 261 264 } 262 265 263 266 /* USER CODE END 2 */ 264 267 265 268 /* USBPD initialisation ---------------------------------*/ 266 269 MX_USBPD_Init(); 267 270 268 271 /* Infinite loop */ 269 272 /* USER CODE BEGIN WHILE */ … … 274 277 275 278 /* USER CODE BEGIN 3 */ 276 HAL_IWDG_Refresh(&hiwdg);277 if (newADC124Data == 1)279 HAL_IWDG_Refresh(&hiwdg); 280 if (newADC124Data == 7) 278 281 { 279 282 SHUNT_VOLTAGE_Exec( adc4Data[0]); … … 287 290 newADC124Data = 0; 288 291 292 //Auskommentiert, bringt komiscxherweise Spannungsschwankungen, beim loggen,... Spannung springt bis zu 50mv 293 // HAL_ADCEx_Calibration_Start(&hadc1, ADC_DIFFERENTIAL_ENDED); 294 // HAL_ADCEx_Calibration_Start(&hadc2, ADC_DIFFERENTIAL_ENDED); 295 // HAL_ADCEx_Calibration_Start(&hadc4, ADC_DIFFERENTIAL_ENDED); 296 297 298 299 289 300 if (HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adc1Data,SAMPLE_ARRAY_SIZE)) Error_Handler(); //Start ADC interleaved mode 290 301 if (HAL_ADC_Start_DMA(&hadc2,(uint32_t*)adc2Data,SAMPLE_ARRAY_SIZE)) Error_Handler(); //Start ADC interleaved mode 302 if (HAL_ADC_Start_DMA(&hadc4,(uint32_t*)adc4Data,SAMPLE_ARRAY_SIZE)) Error_Handler(); //Start ADC interleaved mode 291 303 } 292 304 … … 356 368 if (silentmode == 0) 357 369 { 358 HAL_GPIO_TogglePin(LED_FUNCTION_GPIO_Port, LED_FUNCTION_Pin);370 //HAL_GPIO_TogglePin(LED_FUNCTION_GPIO_Port, LED_FUNCTION_Pin); 359 371 //HAL_GPIO_TogglePin(AUX_EN_GPIO_Port, AUX_EN_Pin); 360 372 } … … 379 391 380 392 sys_data.s.values.efficiency = EFFICIENCY_Exec(); 381 382 #ifdef DEBUG383 /*if (sys_data.s.values.onTime % 5U == 0U)384 {385 static char* Buf = "Hello everybody!\r\n";386 const unsigned BufLen = strlen(Buf);387 CDC_Transmit_FS((uint8_t*)Buf, BufLen - 1);388 }*/389 #endif390 393 } 391 394 … … 421 424 case COMMAND_SET_RDP_LEVEL1_AND_BOOTSEL: SetBootFromFlashAndReadOutProtection(); break; 422 425 case COMMAND_GOTO_SYS_BOOTLOADER: bootLoaderMark = GOTO_SYSTEM_BOOTLOADER_MARK; 423 HAL_NVIC_SystemReset(); 426 HAL_NVIC_SystemReset(); break; 427 case COMMAND_SET_VOLTAGE_MEAS_TO_ZERO: BATTERY_VOLTAGE_ZeroCal(); break; 428 424 429 default: printf("UNKNOWN COMMAND\n"); 425 430 } … … 799 804 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) 800 805 { 801 if (hadc->Instance==ADC1)806 if (hadc->Instance==ADC1) 802 807 { 803 newADC124Data=1; 804 } 805 806 if (hadc->Instance==ADC3) 808 newADC124Data |= 1; 809 } 810 else if (hadc->Instance == ADC2) 811 { 812 newADC124Data |= 2; 813 } 814 else if (hadc->Instance==ADC3) 807 815 { 808 816 newADC3Data=1; 809 817 } 810 811 if (hadc->Instance==ADC5) 818 else if (hadc->Instance==ADC4) 819 { 820 newADC124Data |=4; 821 } 822 else if (hadc->Instance==ADC5) 812 823 { 813 824 newADC5Data=1; … … 1066 1077 } 1067 1078 } 1079 1068 1080 1069 1081 /* USER CODE END 4 */ -
trunk/fw_g473rct/Core/Src/stm32g4xx_it.c
r69 r71 429 429 430 430 /* USER CODE BEGIN 1 */ 431 431 432 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) 432 433 { -
trunk/fw_g473rct/Core/Src/system_stm32g4xx.c
r20 r71 189 189 #endif /* USER_VECT_TAB_ADDRESS */ 190 190 } 191 191 192 192 193 /** -
trunk/fw_g473rct/Core/Src/tim.c
r55 r71 63 63 } 64 64 /* USER CODE BEGIN TIM3_Init 2 */ 65 HAL_TIM_Base_Start (&htim3);65 HAL_TIM_Base_Start_IT(&htim3); 66 66 67 67 /* USER CODE END TIM3_Init 2 */ -
trunk/fw_g473rct/Core/Src/ucpd.c
r58 r71 21 21 #include "ucpd.h" 22 22 23 23 24 /* USER CODE BEGIN 0 */ 25 26 #include "stm32g4xx_ll_bus.h" 27 28 #include "stm32g4xx_ll_gpio.h" 29 #include "stm32g4xx_ll_dma.h" 30 24 31 25 32 /* USER CODE END 0 */
Note:
See TracChangeset
for help on using the changeset viewer.
