initial vbat reading using adc3

This commit is contained in:
mitxela
2025-08-01 16:04:12 +01:00
parent c3e81356f5
commit 6ee513efb1
3 changed files with 182 additions and 56 deletions

View File

@@ -50,6 +50,7 @@
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
ADC_HandleTypeDef hadc3;
CRC_HandleTypeDef hcrc;
@@ -96,6 +97,7 @@ static void MX_TIM7_Init(void);
static void MX_CRC_Init(void);
static void MX_LPTIM1_Init(void);
static void MX_TIM5_Init(void);
static void MX_ADC3_Init(void);
/* USER CODE BEGIN PFP */
void tmToBcd(struct tm *in, bcdStamp_t *out );
uint8_t loadRulesSingle(char * str);
@@ -1805,7 +1807,7 @@ int main(void)
USART1->CR1 |= USART_CR1_UE;
MX_ADC3_Init();
// Configure ADC and DAC DMA for display brightness
HAL_ADC_Start(&hadc1);
@@ -1969,6 +1971,15 @@ int main(void)
monitor_vbus();
ADC123_COMMON->CCR |= ADC_CCR_VBATEN;
HAL_Delay(5);
HAL_ADC_Start(&hadc3);
HAL_ADC_PollForConversion(&hadc3, 10);
uint16_t vbat = HAL_ADC_GetValue(&hadc3) *3;
ADC123_COMMON->CCR &= ~ADC_CCR_VBATEN;
float vbatf = (float)vbat *0.0008034188034188035;//3.29/4095.0;
sprintf(textDisplay,"bat %.4f",vbatf);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
@@ -2112,6 +2123,67 @@ static void MX_ADC1_Init(void)
}
/**
* @brief ADC3 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC3_Init(void)
{
/* USER CODE BEGIN ADC3_Init 0 */
/* USER CODE END ADC3_Init 0 */
ADC_ChannelConfTypeDef sConfig = {0};
/* USER CODE BEGIN ADC3_Init 1 */
LL_ADC_StartCalibration(ADC3, LL_ADC_SINGLE_ENDED);
while (LL_ADC_IsCalibrationOnGoing(ADC3) != 0);
/* USER CODE END ADC3_Init 1 */
/** Common config
*/
hadc3.Instance = ADC3;
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc3.Init.Resolution = ADC_RESOLUTION_12B;
hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc3.Init.LowPowerAutoWait = DISABLE;
hadc3.Init.ContinuousConvMode = DISABLE;
hadc3.Init.NbrOfConversion = 1;
hadc3.Init.DiscontinuousConvMode = DISABLE;
hadc3.Init.NbrOfDiscConversion = 1;
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc3.Init.DMAContinuousRequests = DISABLE;
hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc3.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc3) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_VBAT;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_92CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC3_Init 2 */
ADC123_COMMON->CCR &= ~ADC_CCR_VBATEN;
/* USER CODE END ADC3_Init 2 */
}
/**
* @brief CRC Initialization Function
* @param None

View File

@@ -94,6 +94,8 @@ void HAL_MspInit(void)
/* USER CODE END MspInit 1 */
}
static uint32_t HAL_RCC_ADC_CLK_ENABLED=0;
/**
* @brief ADC MSP Initialization
* This function configures the hardware resources used in this example
@@ -109,7 +111,10 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_ADC_CLK_ENABLE();
HAL_RCC_ADC_CLK_ENABLED++;
if(HAL_RCC_ADC_CLK_ENABLED==1){
__HAL_RCC_ADC_CLK_ENABLE();
}
__HAL_RCC_GPIOA_CLK_ENABLE();
/**ADC1 GPIO Configuration
@@ -124,6 +129,20 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspInit 1 */
}
else if(hadc->Instance==ADC3)
{
/* USER CODE BEGIN ADC3_MspInit 0 */
/* USER CODE END ADC3_MspInit 0 */
/* Peripheral clock enable */
HAL_RCC_ADC_CLK_ENABLED++;
if(HAL_RCC_ADC_CLK_ENABLED==1){
__HAL_RCC_ADC_CLK_ENABLE();
}
/* USER CODE BEGIN ADC3_MspInit 1 */
/* USER CODE END ADC3_MspInit 1 */
}
}
@@ -141,7 +160,10 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_ADC_CLK_DISABLE();
HAL_RCC_ADC_CLK_ENABLED--;
if(HAL_RCC_ADC_CLK_ENABLED==0){
__HAL_RCC_ADC_CLK_DISABLE();
}
/**ADC1 GPIO Configuration
PA5 ------> ADC1_IN10
@@ -152,6 +174,20 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc)
/* USER CODE END ADC1_MspDeInit 1 */
}
else if(hadc->Instance==ADC3)
{
/* USER CODE BEGIN ADC3_MspDeInit 0 */
/* USER CODE END ADC3_MspDeInit 0 */
/* Peripheral clock disable */
HAL_RCC_ADC_CLK_ENABLED--;
if(HAL_RCC_ADC_CLK_ENABLED==0){
__HAL_RCC_ADC_CLK_DISABLE();
}
/* USER CODE BEGIN ADC3_MspDeInit 1 */
/* USER CODE END ADC3_MspDeInit 1 */
}
}

View File

@@ -9,6 +9,15 @@ ADC1.Overrun=ADC_OVR_DATA_OVERWRITTEN
ADC1.Rank-0\#ChannelRegularConversion=1
ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_92CYCLES_5
ADC1.master=1
ADC3.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_VBAT
ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,NbrOfConversionFlag
ADC3.NbrOfConversionFlag=1
ADC3.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE
ADC3.Rank-0\#ChannelRegularConversion=1
ADC3.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_2CYCLES_5
CAD.formats=
CAD.pinconfig=
CAD.provider=
CRC.IPParameters=InputDataInversionMode,OutputDataInversionMode,InputDataFormat
CRC.InputDataFormat=CRC_INPUTDATA_FORMAT_WORDS
CRC.InputDataInversionMode=CRC_INPUTDATA_INVERSION_BYTE
@@ -94,28 +103,30 @@ FATFS._MIN_SS=4096
File.Version=6
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32L476RGT3
Mcu.Family=STM32L4
Mcu.IP0=ADC1
Mcu.IP1=CRC
Mcu.IP10=SYS
Mcu.IP11=TIM1
Mcu.IP12=TIM2
Mcu.IP13=TIM5
Mcu.IP14=TIM6
Mcu.IP15=TIM7
Mcu.IP16=USART1
Mcu.IP17=USART2
Mcu.IP18=USB_DEVICE
Mcu.IP19=USB_OTG_FS
Mcu.IP2=DAC1
Mcu.IP3=DMA
Mcu.IP4=FATFS
Mcu.IP5=LPTIM1
Mcu.IP6=NVIC
Mcu.IP7=QUADSPI
Mcu.IP8=RCC
Mcu.IP9=RTC
Mcu.IPNb=20
Mcu.IP1=ADC3
Mcu.IP10=RTC
Mcu.IP11=SYS
Mcu.IP12=TIM1
Mcu.IP13=TIM2
Mcu.IP14=TIM5
Mcu.IP15=TIM6
Mcu.IP16=TIM7
Mcu.IP17=USART1
Mcu.IP18=USART2
Mcu.IP19=USB_DEVICE
Mcu.IP2=CRC
Mcu.IP20=USB_OTG_FS
Mcu.IP3=DAC1
Mcu.IP4=DMA
Mcu.IP5=FATFS
Mcu.IP6=LPTIM1
Mcu.IP7=NVIC
Mcu.IP8=QUADSPI
Mcu.IP9=RCC
Mcu.IPNb=21
Mcu.Name=STM32L476R(C-E-G)Tx
Mcu.Package=LQFP64
Mcu.Pin0=PC13
@@ -159,51 +170,52 @@ Mcu.Pin42=PB6
Mcu.Pin43=PB7
Mcu.Pin44=PB8
Mcu.Pin45=PB9
Mcu.Pin46=VP_CRC_VS_CRC
Mcu.Pin47=VP_FATFS_VS_Generic
Mcu.Pin48=VP_LPTIM1_VS_LPTIM_counterModeInternalClock
Mcu.Pin49=VP_RTC_VS_RTC_Activate
Mcu.Pin46=VP_ADC3_Vbat_Input
Mcu.Pin47=VP_CRC_VS_CRC
Mcu.Pin48=VP_FATFS_VS_Generic
Mcu.Pin49=VP_LPTIM1_VS_LPTIM_counterModeInternalClock
Mcu.Pin5=PC0
Mcu.Pin50=VP_SYS_VS_Systick
Mcu.Pin51=VP_TIM1_VS_ClockSourceINT
Mcu.Pin52=VP_TIM5_VS_ClockSourceINT
Mcu.Pin53=VP_TIM5_VS_no_output1
Mcu.Pin54=VP_TIM5_VS_no_output2
Mcu.Pin55=VP_TIM6_VS_ClockSourceINT
Mcu.Pin56=VP_TIM7_VS_ClockSourceINT
Mcu.Pin57=VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS
Mcu.Pin50=VP_RTC_VS_RTC_Activate
Mcu.Pin51=VP_SYS_VS_Systick
Mcu.Pin52=VP_TIM1_VS_ClockSourceINT
Mcu.Pin53=VP_TIM5_VS_ClockSourceINT
Mcu.Pin54=VP_TIM5_VS_no_output1
Mcu.Pin55=VP_TIM5_VS_no_output2
Mcu.Pin56=VP_TIM6_VS_ClockSourceINT
Mcu.Pin57=VP_TIM7_VS_ClockSourceINT
Mcu.Pin58=VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS
Mcu.Pin6=PC1
Mcu.Pin7=PC2
Mcu.Pin8=PC3
Mcu.Pin9=PA0
Mcu.PinsNb=58
Mcu.PinsNb=59
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32L476RGTx
MxCube.Version=5.6.0
MxDb.Version=DB.5.0.60
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.DMA1_Channel3_IRQn=true\:1\:0\:true\:false\:true\:false\:true
NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA1_Channel6_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA1_Channel7_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA2_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DMA2_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DMA1_Channel3_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true
NVIC.DMA1_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA1_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA1_Channel6_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA1_Channel7_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA2_Channel4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DMA2_Channel5_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.LPTIM1_IRQn=true\:1\:0\:true\:false\:true\:true\:true
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.OTG_FS_IRQn=true\:1\:0\:true\:false\:true\:false\:true
NVIC.PendSV_IRQn=true\:2\:0\:true\:false\:true\:false\:false
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.LPTIM1_IRQn=true\:1\:0\:true\:false\:true\:true\:true\:true
NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.OTG_FS_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true
NVIC.PendSV_IRQn=true\:2\:0\:true\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:false\:false\:false
NVIC.USART1_IRQn=true\:1\:0\:true\:false\:true\:true\:false
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:false\:false\:false\:false
NVIC.USART1_IRQn=true\:1\:0\:true\:false\:true\:true\:false\:true
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0.Signal=S_TIM2_CH1
PA1.Signal=S_TIM2_CH2
PA10.Mode=Asynchronous
@@ -322,10 +334,13 @@ ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=mk4-time.ioc
ProjectManager.ProjectName=mk4-time
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_QUADSPI_Init-QUADSPI-false-HAL-true,5-MX_TIM1_Init-TIM1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true,7-MX_FATFS_Init-FATFS-false-HAL-false,8-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_ADC1_Init-ADC1-false-HAL-true,12-MX_DAC1_Init-DAC1-false-HAL-true,13-MX_TIM6_Init-TIM6-false-HAL-true,14-MX_RTC_Init-RTC-true-HAL-true,15-MX_TIM7_Init-TIM7-false-HAL-true,16-MX_CRC_Init-CRC-false-HAL-true,17-MX_LPTIM1_Init-LPTIM1-false-LL-true,18-MX_TIM5_Init-TIM5-false-HAL-true
QUADSPI.ClockPrescaler-Single\ Bank=0
@@ -445,6 +460,8 @@ USB_DEVICE.VirtualMode=Msc
USB_DEVICE.VirtualModeFS=Msc_FS
USB_OTG_FS.IPParameters=VirtualMode
USB_OTG_FS.VirtualMode=Device_Only
VP_ADC3_Vbat_Input.Mode=IN-Vbat
VP_ADC3_Vbat_Input.Signal=ADC3_Vbat_Input
VP_CRC_VS_CRC.Mode=CRC_Activate
VP_CRC_VS_CRC.Signal=CRC_VS_CRC
VP_FATFS_VS_Generic.Mode=User_defined
@@ -470,3 +487,4 @@ VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT
VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Mode=MSC_FS
VP_USB_DEVICE_VS_USB_DEVICE_MSC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_MSC_FS
board=custom
isbadioc=false