1. ADC轮询采集
- CubeMx配置
持续传递模式,仅初始化一个采集通道 - 基础代码编写
uint32_t Poll_ADC(ADC_HandleTypeDef hadcx)
{
uint32_t AD_Value;
HAL_ADC_Start(&hadcx);
HAL_ADC_PollForConversion(&hadcx, 50);
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadcx),HAL_ADC_STATE_REG_EOC))
{
AD_Value=HAL_ADC_GetValue(&hadcx);
return AD_Value;
}
else
{
return 99;
}
}
2. ADC+DMA多通道采集
- CubeMx配置
- 代码编写
#include "stdint.h"
#define ADC_Num 5
#define ADC_Value_Num 50
extern uint32_t ADC_Value[ADC_Value_Num];
extern int AD[ADC_Num];
uint8_t ADC_Collet_DMA(int AD[]);
- ADC_DMA.c文件
#include "ADC_DMA.h"
#include "printf.h"
uint32_t ADC_Value[ADC_Value_Num];
int AD[ADC_Num];
uint8_t ADC_Collet_DMA(int AD[])
{
uint8_t i,j;
for(i=0;i<ADC_Num;i++)
{
AD[i]=0;
}
for(i=0;i<ADC_Value_Num;i++)
{
j=i%ADC_Num;
AD[j] += ADC_Value[i];
}
for(i=0;i<ADC_Num;i++)
{
AD[i] /= (ADC_Value_Num/ADC_Num);
}
return 1;
}
|