Posted: 2020-08-19
Status:
Completed
Previous:
STM32硬件层HAL库TIMPWM输入测量HAL篇12
Analog->ADC1配置Timer 4 Capture Compare 4 eventDisableTimers->TIM4配置Internal ClockPWM Compare No OutputParameter Settings配置719,自动重载数值——999,计数模式——UP,自动重载预装载——Disable CKD——No DivisionPWM Mode 1, Pulse——500,Output compare preload——Enable,Fast Mode——Disable,CH Polarity——LowGENERATE CODE自动生成代码1
2
3
//__IO uint16_t ADC_ConvertedValue[3] = {0};
#define ADC_BUFF_SIZE 100
__IO uint16_t ADC_ConvertedValue[ADC_BUFF_SIZE][3];
1
2
3
//HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_ConvertedValue,3);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_ConvertedValue,3*ADC_BUFF_SIZE);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* @brief Conversion complete callback in non blocking mode
* @param hadc: ADC handle
* @retval None
*/
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
uint8_t i=0;
uint32_t vref_adc=0,vsense_adc=0,adc_adc=0;
if(hadc->Instance==ADC1)
{
for(i=0; i<ADC_BUFF_SIZE; i++)
{
vref_adc+=ADC_ConvertedValue[i][2];
vsense_adc+=ADC_ConvertedValue[i][1];
adc_adc+=ADC_ConvertedValue[i][0];
}
VREF=1.2f*4095*ADC_BUFF_SIZE/vref_adc;
VSENSE=VREF*vsense_adc/ADC_BUFF_SIZE/4095;
temp=(1.43f-VSENSE)*1000/4.3+25;
adcValue=VREF*adc_adc/ADC_BUFF_SIZE/4095;
printf( "\r\n The IC current tem= %.2fC\r\n", temp);
printf( "\r\n The IC current VDDA= %.2fV\r\n", VREF);
printf( "\r\n The IC current ADC= %.2fV\r\n", adcValue);
}
}