| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //
- // Created by admin on 2025/10/1.
- //
- #include "Battery.h"
- /*
- ****************************************************************************************************
- 2025/10/1 计划采用ADC来实现电量检测
- */
- ADC_HandleTypeDef g_adc_handle;
- void adc_init(void)
- {
- g_adc_handle.Instance = ADC_ADCX;
- g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;
- g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;
- g_adc_handle.Init.ContinuousConvMode = DISABLE;
- g_adc_handle.Init.NbrOfConversion = 1;
- g_adc_handle.Init.DiscontinuousConvMode = DISABLE;
- g_adc_handle.Init.NbrOfDiscConversion = 0;
- g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;
- HAL_ADC_Init(&g_adc_handle);
- HAL_ADCEx_Calibration_Start(&g_adc_handle);
- }
- void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
- {
- if(hadc->Instance == ADC_ADCX)
- {
- GPIO_InitTypeDef gpio_init_struct;
- RCC_PeriphCLKInitTypeDef adc_clk_init = {0};
- ADC_ADCX_CHY_CLK_ENABLE();
- ADC_ADCX_CHY_GPIO_CLK_ENABLE();
- adc_clk_init.PeriphClockSelection = RCC_PERIPHCLK_ADC;
- adc_clk_init.AdcClockSelection = RCC_ADCPCLK2_DIV6;
- HAL_RCCEx_PeriphCLKConfig(&adc_clk_init);
- gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;
- gpio_init_struct.Mode = GPIO_MODE_ANALOG;
- HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);
- }
- }
- void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime)
- {
- ADC_ChannelConfTypeDef adc_ch_conf;
- adc_ch_conf.Channel = ch;
- adc_ch_conf.Rank = rank;
- adc_ch_conf.SamplingTime = stime;
- HAL_ADC_ConfigChannel(adc_handle, &adc_ch_conf);
- }
- uint32_t adc_get_result(uint32_t ch)
- {
- adc_channel_set(&g_adc_handle , ch, ADC_REGULAR_RANK_1, ADC_SAMPLETIME_239CYCLES_5);
- HAL_ADC_Start(&g_adc_handle);
- HAL_ADC_PollForConversion(&g_adc_handle, 10);
- return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);
- }
- uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
- {
- uint32_t temp_val = 0;
- uint8_t t;
- for (t = 0; t < times; t++)
- {
- temp_val += adc_get_result(ch);
- HAL_Delay(5);
- }
- return temp_val / times;
- }
|