AD采集不住,需要在开始采集之前进行校准,校准函数如下:
HAL_ADCEx_Calibration_Start();
时钟设置如下
AD基本8个通道设置
AD DMA 设置
回调函数重写
uint16_t data[8]; //注意这里是uint16_t
uint8_t eoc=0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if((HAL_ADC_GetState(hadc)&HAL_ADC_STATE_REG_EOC)==HAL_ADC_STATE_REG_EOC)
{
eoc=1;
}
}
void output_ad(void)
{
int i=0;
printf("ad = { ");
for(i=0;i<8;i++)
{
printf( " ch%d = %.2fV",i,data[i]*0.0008056640625);
}
printf("}\r\n");
}
主函数内容:
//printf("hello stm32\r\n");
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)data,8); //开始采集
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(eoc)//采集完成
{
eoc=0;
output_ad();
HAL_ADC_Start_DMA(&hadc1,(uint32_t*)data,8);
}
HAL_Delay(500);
}
/* USER CODE END 3 */