Changeset 44 for trunk/fw_g473rct/Core/Src/main.c
- Timestamp:
- Jan 20, 2026, 3:00:17 PM (2 weeks ago)
- File:
-
- 1 edited
-
trunk/fw_g473rct/Core/Src/main.c (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fw_g473rct/Core/Src/main.c
r38 r44 63 63 /* Private define ------------------------------------------------------------*/ 64 64 /* USER CODE BEGIN PD */ 65 65 66 #define MAX_OVERCURRENT_RETRYS 3 67 66 68 /* USER CODE END PD */ 67 69 … … 74 76 75 77 /* USER CODE BEGIN PV */ 78 79 uint32_t bootLoaderMark __attribute__((section(".no_init"))); 80 76 81 modbus_t modbusData __attribute__((section(".RAM1"))); 77 82 … … 98 103 void LoadBackupRegister(void); 99 104 void SaveBackupRegister(void); 105 void JumpToBootloader(void); 100 106 /* USER CODE END PFP */ 101 107 … … 111 117 int main(void) 112 118 { 113 114 119 /* USER CODE BEGIN 1 */ 120 121 if (bootLoaderMark == GOTO_SYSTEM_BOOTLOADER_MARK) 122 { 123 bootLoaderMark = 0; 124 JumpToBootloader(); 125 } 126 115 127 uint8_t firstStartCatcher; 116 128 int mode_button_disable_time=0; … … 137 149 138 150 /* USER CODE BEGIN SysInit */ 139 151 printf("System core clock: %uMHz\n", SystemCoreClock / 1000000U); 140 152 /* USER CODE END SysInit */ 141 153 … … 165 177 AH_COUNTER_Init(); 166 178 167 168 179 startType_t startType = EEPROM_isFirstStart(); 169 180 … … 189 200 LoadBackupRegister(); 190 201 191 192 // Modbus Initialisierung 202 // Modbus Initialisierung 193 203 mbInit(&modbusData, sys_data.s.parameter.baudrate, sys_data.s.parameter.parityMode, sys_data.s.parameter.stopBit, &huart2); 194 204 HAL_IWDG_Refresh(&hiwdg); … … 206 216 //HAL_DMA_Start(hadc2.DMA_Handle,(uint32_t)&hadc2.Instance->DR, (uint32_t)adc2Data,1); //Start ADC slave DMA 207 217 //SET_BIT(hadc1.Instance->CFGR, ADC_CFGR_DMAEN); //Enable DMA transfer for ADC master (ADC12_CCR.MDMA = 0b00 -> MDMA mode disabled) 208 218 209 219 //HAL_ADC_Start_DMA(&hadc2, (uint32_t*)adc2Data, 1); 210 220 if (HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t *)adc12Data,SAMPLE_ARRAY_SIZE)) //Start ADC interleaved mode … … 232 242 Error_Handler(); 233 243 } 234 235 244 236 245 // ADS1260 Initialierung … … 252 261 } 253 262 254 255 263 /* USER CODE END 2 */ 256 264 … … 282 290 283 291 } 284 285 292 286 293 if (newADC3Data == 1) … … 330 337 } 331 338 332 333 339 if (sys_data.s.values.overcurrentRetryCounter > MAX_OVERCURRENT_RETRYS) 334 340 { … … 339 345 sys_data.s.values.lvpState = OUTPUTS_OVP_SHORT_PROTECTION; 340 346 HAL_GPIO_WritePin(CHARGE_ENABLE_GPIO_Port, CHARGE_ENABLE_Pin, OUTPUTS_CHARGE_NOT_ALLOWED); 341 342 343 344 347 } 345 348 … … 386 389 387 390 sys_data.s.values.efficiency = EFFICIENCY_Exec(); 388 389 390 } 391 } 392 391 393 392 394 … … 419 421 case COMMAND_SET_RDP_LEVEL1: SetFlashReadProtection(true); break; 420 422 case COMMAND_SET_RDP_LEVEL1_AND_BOOTSEL: SetBootFromFlashAndReadOutProtection(); break; 423 case COMMAND_GOTO_SYS_BOOTLOADER: bootLoaderMark = GOTO_SYSTEM_BOOTLOADER_MARK; 424 HAL_NVIC_SystemReset(); 421 425 default: printf("UNKNOWN COMMAND\n"); 422 426 } … … 601 605 602 606 HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR13, sys_data.s.values.mAh_AutoModeU); 603 604 605 606 607 } 608 609 610 } 611 612 607 } 608 } 609 610 //------------------------------------------------------------------------------ 613 611 614 612 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) … … 798 796 } 799 797 798 //------------------------------------------------------------------------------ 799 800 void JumpToBootloader (void) 801 { 802 typedef void (SystemBootloader)(void); 803 #ifdef DEBUG 804 printf("Cannot jump in DEBUG mode!\n"); 805 return; 806 #endif 807 // Disable all interrupts 808 __disable_irq(); 809 810 #ifdef DEINIT_RCC 811 // Set the clock to the default state 812 HAL_RCC_DeInit(); 813 #endif 814 #ifdef DEINIT_SYSTICK 815 // Disable Systick timer 816 SysTick->CTRL = SysTick->LOAD = SysTick->VAL = 0; 817 #endif 818 // Clear Interrupt Enable Register & Interrupt Pending Register 819 for (int i = 0; i < sizeof(NVIC->ICER) / sizeof(NVIC->ICER[0]); i++) 820 { 821 NVIC->ICER[i] = 0xFFFFFFFF; 822 NVIC->ICPR[i] = 0xFFFFFFFF; 823 } 824 825 // Set up the jump to boot loader address + 4 826 SystemBootloader* sb = (SystemBootloader*) (*((uint32_t *) ((SYSTEM_BOOTLOADER_START_ADDR + 4)))); 827 828 // Set the main stack pointer to the bootloader stack 829 __set_MSP(*(uint32_t *)SYSTEM_BOOTLOADER_START_ADDR); 830 831 __HAL_RCC_SYSCFG_CLK_ENABLE(); 832 __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH(); 833 //__HAL_RCC_SYSCFG_CLK_DISABLE(); 834 835 // Re-enable all interrupts 836 __enable_irq(); 837 838 // Call the function to jump to boot loader location 839 sb(); 840 841 // Jump is done successfully 842 while (1) 843 { 844 // Code should never reach this loop 845 printf("Jump has failed!\n"); 846 } 847 } 800 848 801 849 /* USER CODE END 4 */
Note:
See TracChangeset
for help on using the changeset viewer.
