diff --git a/Core/Inc/adc.h b/Core/Inc/adc.h index 674dd85..34c0965 100644 --- a/Core/Inc/adc.h +++ b/Core/Inc/adc.h @@ -32,12 +32,15 @@ extern "C" { /* USER CODE END Includes */ +extern ADC_HandleTypeDef hadc1; + extern ADC_HandleTypeDef hadc3; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ +void MX_ADC1_Init(void); void MX_ADC3_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index 8162c80..d81a194 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -52,12 +52,14 @@ void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void DebugMon_Handler(void); +void DMA1_Stream0_IRQHandler(void); void DMA1_Stream1_IRQHandler(void); void DMA1_Stream2_IRQHandler(void); void DMA1_Stream3_IRQHandler(void); void DMA1_Stream4_IRQHandler(void); void DMA1_Stream5_IRQHandler(void); void DMA1_Stream6_IRQHandler(void); +void ADC_IRQHandler(void); void FDCAN1_IT0_IRQHandler(void); void FDCAN2_IT0_IRQHandler(void); void SPI1_IRQHandler(void); diff --git a/Core/Src/adc.c b/Core/Src/adc.c index 036ef33..b19817e 100644 --- a/Core/Src/adc.c +++ b/Core/Src/adc.c @@ -24,8 +24,82 @@ /* USER CODE END 0 */ +ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc3; +DMA_HandleTypeDef hdma_adc1; +/* ADC1 init function */ +void MX_ADC1_Init(void) +{ + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_MultiModeTypeDef multimode = {0}; + ADC_ChannelConfTypeDef sConfig = {0}; + + /* USER CODE BEGIN ADC1_Init 1 */ + + /* USER CODE END ADC1_Init 1 */ + + /** Common config + */ + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV64; + hadc1.Init.Resolution = ADC_RESOLUTION_16B; + hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + hadc1.Init.LowPowerAutoWait = DISABLE; + hadc1.Init.ContinuousConvMode = ENABLE; + hadc1.Init.NbrOfConversion = 2; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; + hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; + hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; + hadc1.Init.OversamplingMode = DISABLE; + hadc1.Init.Oversampling.Ratio = 1; + if (HAL_ADC_Init(&hadc1) != HAL_OK) + { + Error_Handler(); + } + + /** Configure the ADC multi-mode + */ + multimode.Mode = ADC_MODE_INDEPENDENT; + if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_4; + sConfig.Rank = ADC_REGULAR_RANK_1; + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SingleDiff = ADC_SINGLE_ENDED; + sConfig.OffsetNumber = ADC_OFFSET_NONE; + sConfig.Offset = 0; + sConfig.OffsetSignedSaturation = DISABLE; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + + /** Configure Regular Channel + */ + sConfig.Rank = ADC_REGULAR_RANK_2; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} /* ADC3 init function */ void MX_ADC3_Init(void) { @@ -88,30 +162,55 @@ void MX_ADC3_Init(void) void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) { - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - if(adcHandle->Instance==ADC3) + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(adcHandle->Instance==ADC1) { - /* USER CODE BEGIN ADC3_MspInit 0 */ + /* USER CODE BEGIN ADC1_MspInit 0 */ - /* USER CODE END ADC3_MspInit 0 */ + /* USER CODE END ADC1_MspInit 0 */ + /* ADC1 clock enable */ + __HAL_RCC_ADC12_CLK_ENABLE(); - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; - PeriphClkInitStruct.PLL2.PLL2M = 2; - PeriphClkInitStruct.PLL2.PLL2N = 16; - PeriphClkInitStruct.PLL2.PLL2P = 2; - PeriphClkInitStruct.PLL2.PLL2Q = 2; - PeriphClkInitStruct.PLL2.PLL2R = 2; - PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3; - PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; - PeriphClkInitStruct.PLL2.PLL2FRACN = 0; - PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**ADC1 GPIO Configuration + PC4 ------> ADC1_INP4 + */ + GPIO_InitStruct.Pin = GPIO_PIN_4; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* ADC1 DMA Init */ + /* ADC1 Init */ + hdma_adc1.Instance = DMA1_Stream2; + hdma_adc1.Init.Request = DMA_REQUEST_ADC1; + hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_adc1.Init.Mode = DMA_CIRCULAR; + hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; + hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) { Error_Handler(); } + __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } + else if(adcHandle->Instance==ADC3) + { + /* USER CODE BEGIN ADC3_MspInit 0 */ + + /* USER CODE END ADC3_MspInit 0 */ /* ADC3 clock enable */ __HAL_RCC_ADC3_CLK_ENABLE(); /* USER CODE BEGIN ADC3_MspInit 1 */ @@ -123,7 +222,29 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) { - if(adcHandle->Instance==ADC3) + if(adcHandle->Instance==ADC1) + { + /* USER CODE BEGIN ADC1_MspDeInit 0 */ + + /* USER CODE END ADC1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_ADC12_CLK_DISABLE(); + + /**ADC1 GPIO Configuration + PC4 ------> ADC1_INP4 + */ + HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4); + + /* ADC1 DMA DeInit */ + HAL_DMA_DeInit(adcHandle->DMA_Handle); + + /* ADC1 interrupt Deinit */ + HAL_NVIC_DisableIRQ(ADC_IRQn); + /* USER CODE BEGIN ADC1_MspDeInit 1 */ + + /* USER CODE END ADC1_MspDeInit 1 */ + } + else if(adcHandle->Instance==ADC3) { /* USER CODE BEGIN ADC3_MspDeInit 0 */ diff --git a/Core/Src/dma.c b/Core/Src/dma.c index fc4458f..6c20c9a 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -44,6 +44,9 @@ void MX_DMA_Init(void) __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); /* DMA1_Stream1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); diff --git a/Core/Src/main.c b/Core/Src/main.c index 3a3f847..e40c350 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -61,6 +61,7 @@ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); +void PeriphCommonClock_Config(void); static void MPU_Config(void); void MX_FREERTOS_Init(void); /* USER CODE BEGIN PFP */ @@ -106,6 +107,9 @@ int main(void) /* Configure the system clock */ SystemClock_Config(); + /* Configure the peripherals common clocks */ + PeriphCommonClock_Config(); + /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ @@ -130,6 +134,7 @@ int main(void) MX_UART5_Init(); MX_TIM3_Init(); MX_SPI6_Init(); + MX_ADC1_Init(); /* USER CODE BEGIN 2 */ robotSelfCheck(); //自检LED @@ -222,6 +227,32 @@ void SystemClock_Config(void) HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); } +/** + * @brief Peripherals Common Clock Configuration + * @retval None + */ +void PeriphCommonClock_Config(void) +{ + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInitStruct.PLL2.PLL2M = 2; + PeriphClkInitStruct.PLL2.PLL2N = 16; + PeriphClkInitStruct.PLL2.PLL2P = 2; + PeriphClkInitStruct.PLL2.PLL2Q = 2; + PeriphClkInitStruct.PLL2.PLL2R = 2; + PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3; + PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; + PeriphClkInitStruct.PLL2.PLL2FRACN = 0; + PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } +} + /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ diff --git a/Core/Src/spi.c b/Core/Src/spi.c index d7cc610..26204ec 100644 --- a/Core/Src/spi.c +++ b/Core/Src/spi.c @@ -223,7 +223,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) __HAL_LINKDMA(spiHandle,hdmarx,hdma_spi1_rx); /* SPI1_TX Init */ - hdma_spi1_tx.Instance = DMA1_Stream2; + hdma_spi1_tx.Instance = DMA1_Stream3; hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX; hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE; @@ -288,7 +288,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle) /* SPI2 DMA Init */ /* SPI2_RX Init */ - hdma_spi2_rx.Instance = DMA1_Stream3; + hdma_spi2_rx.Instance = DMA1_Stream0; hdma_spi2_rx.Init.Request = DMA_REQUEST_SPI2_RX; hdma_spi2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_spi2_rx.Init.PeriphInc = DMA_PINC_DISABLE; diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index 280b30e..b7fb098 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -56,6 +56,8 @@ /* External variables --------------------------------------------------------*/ extern PCD_HandleTypeDef hpcd_USB_OTG_HS; +extern DMA_HandleTypeDef hdma_adc1; +extern ADC_HandleTypeDef hadc1; extern FDCAN_HandleTypeDef hfdcan1; extern FDCAN_HandleTypeDef hfdcan2; extern FDCAN_HandleTypeDef hfdcan3; @@ -185,6 +187,20 @@ void DebugMon_Handler(void) /* please refer to the startup file (startup_stm32h7xx.s). */ /******************************************************************************/ +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_spi2_rx); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + /** * @brief This function handles DMA1 stream1 global interrupt. */ @@ -207,7 +223,7 @@ void DMA1_Stream2_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream2_IRQn 0 */ /* USER CODE END DMA1_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi1_tx); + HAL_DMA_IRQHandler(&hdma_adc1); /* USER CODE BEGIN DMA1_Stream2_IRQn 1 */ /* USER CODE END DMA1_Stream2_IRQn 1 */ @@ -221,7 +237,7 @@ void DMA1_Stream3_IRQHandler(void) /* USER CODE BEGIN DMA1_Stream3_IRQn 0 */ /* USER CODE END DMA1_Stream3_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi2_rx); + HAL_DMA_IRQHandler(&hdma_spi1_tx); /* USER CODE BEGIN DMA1_Stream3_IRQn 1 */ /* USER CODE END DMA1_Stream3_IRQn 1 */ @@ -269,6 +285,20 @@ void DMA1_Stream6_IRQHandler(void) /* USER CODE END DMA1_Stream6_IRQn 1 */ } +/** + * @brief This function handles ADC1 and ADC2 global interrupts. + */ +void ADC_IRQHandler(void) +{ + /* USER CODE BEGIN ADC_IRQn 0 */ + + /* USER CODE END ADC_IRQn 0 */ + HAL_ADC_IRQHandler(&hadc1); + /* USER CODE BEGIN ADC_IRQn 1 */ + + /* USER CODE END ADC_IRQn 1 */ +} + /** * @brief This function handles FDCAN1 interrupt 0. */ diff --git a/TronOneH7_Scaffold.ioc b/TronOneH7_Scaffold.ioc index 48dbe17..b0acdd6 100644 --- a/TronOneH7_Scaffold.ioc +++ b/TronOneH7_Scaffold.ioc @@ -1,6 +1,24 @@ #MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_4 +ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_4 +ADC1.ClockPrescaler=ADC_CLOCK_ASYNC_DIV64 +ADC1.ContinuousConvMode=ENABLE +ADC1.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,master,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler,ConversionDataManagement,ContinuousConvMode,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,OffsetNumber-1\#ChannelRegularConversion,OffsetSignedSaturation-1\#ChannelRegularConversion,NbrOfConversion +ADC1.NbrOfConversion=2 +ADC1.NbrOfConversionFlag=1 +ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetNumber-1\#ChannelRegularConversion=ADC_OFFSET_NONE +ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC1.OffsetSignedSaturation-1\#ChannelRegularConversion=DISABLE +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.Rank-1\#ChannelRegularConversion=2 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.master=1 ADC3.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR -ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSign-0\#ChannelRegularConversion,NbrOfConversionFlag +ADC3.ClockPrescaler=ADC_CLOCK_ASYNC_DIV64 +ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSign-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler ADC3.NbrOfConversionFlag=1 ADC3.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE ADC3.OffsetSign-0\#ChannelRegularConversion=ADC3_OFFSET_SIGN_NEGATIVE @@ -26,12 +44,31 @@ CRC.DefaultInitValueUse=DEFAULT_INIT_VALUE_DISABLE CRC.DefaultPolynomialUse=DEFAULT_POLYNOMIAL_DISABLE CRC.IPParameters=InputDataInversionMode,DefaultInitValueUse,DefaultPolynomialUse,CRCLength CRC.InputDataInversionMode=CRC_INPUTDATA_INVERSION_BYTE +Dma.ADC1.14.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.14.EventEnable=DISABLE +Dma.ADC1.14.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.ADC1.14.Instance=DMA1_Stream2 +Dma.ADC1.14.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.ADC1.14.MemInc=DMA_MINC_ENABLE +Dma.ADC1.14.Mode=DMA_CIRCULAR +Dma.ADC1.14.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.ADC1.14.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.14.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC1.14.Priority=DMA_PRIORITY_LOW +Dma.ADC1.14.RequestNumber=1 +Dma.ADC1.14.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC1.14.SignalID=NONE +Dma.ADC1.14.SyncEnable=DISABLE +Dma.ADC1.14.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC1.14.SyncRequestNumber=1 +Dma.ADC1.14.SyncSignalID=NONE Dma.Request0=USART10_RX Dma.Request1=USART10_TX Dma.Request10=USART3_TX Dma.Request11=SPI1_RX Dma.Request12=SPI1_TX Dma.Request13=UART5_RX +Dma.Request14=ADC1 Dma.Request2=SPI2_RX Dma.Request3=SPI2_TX Dma.Request4=UART7_RX @@ -40,7 +77,7 @@ Dma.Request6=USART1_TX Dma.Request7=USART2_RX Dma.Request8=USART2_TX Dma.Request9=USART3_RX -Dma.RequestsNb=14 +Dma.RequestsNb=15 Dma.SPI1_RX.11.Direction=DMA_PERIPH_TO_MEMORY Dma.SPI1_RX.11.EventEnable=DISABLE Dma.SPI1_RX.11.FIFOMode=DMA_FIFOMODE_DISABLE @@ -62,7 +99,7 @@ Dma.SPI1_RX.11.SyncSignalID=NONE Dma.SPI1_TX.12.Direction=DMA_MEMORY_TO_PERIPH Dma.SPI1_TX.12.EventEnable=DISABLE Dma.SPI1_TX.12.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.SPI1_TX.12.Instance=DMA1_Stream2 +Dma.SPI1_TX.12.Instance=DMA1_Stream3 Dma.SPI1_TX.12.MemDataAlignment=DMA_MDATAALIGN_HALFWORD Dma.SPI1_TX.12.MemInc=DMA_MINC_ENABLE Dma.SPI1_TX.12.Mode=DMA_NORMAL @@ -80,7 +117,7 @@ Dma.SPI1_TX.12.SyncSignalID=NONE Dma.SPI2_RX.2.Direction=DMA_PERIPH_TO_MEMORY Dma.SPI2_RX.2.EventEnable=DISABLE Dma.SPI2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.SPI2_RX.2.Instance=DMA1_Stream3 +Dma.SPI2_RX.2.Instance=DMA1_Stream0 Dma.SPI2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE Dma.SPI2_RX.2.MemInc=DMA_MINC_ENABLE Dma.SPI2_RX.2.Mode=DMA_NORMAL @@ -414,33 +451,34 @@ MMTAppRegionsCount=6 MMTConfigApplied=false Mcu.CPN=STM32H723VGT6 Mcu.Family=STM32H7 -Mcu.IP0=ADC3 -Mcu.IP1=CORTEX_M7 -Mcu.IP10=RCC -Mcu.IP11=SPI1 -Mcu.IP12=SPI2 -Mcu.IP13=SPI6 -Mcu.IP14=SYS -Mcu.IP15=TIM1 -Mcu.IP16=TIM3 -Mcu.IP17=TIM12 -Mcu.IP18=UART5 -Mcu.IP19=UART7 -Mcu.IP2=CRC -Mcu.IP20=USART1 -Mcu.IP21=USART2 -Mcu.IP22=USART3 -Mcu.IP23=USART10 -Mcu.IP24=USB_DEVICE -Mcu.IP25=USB_OTG_HS -Mcu.IP3=DMA -Mcu.IP4=FDCAN1 -Mcu.IP5=FDCAN2 -Mcu.IP6=FDCAN3 -Mcu.IP7=FREERTOS -Mcu.IP8=MEMORYMAP -Mcu.IP9=NVIC -Mcu.IPNb=26 +Mcu.IP0=ADC1 +Mcu.IP1=ADC3 +Mcu.IP10=NVIC +Mcu.IP11=RCC +Mcu.IP12=SPI1 +Mcu.IP13=SPI2 +Mcu.IP14=SPI6 +Mcu.IP15=SYS +Mcu.IP16=TIM1 +Mcu.IP17=TIM3 +Mcu.IP18=TIM12 +Mcu.IP19=UART5 +Mcu.IP2=CORTEX_M7 +Mcu.IP20=UART7 +Mcu.IP21=USART1 +Mcu.IP22=USART2 +Mcu.IP23=USART3 +Mcu.IP24=USART10 +Mcu.IP25=USB_DEVICE +Mcu.IP26=USB_OTG_HS +Mcu.IP3=CRC +Mcu.IP4=DMA +Mcu.IP5=FDCAN1 +Mcu.IP6=FDCAN2 +Mcu.IP7=FDCAN3 +Mcu.IP8=FREERTOS +Mcu.IP9=MEMORYMAP +Mcu.IPNb=27 Mcu.Name=STM32H723VGTx Mcu.Package=LQFP100 Mcu.Pin0=PE2 @@ -450,67 +488,70 @@ Mcu.Pin11=PA2 Mcu.Pin12=PA5 Mcu.Pin13=PA6 Mcu.Pin14=PA7 -Mcu.Pin15=PB1 -Mcu.Pin16=PE7 -Mcu.Pin17=PE8 -Mcu.Pin18=PE9 -Mcu.Pin19=PE10 +Mcu.Pin15=PC4 +Mcu.Pin16=PB1 +Mcu.Pin17=PE7 +Mcu.Pin18=PE8 +Mcu.Pin19=PE9 Mcu.Pin2=PC14-OSC32_IN -Mcu.Pin20=PE12 -Mcu.Pin21=PE13 -Mcu.Pin22=PE15 -Mcu.Pin23=PB10 -Mcu.Pin24=PB11 -Mcu.Pin25=PB13 -Mcu.Pin26=PB15 -Mcu.Pin27=PD8 -Mcu.Pin28=PD9 -Mcu.Pin29=PD10 +Mcu.Pin20=PE10 +Mcu.Pin21=PE12 +Mcu.Pin22=PE13 +Mcu.Pin23=PE15 +Mcu.Pin24=PB10 +Mcu.Pin25=PB11 +Mcu.Pin26=PB13 +Mcu.Pin27=PB15 +Mcu.Pin28=PD8 +Mcu.Pin29=PD9 Mcu.Pin3=PC15-OSC32_OUT -Mcu.Pin30=PD12 -Mcu.Pin31=PD13 -Mcu.Pin32=PA8 -Mcu.Pin33=PA9 -Mcu.Pin34=PA10 -Mcu.Pin35=PA11 -Mcu.Pin36=PA12 -Mcu.Pin37=PC10 -Mcu.Pin38=PC11 -Mcu.Pin39=PC12 +Mcu.Pin30=PD10 +Mcu.Pin31=PD12 +Mcu.Pin32=PD13 +Mcu.Pin33=PA8 +Mcu.Pin34=PA9 +Mcu.Pin35=PA10 +Mcu.Pin36=PA11 +Mcu.Pin37=PA12 +Mcu.Pin38=PC10 +Mcu.Pin39=PC11 Mcu.Pin4=PH0-OSC_IN -Mcu.Pin40=PD0 -Mcu.Pin41=PD1 -Mcu.Pin42=PD2 -Mcu.Pin43=PD4 -Mcu.Pin44=PD5 -Mcu.Pin45=PD6 -Mcu.Pin46=PD7 -Mcu.Pin47=PB3(JTDO/TRACESWO) -Mcu.Pin48=PB4(NJTRST) -Mcu.Pin49=PB5 +Mcu.Pin40=PC12 +Mcu.Pin41=PD0 +Mcu.Pin42=PD1 +Mcu.Pin43=PD2 +Mcu.Pin44=PD4 +Mcu.Pin45=PD5 +Mcu.Pin46=PD6 +Mcu.Pin47=PD7 +Mcu.Pin48=PB3(JTDO/TRACESWO) +Mcu.Pin49=PB4(NJTRST) Mcu.Pin5=PH1-OSC_OUT -Mcu.Pin50=PB6 -Mcu.Pin51=VP_ADC3_TempSens_Input -Mcu.Pin52=VP_CRC_VS_CRC -Mcu.Pin53=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin54=VP_SYS_VS_tim23 -Mcu.Pin55=VP_TIM1_VS_ClockSourceINT -Mcu.Pin56=VP_TIM1_VS_no_output3 -Mcu.Pin57=VP_USB_DEVICE_VS_USB_DEVICE_CDC_HS -Mcu.Pin58=VP_MEMORYMAP_VS_MEMORYMAP -Mcu.Pin59=VP_STMicroelectronics.X-CUBE-ALGOBUILD_VS_DSPOoLibraryJjLibrary_1.4.0_1.4.0 +Mcu.Pin50=PB5 +Mcu.Pin51=PB6 +Mcu.Pin52=VP_ADC3_TempSens_Input +Mcu.Pin53=VP_CRC_VS_CRC +Mcu.Pin54=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin55=VP_SYS_VS_tim23 +Mcu.Pin56=VP_TIM1_VS_ClockSourceINT +Mcu.Pin57=VP_TIM1_VS_no_output3 +Mcu.Pin58=VP_USB_DEVICE_VS_USB_DEVICE_CDC_HS +Mcu.Pin59=VP_MEMORYMAP_VS_MEMORYMAP Mcu.Pin6=PC0 +Mcu.Pin60=VP_STMicroelectronics.X-CUBE-ALGOBUILD_VS_DSPOoLibraryJjLibrary_1.4.0_1.4.0 Mcu.Pin7=PC1 Mcu.Pin8=PC2_C Mcu.Pin9=PC3_C -Mcu.PinsNb=60 +Mcu.PinsNb=61 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0 Mcu.ThirdPartyNb=1 Mcu.UserConstants= Mcu.UserName=STM32H723VGTx MxCube.Version=6.15.0 MxDb.Version=DB.6.0.150 +NVIC.ADC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream2_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true @@ -651,6 +692,8 @@ PC3_C.GPIO_Speed=GPIO_SPEED_FREQ_VERY_HIGH PC3_C.Locked=true PC3_C.PinState=GPIO_PIN_SET PC3_C.Signal=GPIO_Output +PC4.Locked=true +PC4.Signal=ADCx_INP4 PD0.Mode=FDCAN_Activate PD0.Signal=FDCAN1_RX PD1.Mode=FDCAN_Activate @@ -756,7 +799,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN2_Init-FDCAN2-false-HAL-true,5-MX_FDCAN3_Init-FDCAN3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,8-MX_FDCAN1_Init-FDCAN1-false-HAL-true,9-MX_USART10_UART_Init-USART10-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_TIM12_Init-TIM12-false-HAL-true,12-MX_UART7_Init-UART7-false-HAL-true,13-MX_TIM1_Init-TIM1-false-HAL-true,14-MX_USART1_UART_Init-USART1-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_USART2_UART_Init-USART2-false-HAL-true,17-MX_USART3_UART_Init-USART3-false-HAL-true,18-MX_SPI1_Init-SPI1-false-HAL-true,19-MX_UART5_Init-UART5-false-HAL-true,20-MX_TIM3_Init-TIM3-false-HAL-true,21-MX_SPI6_Init-SPI6-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN2_Init-FDCAN2-false-HAL-true,5-MX_FDCAN3_Init-FDCAN3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,8-MX_FDCAN1_Init-FDCAN1-false-HAL-true,9-MX_USART10_UART_Init-USART10-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_TIM12_Init-TIM12-false-HAL-true,12-MX_UART7_Init-UART7-false-HAL-true,13-MX_TIM1_Init-TIM1-false-HAL-true,14-MX_USART1_UART_Init-USART1-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_USART2_UART_Init-USART2-false-HAL-true,17-MX_USART3_UART_Init-USART3-false-HAL-true,18-MX_SPI1_Init-SPI1-false-HAL-true,19-MX_UART5_Init-UART5-false-HAL-true,20-MX_TIM3_Init-TIM3-false-HAL-true,21-MX_SPI6_Init-SPI6-false-HAL-true,22-MX_ADC1_Init-ADC1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true RCC.ADCFreq_Value=96000000 RCC.AHB12Freq_Value=240000000 RCC.AHB4Freq_Value=240000000 @@ -840,6 +883,8 @@ RCC.VCO3OutputFreq_Value=96750000 RCC.VCOInput1Freq_Value=12000000 RCC.VCOInput2Freq_Value=12000000 RCC.VCOInput3Freq_Value=750000 +SH.ADCx_INP4.0=ADC1_INP4,IN4-Single-Ended +SH.ADCx_INP4.ConfNb=1 SH.GPXTI10.0=GPIO_EXTI10 SH.GPXTI10.ConfNb=1 SH.GPXTI12.0=GPIO_EXTI12 diff --git a/User_Code/bsp/adc/bsp_adc.c b/User_Code/bsp/adc/bsp_adc.c index 2347513..915b585 100644 --- a/User_Code/bsp/adc/bsp_adc.c +++ b/User_Code/bsp/adc/bsp_adc.c @@ -1,5 +1,53 @@ -// -// Created by tuxmonkey on 2025/10/28. -// +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : bsp_adc.c + * @brief : bsp adc functions + * @author : TuxMonkey + * @date : 2025/11/22 + * @version : v1.0 + ****************************************************************************** + * @attention : Pay attention to enable the adc + ****************************************************************************** + */ +/* USER CODE END Header */ -#include "bsp_adc.h" \ No newline at end of file +/* Includes ------------------------------------------------------------------*/ +#include "bsp_adc.h" +#include "adc.h" + +/** + * @brief ADC sampling voltage array + */ +__attribute__((section (".AXI_SRAM"))) uint16_t ADC_Voltage_Val[2]; + +/** + * @brief Configures the ADC. + * @param None + * @retval None + */ +void BSP_ADC_Init(void) +{ + + HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); + HAL_ADC_Start_DMA(&hadc1, (uint32_t *) ADC_Voltage_Val, 2); + +} + +//------------------------------------------------------------------------------ + +/** + * @brief USER get current voltage. + * @param None + * @retval Voltage + */ +float USER_ADC_Voltage_Update(void) +{ + + float Voltage; + Voltage = (ADC_Voltage_Val[0] * 3.3f / 65535) * 11.0f; + return Voltage; + +} + +//------------------------------------------------------------------------------ diff --git a/User_Code/bsp/adc/bsp_adc.h b/User_Code/bsp/adc/bsp_adc.h index 7aa98af..a561e2c 100644 --- a/User_Code/bsp/adc/bsp_adc.h +++ b/User_Code/bsp/adc/bsp_adc.h @@ -1,8 +1,34 @@ -// -// Created by tuxmonkey on 2025/10/28. -// +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : bsp_adc.h + * @brief : The header file of bsp_adc.h + * @author : TuxMonkey + * @date : 2025/11/22 + * @version : v1.0 + ****************************************************************************** + * @attention : Pay attention to config the clock source of the advanced TIM + ****************************************************************************** + */ +/* USER CODE END Header */ -#ifndef TRONONEH7_SCAFFOLD_BSP_ADC_H -#define TRONONEH7_SCAFFOLD_BSP_ADC_H +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef BSP_ADC_H +#define BSP_ADC_H -#endif //TRONONEH7_SCAFFOLD_BSP_ADC_H \ No newline at end of file +#ifdef __cplusplus +extern "C" +{ + + + +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "adc.h" + +/* Externs ---------------------------------------------*/ +void BSP_ADC_Init(void); + +float USER_ADC_Voltage_Update(void); +#endif //BSP_ADC_H