Posted
: 2020-08-19
Status
:
Completed
Previous
:
STM32硬件层HAL库TIMPWM输入测量HAL篇12
Analog
->ADC1
配置Timer 4 Capture Compare 4 event
Disable
Timers
->TIM4
配置Internal Clock
PWM Compare No Output
Parameter Settings
配置719
,自动重载数值——999
,计数模式——UP
,自动重载预装载——Disable
CKD——No Division
PWM Mode 1
, Pulse——500
,Output compare preload——Enable
,Fast Mode——Disable
,CH Polarity——Low
GENERATE 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);
}
}