Changeset 92 for ctrl/firmware/Main/CubeMX/Core
- Timestamp:
- Feb 14, 2025, 8:27:41 AM (3 months ago)
- Location:
- ctrl/firmware/Main/CubeMX/Core
- Files:
-
- 2 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
ctrl/firmware/Main/CubeMX/Core/Inc/adc.h
r91 r92 35 35 /* USER CODE END Includes */ 36 36 37 extern ADC_HandleTypeDef hadc 1;37 extern ADC_HandleTypeDef hadc3; 38 38 39 39 /* USER CODE BEGIN Private defines */ 40 40 41 #define ADC 1_CHANNELS (1U)41 #define ADC3_CHANNELS (4U) 42 42 43 typedef union ADC 1_data_t43 typedef union ADC3_data_t 44 44 { 45 uint16_t Data[ADC1_CHANNELS];46 struct Raw45 uint16_t Raw[ADC3_CHANNELS]; 46 struct 47 47 { 48 uint16_t U_Bat; 49 }Raw; 50 }ADC1_data_t __attribute__((packed, aligned(32))); 48 uint16_t Vbat; 49 uint16_t Vref; 50 uint16_t CPUTemp; 51 uint16_t UBat; 52 }; 53 } __attribute__((packed, aligned(32))) ADC3_data_t; 51 54 52 55 /* USER CODE END Private defines */ 53 56 54 void MX_ADC 1_Init(void);57 void MX_ADC3_Init(void); 55 58 56 59 /* USER CODE BEGIN Prototypes */ -
ctrl/firmware/Main/CubeMX/Core/Inc/main.h
r89 r92 68 68 #define EEPROM_I2C_SCL_Pin GPIO_PIN_1 69 69 #define EEPROM_I2C_SCL_GPIO_Port GPIOF 70 #define U_BAT_Pin GPIO_PIN_0 71 #define U_BAT_GPIO_Port GPIOC 70 72 #define POWER_4V_EN_Pin GPIO_PIN_15 71 73 #define POWER_4V_EN_GPIO_Port GPIOF -
ctrl/firmware/Main/CubeMX/Core/Inc/stm32h7xx_it.h
r91 r92 58 58 void DMA1_Stream3_IRQHandler(void); 59 59 void DMA1_Stream4_IRQHandler(void); 60 void DMA1_Stream5_IRQHandler(void);61 60 void EXTI9_5_IRQHandler(void); 62 61 void TIM3_IRQHandler(void); … … 69 68 void SPI4_IRQHandler(void); 70 69 void MDMA_IRQHandler(void); 70 void BDMA_Channel0_IRQHandler(void); 71 71 void USART10_IRQHandler(void); 72 72 /* USER CODE BEGIN EFP */ -
ctrl/firmware/Main/CubeMX/Core/Src/adc.c
r91 r92 23 23 /* USER CODE BEGIN 0 */ 24 24 25 ADC 1_data_t ADC1_Data;25 ADC3_data_t ADC3_values __attribute__((section(".BKP_RAM_4_DMA"))); 26 26 27 27 /* USER CODE END 0 */ 28 28 29 ADC_HandleTypeDef hadc 1;30 DMA_HandleTypeDef hdma_adc 1;31 32 /* ADC 1init function */33 void MX_ADC 1_Init(void)29 ADC_HandleTypeDef hadc3; 30 DMA_HandleTypeDef hdma_adc3; 31 32 /* ADC3 init function */ 33 void MX_ADC3_Init(void) 34 34 { 35 35 36 /* USER CODE BEGIN ADC1_Init 0 */ 37 38 /* USER CODE END ADC1_Init 0 */ 39 40 ADC_MultiModeTypeDef multimode = {0}; 36 /* USER CODE BEGIN ADC3_Init 0 */ 37 38 /* USER CODE END ADC3_Init 0 */ 39 41 40 ADC_ChannelConfTypeDef sConfig = {0}; 42 41 43 /* USER CODE BEGIN ADC 1_Init 1 */44 45 /* USER CODE END ADC 1_Init 1 */42 /* USER CODE BEGIN ADC3_Init 1 */ 43 44 /* USER CODE END ADC3_Init 1 */ 46 45 47 46 /** Common config 48 47 */ 49 hadc1.Instance = ADC1; 50 hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256; 51 hadc1.Init.Resolution = ADC_RESOLUTION_16B; 52 hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; 53 hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV; 54 hadc1.Init.LowPowerAutoWait = DISABLE; 55 hadc1.Init.ContinuousConvMode = ENABLE; 56 hadc1.Init.NbrOfConversion = 1; 57 hadc1.Init.DiscontinuousConvMode = DISABLE; 58 hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; 59 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 60 hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; 61 hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; 62 hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; 63 hadc1.Init.OversamplingMode = ENABLE; 64 hadc1.Init.Oversampling.Ratio = 1024; 65 hadc1.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_11; 66 hadc1.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 67 hadc1.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; 68 if (HAL_ADC_Init(&hadc1) != HAL_OK) 69 { 70 Error_Handler(); 71 } 72 73 /** Configure the ADC multi-mode 74 */ 75 multimode.Mode = ADC_MODE_INDEPENDENT; 76 if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) 77 { 78 Error_Handler(); 79 } 80 81 /** Configure Regular Channel 82 */ 83 sConfig.Channel = ADC_CHANNEL_10; 48 hadc3.Instance = ADC3; 49 hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV256; 50 hadc3.Init.Resolution = ADC_RESOLUTION_12B; 51 hadc3.Init.DataAlign = ADC3_DATAALIGN_RIGHT; 52 hadc3.Init.ScanConvMode = ADC_SCAN_ENABLE; 53 hadc3.Init.EOCSelection = ADC_EOC_SEQ_CONV; 54 hadc3.Init.LowPowerAutoWait = DISABLE; 55 hadc3.Init.ContinuousConvMode = ENABLE; 56 hadc3.Init.NbrOfConversion = 4; 57 hadc3.Init.DiscontinuousConvMode = DISABLE; 58 hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START; 59 hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; 60 hadc3.Init.DMAContinuousRequests = ENABLE; 61 hadc3.Init.SamplingMode = ADC_SAMPLING_MODE_NORMAL; 62 hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; 63 hadc3.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; 64 hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; 65 hadc3.Init.OversamplingMode = ENABLE; 66 hadc3.Init.Oversampling.Ratio = ADC3_OVERSAMPLING_RATIO_256; 67 hadc3.Init.Oversampling.RightBitShift = ADC_RIGHTBITSHIFT_11; 68 hadc3.Init.Oversampling.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER; 69 hadc3.Init.Oversampling.OversamplingStopReset = ADC_REGOVERSAMPLING_CONTINUED_MODE; 70 if (HAL_ADC_Init(&hadc3) != HAL_OK) 71 { 72 Error_Handler(); 73 } 74 75 /** Configure Regular Channel 76 */ 77 sConfig.Channel = ADC_CHANNEL_VBAT; 84 78 sConfig.Rank = ADC_REGULAR_RANK_1; 85 sConfig.SamplingTime = ADC _SAMPLETIME_810CYCLES_5;79 sConfig.SamplingTime = ADC3_SAMPLETIME_640CYCLES_5; 86 80 sConfig.SingleDiff = ADC_SINGLE_ENDED; 87 81 sConfig.OffsetNumber = ADC_OFFSET_NONE; 88 82 sConfig.Offset = 0; 89 sConfig.OffsetSignedSaturation = DISABLE; 90 if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) 91 { 92 Error_Handler(); 93 } 94 /* USER CODE BEGIN ADC1_Init 2 */ 95 96 HAL_StatusTypeDef r = HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC1_Data, ADC1_CHANNELS); 97 if (r != HAL_OK) printf("Cannot initialize ADC1!\n"); 98 __HAL_DMA_DISABLE_IT(&hdma_adc1, DMA_IT_HT); 99 100 /* USER CODE END ADC1_Init 2 */ 83 sConfig.OffsetSign = ADC3_OFFSET_SIGN_NEGATIVE; 84 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 85 { 86 Error_Handler(); 87 } 88 89 /** Configure Regular Channel 90 */ 91 sConfig.Channel = ADC_CHANNEL_VREFINT; 92 sConfig.Rank = ADC_REGULAR_RANK_2; 93 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 94 { 95 Error_Handler(); 96 } 97 98 /** Configure Regular Channel 99 */ 100 sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; 101 sConfig.Rank = ADC_REGULAR_RANK_3; 102 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 103 { 104 Error_Handler(); 105 } 106 107 /** Configure Regular Channel 108 */ 109 sConfig.Channel = ADC_CHANNEL_10; 110 sConfig.Rank = ADC_REGULAR_RANK_4; 111 sConfig.SamplingTime = ADC3_SAMPLETIME_2CYCLES_5; 112 if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) 113 { 114 Error_Handler(); 115 } 116 /* USER CODE BEGIN ADC3_Init 2 */ 117 118 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED)) Error_Handler(); 119 if (HAL_OK != HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED)) Error_Handler(); 120 121 if (HAL_OK != HAL_ADC_Start_DMA(&hadc3, (uint32_t*)&ADC3_values, 2)) Error_Handler(); 122 __HAL_DMA_DISABLE_IT(&hdma_adc3, DMA_IT_HT); 123 124 125 /* USER CODE END ADC3_Init 2 */ 101 126 102 127 } … … 106 131 107 132 GPIO_InitTypeDef GPIO_InitStruct = {0}; 108 if(adcHandle->Instance==ADC 1)109 { 110 /* USER CODE BEGIN ADC 1_MspInit 0 */111 112 /* USER CODE END ADC 1_MspInit 0 */113 /* ADC 1clock enable */114 __HAL_RCC_ADC 12_CLK_ENABLE();133 if(adcHandle->Instance==ADC3) 134 { 135 /* USER CODE BEGIN ADC3_MspInit 0 */ 136 137 /* USER CODE END ADC3_MspInit 0 */ 138 /* ADC3 clock enable */ 139 __HAL_RCC_ADC3_CLK_ENABLE(); 115 140 116 141 __HAL_RCC_GPIOC_CLK_ENABLE(); 117 /**ADC 1GPIO Configuration118 PC0 ------> ADC 1_INP10142 /**ADC3 GPIO Configuration 143 PC0 ------> ADC3_INP10 119 144 */ 120 GPIO_InitStruct.Pin = GPIO_PIN_0;145 GPIO_InitStruct.Pin = U_BAT_Pin; 121 146 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; 122 147 GPIO_InitStruct.Pull = GPIO_NOPULL; 123 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); 124 125 /* ADC1 DMA Init */ 126 /* ADC1 Init */ 127 hdma_adc1.Instance = DMA1_Stream5; 128 hdma_adc1.Init.Request = DMA_REQUEST_ADC1; 129 hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; 130 hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; 131 hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; 132 hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 133 hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; 134 hdma_adc1.Init.Mode = DMA_CIRCULAR; 135 hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; 136 hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; 137 if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) 148 HAL_GPIO_Init(U_BAT_GPIO_Port, &GPIO_InitStruct); 149 150 /* ADC3 DMA Init */ 151 /* ADC3 Init */ 152 hdma_adc3.Instance = BDMA_Channel0; 153 hdma_adc3.Init.Request = BDMA_REQUEST_ADC3; 154 hdma_adc3.Init.Direction = DMA_PERIPH_TO_MEMORY; 155 hdma_adc3.Init.PeriphInc = DMA_PINC_DISABLE; 156 hdma_adc3.Init.MemInc = DMA_MINC_ENABLE; 157 hdma_adc3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; 158 hdma_adc3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; 159 hdma_adc3.Init.Mode = DMA_CIRCULAR; 160 hdma_adc3.Init.Priority = DMA_PRIORITY_LOW; 161 if (HAL_DMA_Init(&hdma_adc3) != HAL_OK) 138 162 { 139 163 Error_Handler(); 140 164 } 141 165 142 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc 1);143 144 /* USER CODE BEGIN ADC 1_MspInit 1 */145 146 /* USER CODE END ADC 1_MspInit 1 */166 __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc3); 167 168 /* USER CODE BEGIN ADC3_MspInit 1 */ 169 170 /* USER CODE END ADC3_MspInit 1 */ 147 171 } 148 172 } … … 151 175 { 152 176 153 if(adcHandle->Instance==ADC 1)154 { 155 /* USER CODE BEGIN ADC 1_MspDeInit 0 */156 157 /* USER CODE END ADC 1_MspDeInit 0 */177 if(adcHandle->Instance==ADC3) 178 { 179 /* USER CODE BEGIN ADC3_MspDeInit 0 */ 180 181 /* USER CODE END ADC3_MspDeInit 0 */ 158 182 /* Peripheral clock disable */ 159 __HAL_RCC_ADC 12_CLK_DISABLE();160 161 /**ADC 1GPIO Configuration162 PC0 ------> ADC 1_INP10183 __HAL_RCC_ADC3_CLK_DISABLE(); 184 185 /**ADC3 GPIO Configuration 186 PC0 ------> ADC3_INP10 163 187 */ 164 HAL_GPIO_DeInit( GPIOC, GPIO_PIN_0);165 166 /* ADC 1DMA DeInit */188 HAL_GPIO_DeInit(U_BAT_GPIO_Port, U_BAT_Pin); 189 190 /* ADC3 DMA DeInit */ 167 191 HAL_DMA_DeInit(adcHandle->DMA_Handle); 168 /* USER CODE BEGIN ADC 1_MspDeInit 1 */169 170 /* USER CODE END ADC 1_MspDeInit 1 */192 /* USER CODE BEGIN ADC3_MspDeInit 1 */ 193 194 /* USER CODE END ADC3_MspDeInit 1 */ 171 195 } 172 196 } -
ctrl/firmware/Main/CubeMX/Core/Src/dma.c
r91 r92 59 59 HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 5, 0); 60 60 HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn); 61 /* DMA1_Stream5_IRQn interrupt configuration */62 HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0);63 HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);64 61 65 62 } -
ctrl/firmware/Main/CubeMX/Core/Src/main.c
r91 r92 21 21 #include "cmsis_os.h" 22 22 #include "adc.h" 23 #include "bdma.h" 23 24 #include "dma.h" 24 25 #include "fatfs.h" … … 131 132 MX_DMA_Init(); 132 133 //MX_MDMA_Init(); 134 MX_BDMA_Init(); 133 135 MX_RTC_Init(); 134 136 MX_SPI4_Init(); 135 137 MX_SDMMC1_SD_Init(); 136 138 MX_USART3_UART_Init(); 137 MX_TIM3_Init();138 139 MX_FATFS_Init(); 139 140 MX_TIM8_Init(); … … 142 143 MX_USART10_UART_Init(); 143 144 MX_TIM6_Init(); 145 MX_I2C2_Init(); 146 MX_ADC3_Init(); 144 147 MX_I2C1_Init(); 145 MX_I2C2_Init(); 146 MX_ADC1_Init(); 148 MX_TIM3_Init(); 147 149 /* USER CODE BEGIN 2 */ 148 150 … … 300 302 MPU_InitStruct.Number = MPU_REGION_NUMBER1; 301 303 MPU_InitStruct.BaseAddress = 0x24000000; 302 MPU_InitStruct.Size = MPU_REGION_SIZE_ 128KB;304 MPU_InitStruct.Size = MPU_REGION_SIZE_8KB; 303 305 MPU_InitStruct.SubRegionDisable = 0x0; 304 306 MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; … … 371 373 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 372 374 375 printf("Wrong parameters value: file %s on line %d\r\n", file, line); 376 373 377 /* USER CODE END 6 */ 374 378 } -
ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c
r91 r92 61 61 62 62 /* External variables --------------------------------------------------------*/ 63 extern DMA_HandleTypeDef hdma_adc 1;63 extern DMA_HandleTypeDef hdma_adc3; 64 64 extern MDMA_HandleTypeDef hmdma_mdma_channel0_sdmmc1_end_data_0; 65 65 extern SD_HandleTypeDef hsd1; … … 251 251 252 252 /** 253 * @brief This function handles DMA1 stream5 global interrupt.254 */255 void DMA1_Stream5_IRQHandler(void)256 {257 /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */258 259 /* USER CODE END DMA1_Stream5_IRQn 0 */260 HAL_DMA_IRQHandler(&hdma_adc1);261 /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */262 263 /* USER CODE END DMA1_Stream5_IRQn 1 */264 }265 266 /**267 253 * @brief This function handles EXTI line[9:5] interrupts. 268 254 */ … … 406 392 407 393 /* USER CODE END MDMA_IRQn 1 */ 394 } 395 396 /** 397 * @brief This function handles BDMA channel0 global interrupt. 398 */ 399 void BDMA_Channel0_IRQHandler(void) 400 { 401 /* USER CODE BEGIN BDMA_Channel0_IRQn 0 */ 402 403 /* USER CODE END BDMA_Channel0_IRQn 0 */ 404 HAL_DMA_IRQHandler(&hdma_adc3); 405 /* USER CODE BEGIN BDMA_Channel0_IRQn 1 */ 406 407 /* USER CODE END BDMA_Channel0_IRQn 1 */ 408 408 } 409 409
Note: See TracChangeset
for help on using the changeset viewer.