软件触发:STM32 HAL库 软件触发ADC 多通道连续转换_随风飘零翼的博客-CSDN博客
配置如图
注意采样周期不要过小,不然频繁中断会导致在RTOS中卡死。需要将数组放大
这里设置单次,每次使用重新启动dma。防止数据传输错误。我在用HAL库时没有改善好此问题,之前用标准库没碰到adc通道值突然变化。
//ADC采集结构体
struct ADC1_READ
{
__IO uint16_t PT100,
HongWaiTemp;
};
union ADC1_DATA
{
struct ADC1_READ ADC1_Read;
__IO uint16_t all[ADC_CHANNEL];
};
/
extern union ADC1_DATA ADC1_Data;
#include "ADCdma.h"
union ADC1_DATA ADC1_Data;
void ADC_INIT()
{
// HAL_ADCEx_Calibration_Start(&hadc1,ADC_DIFFERENTIAL_ENDED); //ADC2内部校准
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1_Data.all, ADC_CHANNEL);
}
void ADC_Conversion()
{
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1_Data.all, ADC_CHANNEL);
xx=ADC1_Data.ADC1_Read.HongWaiTemp*3.3/4095;
……
}
//每次dma转换完成后会进入中断
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
if(hadc==(&hadc1))
{
//每次转换完停止DMA 传输,使用时开启,避免传输错位。DMA配置成单次转换,
HAL_ADC_Stop_DMA(&hadc1);
}
}